diff --git a/arm_compute/runtime/NEON/functions/NEFullyConnectedLayer.h b/arm_compute/runtime/NEON/functions/NEFullyConnectedLayer.h
index 463a7d5..9bc8d21 100644
--- a/arm_compute/runtime/NEON/functions/NEFullyConnectedLayer.h
+++ b/arm_compute/runtime/NEON/functions/NEFullyConnectedLayer.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -57,6 +57,16 @@
      * @param[in]  is_batched_fc_layer True if it is a batched fully connected layer
      */
     void configure(const ITensor *input, ITensor *output, bool transpose_weights, bool is_batched_fc_layer);
+    /** Static function to check if given info will lead to a valid configuration of @ref CLFullyConnectedLayerReshapeWeights
+     *
+     * @param[in] input               Weights tensor info. The weights must be 2 dimensional. Data types supported: QS8/QS16/F32.
+     * @param[in] output              Destination tensor info. Data type supported: Same as @p input.
+     * @param[in] transpose_weights   True if the weights must be transposed. Data types supported: Same as @p weights.
+     * @param[in] is_batched_fc_layer True if it is a batched fully connected layer
+     *
+     * @return a status
+     */
+    static Status validate(const ITensorInfo *input, const ITensorInfo *output, bool transpose_weights, bool is_batched_fc_layer);
 
     // Inherited methods overridden:
     void run() override;
@@ -94,6 +104,18 @@
      * @param[in]  are_weights_reshaped (Optional) Reshape the weights tensor if false. Defaults to false.
      */
     void configure(const ITensor *input, const ITensor *weights, const ITensor *biases, ITensor *output, bool transpose_weights = true, bool are_weights_reshaped = false);
+    /** Static function to check if given info will lead to a valid configuration of @ref CLFullyConnectedLayer
+     *
+     * @param[in] input                Source tensor info. Data type supported: QS8/QS16/F16/F32.
+     * @param[in] weights              Weights tensor info. The weights must be 2 dimensional. Data type supported: Same as @p input
+     * @param[in] biases               Bias tensor info. It can be nullptr. Data type supported:Same as @p input.
+     * @param[in] output               Destination tensor info. Data type supported: Same as @p input.
+     * @param[in] transpose_weights    (Optional) Transpose weights if true. Defaults to true.
+     * @param[in] are_weights_reshaped (Optional) Reshape the weights tensor if false. Defaults to false.
+     *
+     * @return a status
+     */
+    static Status validate(const ITensorInfo *input, const ITensorInfo *weights, const ITensorInfo *biases, const ITensorInfo *output, bool transpose_weights = true, bool are_weights_reshaped = false);
 
     //Inherited methods override
     void run() override;
diff --git a/arm_compute/runtime/NEON/functions/NEGEMMConvolutionLayer.h b/arm_compute/runtime/NEON/functions/NEGEMMConvolutionLayer.h
index c3c7f82..ac5f4ca 100644
--- a/arm_compute/runtime/NEON/functions/NEGEMMConvolutionLayer.h
+++ b/arm_compute/runtime/NEON/functions/NEGEMMConvolutionLayer.h
@@ -141,12 +141,14 @@
 private:
     /** Configures the appropriate matrix multiply routine
      *
-     * @param[in]  input   Input tensor. Data types supported: QS8/QASYMM8/QS16/F16/F32.
-     * @param[in]  weights Weights tensor. Data type supported: Same as @p input.
-     * @param[out] output  Output tensor. Data types supported: Same as @p input,
-     *                     except for input of QASYMM8 type where output should be of S32 type.
+     * @param[in]  input          Input tensor. Data types supported: QS8/QASYMM8/QS16/F16/F32.
+     * @param[in]  weights        Weights tensor. Data type supported: Same as @p input.
+     * @param[out] output         Output tensor. Data types supported: Same as @p input,
+     *                            except for input of QASYMM8 type where output should be of S32 type.
+     * @param[in]  is_interleaved (Optional) True if input0 and input1 have been reshaped respectively using @ref CLGEMMInterleave4x4Kernel and @ref CLGEMMTranspose1xWKernel
+     * @param[in]  reshape_info   (Optional) GEMM reshape info. If is_interleaved_transposed = true, this object must contain the information to understand how the matrix A and matrix B have been reshaped
      */
-    void configure_mm(const ITensor *input, const ITensor *weights, ITensor *output);
+    void configure_mm(const ITensor *input, const ITensor *weights, ITensor *output, bool is_interleaved, const GEMMReshapeInfo &reshape_info = GEMMReshapeInfo());
     /** Prepare the appropriate assembly optimized kernel
      *
      * @param[in] ci CPU information
@@ -178,7 +180,7 @@
     bool _is_fully_connected_convolution;
     bool _are_weights_reshaped;
     bool _is_quantized;
-    bool _is_interleaved_transposed;
+    bool _is_interleaved;
 };
 }
 #endif /* __ARM_COMPUTE_NECONVOLUTIONGEMMLAYER_H__ */
