diff --git a/arm_compute/core/SubTensorInfo.h b/arm_compute/core/SubTensorInfo.h
index e2532fd..54fb66a 100644
--- a/arm_compute/core/SubTensorInfo.h
+++ b/arm_compute/core/SubTensorInfo.h
@@ -27,6 +27,7 @@
 #include "arm_compute/core/ITensorInfo.h"
 
 #include "arm_compute/core/Coordinates.h"
+#include "arm_compute/core/Helpers.h"
 #include "arm_compute/core/Strides.h"
 #include "arm_compute/core/TensorInfo.h"
 #include "arm_compute/core/TensorShape.h"
diff --git a/arm_compute/graph/Nodes.h b/arm_compute/graph/Nodes.h
index 5e995ac..b879aa1 100644
--- a/arm_compute/graph/Nodes.h
+++ b/arm_compute/graph/Nodes.h
@@ -27,6 +27,7 @@
 #include "arm_compute/graph/nodes/ActivationLayer.h"
 #include "arm_compute/graph/nodes/ConvolutionLayer.h"
 #include "arm_compute/graph/nodes/FullyConnectedLayer.h"
+#include "arm_compute/graph/nodes/NormalizationLayer.h"
 #include "arm_compute/graph/nodes/PoolingLayer.h"
 #include "arm_compute/graph/nodes/SoftmaxLayer.h"
 
diff --git a/arm_compute/graph/SubTensor.h b/arm_compute/graph/SubTensor.h
new file mode 100644
index 0000000..a73b0d6
--- /dev/null
+++ b/arm_compute/graph/SubTensor.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef __ARM_COMPUTE_GRAPH_SUBTENSOR_H__
+#define __ARM_COMPUTE_GRAPH_SUBTENSOR_H__
+
+#include "arm_compute/graph/ITensorAccessor.h"
+#include "arm_compute/graph/Tensor.h"
+#include "arm_compute/graph/Types.h"
+#include "support/ToolchainSupport.h"
+
+#include <memory>
+
+namespace arm_compute
+{
+namespace graph
+{
+/** SubTensor class */
+class SubTensor final
+{
+public:
+    /** Default Constructor */
+    SubTensor();
+    /** Constructor
+     *
+     * @param[in] parent       Parent to create sub-tensor from
+     * @param[in] tensor_shape Sub-tensor shape
+     * @param[in] coords       Starting coordinates of the sub-tensor in the parent tensor
+     */
+    SubTensor(Tensor &parent, TensorShape tensor_shape, Coordinates coords);
+    /** Constructor
+     *
+     * @param[in] parent       Parent to create sub-tensor from
+     * @param[in] tensor_shape Sub-tensor shape
+     * @param[in] coords       Starting coordinates of the sub-tensor in the parent tensor
+     * @param[in] target       Execution target
+     */
+    SubTensor(ITensor *parent, TensorShape tensor_shape, Coordinates coords, Hint target);
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    SubTensor(const SubTensor &) = delete;
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    SubTensor &operator=(const SubTensor &) = delete;
+    /** Allow instances of this class to be moved */
+    SubTensor(SubTensor &&) = default;
+    /** Allow instances of this class to be moved */
+    SubTensor &operator=(SubTensor &&) = default;
+    /** Default Destructor */
+    ~SubTensor() = default;
+
+    /** Sets the given TensorInfo to the tensor
+     *
+     * @param[in] info TensorInfo to set
+     */
+    void set_info(SubTensorInfo &&info);
+    /** Returns tensor's TensorInfo
+     *
+     * @return TensorInfo of the tensor
+     */
+    const SubTensorInfo &info() const;
+    /** Returns a pointer to the internal tensor
+     *
+     * @return Tensor
+     */
+    ITensor *tensor();
+    /** Return the target that this tensor is pinned on
+     *
+     * @return Target of the tensor
+     */
+    Hint target() const;
+
+private:
+    /** Instantiates a sub-tensor */
+    void instantiate_subtensor();
+
+private:
+    Hint                     _target;    /**< Target that this tensor is pinned on */
+    Coordinates              _coords;    /**< SubTensor Coordinates */
+    SubTensorInfo            _info;      /**< SubTensor metadata */
+    ITensor                 *_parent;    /**< Parent tensor */
+    std::unique_ptr<ITensor> _subtensor; /**< SubTensor */
+};
+} // namespace graph
+} // namespace arm_compute
+#endif /* __ARM_COMPUTE_GRAPH_SUBTENSOR_H__ */
diff --git a/arm_compute/graph/Types.h b/arm_compute/graph/Types.h
index 0b9596d..538d64e 100644
--- a/arm_compute/graph/Types.h
+++ b/arm_compute/graph/Types.h
@@ -25,19 +25,24 @@
 #define __ARM_COMPUTE_GRAPH_TYPES_H__
 
 #include "arm_compute/core/ITensor.h"