diff --git a/arm_compute/runtime/NEON/functions/NEGEMMTranspose1xW.h b/arm_compute/runtime/NEON/functions/NEGEMMTranspose1xW.h
index 447b8c9..8b9ad13 100644
--- a/arm_compute/runtime/NEON/functions/NEGEMMTranspose1xW.h
+++ b/arm_compute/runtime/NEON/functions/NEGEMMTranspose1xW.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -42,6 +42,14 @@
      * @param[out] output Output tensor. Data type supported: same as @p input
      */
     void configure(const ITensor *input, ITensor *output);
+    /** Static function to check if given info will lead to a valid configuration of @ref NEGEMMTranspose1xW
+     *
+     * @param[in] input  First input tensor. Data type supported: U8/S8/QS8/U16/S16/F16/U32/S32/F32/
+     * @param[in] output Output tensor. Data type supported: same as @p input
+     *
+     * @return a status
+     */
+    static Status validate(const ITensorInfo *input, const ITensorInfo *output);
 };
 }
 #endif /*__ARM_COMPUTE_NEGEMMTRANSPOSE1XW_H__ */
diff --git a/arm_compute/runtime/NEON/functions/NEIm2Col.h b/arm_compute/runtime/NEON/functions/NEIm2Col.h
index cb08f5c..cf4999b 100644
--- a/arm_compute/runtime/NEON/functions/NEIm2Col.h
+++ b/arm_compute/runtime/NEON/functions/NEIm2Col.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,28 +39,30 @@
 public:
     /** Configure the im2col NEON kernel
      *
-     * @param[in]  input       The input tensor to convert. 3 lower dimensions represent a single input [width, height, IFM],
-     *                         while every optional dimension from 4 and above represent a batch of inputs. Data types supported: QS8/QS16/QASYMM8/F16/F32
-     *                         Note: QASYMM8 works only for has_bias = false
-     * @param[out] output      The output tensor. Data types supported: Same as @p input
-     * @param[in]  kernel_dims The kernel dimensions (width and height).
-     * @param[in]  conv_info   Contains padding and stride information described in @ref PadStrideInfo.
-     * @param[in]  has_bias    In case biases are provided expands the matrix with 1.
+     * @param[in]  input              The input tensor to convert. 3 lower dimensions represent a single input [width, height, IFM],
+     *                                while every optional dimension from 4 and above represent a batch of inputs. Data types supported: QS8/QS16/QASYMM8/F16/F32
+     *                                Note: QASYMM8 works only for has_bias = false
+     * @param[out] output             The output tensor. Data types supported: Same as @p input
+     * @param[in]  kernel_dims        The kernel dimensions (width and height).
+     * @param[in]  conv_info          Contains padding and stride information described in @ref PadStrideInfo.
+     * @param[in]  has_bias           In case biases are provided expands the matrix with 1.
+     * @param[in]  is_fully_connected Determines whether this kernel will be called by @ref NEFullyConnectedLayer in order to validate the arguments
      */
-    void configure(const ITensor *input, ITensor *output, const Size2D &kernel_dims, const PadStrideInfo &conv_info, bool has_bias);
+    void configure(const ITensor *input, ITensor *output, const Size2D &kernel_dims, const PadStrideInfo &conv_info, bool has_bias, bool is_fully_connected = false);
     /** Static function to check if given info will lead to a valid configuration of @ref NEIm2Col
      *
-     * @param[in] input       The input tensor to convert. 3 lower dimensions represent a single input [width, height, IFM],
-     *                        while every optional dimension from 4 and above represent a batch of inputs. Data types supported: QS8/QS16/QASYMM8/F16/F32
-     *                        Note: QASYMM8 works only for has_bias = false
-     * @param[in] output      The output tensor. Data types supported: Same as @p input
-     * @param[in] kernel_dims The kernel dimensions (width and height).
-     * @param[in] conv_info   Contains padding and stride information described in @ref PadStrideInfo.
-     * @param[in] has_bias    In case biases are provided expands the matrix with 1.
+     * @param[in] input              The input tensor to convert. 3 lower dimensions represent a single input [width, height, IFM],
+     *                               while every optional dimension from 4 and above represent a batch of inputs. Data types supported: QS8/QS16/QASYMM8/F16/F32
+     *                               Note: QASYMM8 works only for has_bias = false
+     * @param[in] output             The output tensor. Data types supported: Same as @p input
+     * @param[in] kernel_dims        The kernel dimensions (width and height).
+     * @param[in] conv_info          Contains padding and stride information described in @ref PadStrideInfo.
+     * @param[in] has_bias           In case biases are provided expands the matrix with 1.
+     * @param[in] is_fully_connected Determines whether this kernel will be called by @ref NEFullyConnectedLayer in order to validate the arguments
      *
      * @return a status
      */
-    static Status validate(const ITensorInfo *input, const ITensorInfo *output, const Size2D &kernel_dims, const PadStrideInfo &conv_info, bool has_bias);
+    static Status validate(const ITensorInfo *input, const ITensorInfo *output, const Size2D &kernel_dims, const PadStrideInfo &conv_info, bool has_bias, bool is_fully_connected);
 };
 }
 #endif /* __ARM_COMPUTE_NEIM2COL_H__ */