+#include "arm_compute/core/SubTensorInfo.h"
 #include "arm_compute/core/TensorInfo.h"
 
 namespace arm_compute
 {
 namespace graph
 {
-using arm_compute::ActivationLayerInfo;
 using arm_compute::ITensor;
 using arm_compute::TensorInfo;
+using arm_compute::SubTensorInfo;
 using arm_compute::DataType;
+using arm_compute::Coordinates;
 using arm_compute::TensorShape;
 using arm_compute::PadStrideInfo;
 using arm_compute::WeightsInfo;
+using arm_compute::ActivationLayerInfo;
+using arm_compute::NormType;
+using arm_compute::NormalizationLayerInfo;
 using arm_compute::PoolingLayerInfo;
 using arm_compute::PoolingType;
 
@@ -49,6 +54,12 @@
     NEON       /**< Run node on a NEON capable device */
 };
 
+/**< Convolution method hint to the graph executor */
+enum class ConvolutionMethodHint
+{
+    GEMM,  /**< Convolution using GEMM */
+    DIRECT /**< Direct convolution */
+};
 } // namespace graph
 } // namespace arm_compute
 #endif /*__ARM_COMPUTE_GRAPH_TYPES_H__*/
diff --git a/arm_compute/graph/nodes/ConvolutionLayer.h b/arm_compute/graph/nodes/ConvolutionLayer.h
index c0e257b..fcd097b 100644
--- a/arm_compute/graph/nodes/ConvolutionLayer.h
+++ b/arm_compute/graph/nodes/ConvolutionLayer.h
@@ -25,15 +25,19 @@
 #define __ARM_COMPUTE_GRAPH_CONVOLUTION_LAYER_H__
 
 #include "arm_compute/graph/INode.h"
+#include "arm_compute/graph/SubTensor.h"
 #include "arm_compute/graph/Tensor.h"
 #include "arm_compute/graph/Types.h"
+#include "arm_compute/runtime/IFunction.h"
+
+#include <memory>
 
 namespace arm_compute
 {
 namespace graph
 {
 /** Convolution layer node */
-class ConvolutionLayer : public INode
+class ConvolutionLayer final : public INode
 {
 public:
     /** Default Constructor
@@ -44,12 +48,30 @@
      * @param[in] weights      Weights of the convolution layer
      * @param[in] biases       Bias of the convolution layer
      * @param[in] conv_info    Convolution information
-     * @param[in] weights_info Weights information
+     * @param[in] num_groups   (Optional) Number of groups, default = 1
+     * @param[in] weights_info (Optional) Weights information
      */
     template <typename AccessorTypeWeights, typename AccessorTypeBiases>
-    ConvolutionLayer(unsigned int conv_width, unsigned int conv_height, unsigned int ofm, AccessorTypeWeights &&weights,
-                     AccessorTypeBiases &&biases, const PadStrideInfo &conv_info, const WeightsInfo &weights_info = WeightsInfo())
-        : _conv_width(conv_width), _conv_height(conv_height), _ofm(ofm), _weights(std::move(weights)), _biases(std::move(biases)), _conv_info(conv_info), _weights_info(weights_info)
+    ConvolutionLayer(unsigned int          conv_width,
+                     unsigned int          conv_height,
+                     unsigned int          ofm,
+                     AccessorTypeWeights &&weights,
+                     AccessorTypeBiases &&biases,
+                     const PadStrideInfo   conv_info,
+                     unsigned int          num_groups   = 1,
+                     const WeightsInfo     weights_info = WeightsInfo())
+        : _conv_width(conv_width),
+          _conv_height(conv_height),
+          _ofm(ofm),
+          _weights(std::move(weights)),
+          _biases(std::move(biases)),
+          _conv_info(std::move(conv_info)),
+          _num_groups(num_groups),
+          _weights_info(std::move(weights_info)),
+          _is(nullptr),
+          _os(nullptr),
+          _ws(nullptr),
+          _bs(nullptr)
     {
     }
 
@@ -58,13 +80,35 @@
     void print_info() override;
 
 private:
-    unsigned int         _conv_width;   /**< Convolution width */
-    unsigned int         _conv_height;  /**< Convolution height */
-    unsigned int         _ofm;          /**< Output feature maps */
-    Tensor               _weights;      /**< Weights tensor */
-    Tensor               _biases;       /**< Biases tensor */
-    const PadStrideInfo &_conv_info;    /**< Convolution layer information */
-    const WeightsInfo   &_weights_info; /**< Convolution layer weights information */
+    /** Instantiates a non-grouped convolution
+     *
+     * @param[in] conv_method_hint Hint that specifies which convolution layer method to use
+     *
+     * @return Convolution function
+     */
+    std::unique_ptr<arm_compute::IFunction> instantiate_convolution(ConvolutionMethodHint conv_method_hint);
+    /** Instantiates a grouped convolution
+     *
+     * @param[in] conv_method_hint Hint that specifies which convolution layer method to use
+     *
+     * @return Grouped Convolution function
+     */
+    std::unique_ptr<arm_compute::IFunction> instantiate_grouped_convolution(ConvolutionMethodHint conv_method_hint);
+
+private:
+    unsigned int        _conv_width;   /**< Convolution width */
+    unsigned int        _conv_height;  /**< Convolution height */
+    unsigned int        _ofm;          /**< Output feature maps */
+    Tensor              _weights;      /**< Weights tensor */
+    Tensor              _biases;       /**< Biases tensor */
+    const PadStrideInfo _conv_info;    /**< Convolution layer information */
+    unsigned int        _num_groups;   /**< Number of groups */
+    const WeightsInfo   _weights_info; /**< Convolution layer weights information */
+
+    std::unique_ptr<SubTensor[]> _is; /**< Input tensor sub-tensors used for grouped convolution */
+    std::unique_ptr<SubTensor[]> _os; /**< Output tensor sub-tensors used for grouped convolution */
+    std::unique_ptr<SubTensor[]> _ws; /**< Weights tensor sub-tensors used for grouped convolution */
+    std::unique_ptr<SubTensor[]> _bs; /**< Biases tensor sub-tensors used for grouped convolution */
 };
 } // namespace graph
 } // namespace arm_compute
diff --git a/arm_compute/graph/nodes/NormalizationLayer.h b/arm_compute/graph/nodes/NormalizationLayer.h
new file mode 100644
index 0000000..40b9c2b
--- /dev/null
+++ b/arm_compute/graph/nodes/NormalizationLayer.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef __ARM_COMPUTE_GRAPH_NORMALIZATION_LAYER_H__
+#define __ARM_COMPUTE_GRAPH_NORMALIZATION_LAYER_H__
+
+#include "arm_compute/graph/INode.h"
+#include "arm_compute/graph/Types.h"
+
+namespace arm_compute
+{
+namespace graph
+{
+/** Normalization layer node */
+class NormalizationLayer final : public INode
+{
+public:
+    /** Default Constructor
+     *
+     * @param[in] norm_info Normalization layer information
+     */
+    explicit NormalizationLayer(const NormalizationLayerInfo norm_info);
+
+    // Inherited methods overriden:
+    std::unique_ptr<arm_compute::IFunction> instantiate_node(Hint hint, ITensor *input, ITensor *output) override;
+    void print_info() override;
+
+private:
+    const NormalizationLayerInfo _norm_info; /**< Normalization layer information */
+};
+} // namespace graph
+} // namespace arm_compute
+#endif /* __ARM_COMPUTE_GRAPH_NORMALIZATION_LAYER_H__ */
