diff --git a/src/core/gpu/cl/kernels/ClActivationKernel.cpp b/src/core/gpu/cl/kernels/ClActivationKernel.cpp
index e892d6a..21c0563 100644
--- a/src/core/gpu/cl/kernels/ClActivationKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClActivationKernel.cpp
@@ -87,7 +87,6 @@
 } // namespace
 
 ClActivationKernel::ClActivationKernel()
-    : _run_in_place(false)
 {
     _type = CLKernelType::ELEMENTWISE;
 }
diff --git a/src/core/gpu/cl/kernels/ClActivationKernel.h b/src/core/gpu/cl/kernels/ClActivationKernel.h
index 68c309e..720b16a 100644
--- a/src/core/gpu/cl/kernels/ClActivationKernel.h
+++ b/src/core/gpu/cl/kernels/ClActivationKernel.h
@@ -51,12 +51,9 @@
      * @param[in]      act_info        Activation layer information.
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src, ITensorInfo *dst, ActivationLayerInfo act_info);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClActivationKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src      Source tensor info. In case of @p dst tensor info = nullptr, this tensor will store the result
-     *                     of the activation function. Data types supported: QASYMM8/QASYMM8_SIGNED/QSYMM16/F16/F32.
-     * @param[in] dst      Destination tensor info. Data type supported: same as @p src
-     * @param[in] act_info Activation layer information.
+     * Similar to @ref ClActivationKernel::configure()
      *
      * @return a status
      */
@@ -66,7 +63,7 @@
     void run_op(ITensorPack &tensors, const Window &window, ::cl::CommandQueue &queue) override;
 
 private:
-    bool _run_in_place;
+    bool _run_in_place{ false };
 };
 } // namespace kernels
 } // namespace opencl
diff --git a/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.cpp b/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.cpp
index dbc628d..fba1b0e 100644
--- a/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.cpp
@@ -60,7 +60,6 @@
 } // namespace
 
 ClBatchConcatenateKernel::ClBatchConcatenateKernel()
-    : _batch_offset(0)
 {
     _type = CLKernelType::ELEMENTWISE;
 }
diff --git a/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.h b/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.h
index d9fa905..2963d7c 100644
--- a/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.h
+++ b/src/core/gpu/cl/kernels/ClBatchConcatenateKernel.h
@@ -40,7 +40,6 @@
 class ClBatchConcatenateKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClBatchConcatenateKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClBatchConcatenateKernel);
     /** Initialise the kernel's source and destination
@@ -55,11 +54,9 @@
      *
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src, unsigned int batch_offset, ITensorInfo *dst);
-    /**  Static function to check if given info will lead to a valid configuration of @ref ClBatchConcatenateKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src          Input tensor info. Data types supported: All.
-     * @param[in] batch_offset The offset on axis # 3.
-     * @param[in] dst          Destination tensor info. Data types supported: Same as @p src.
+     * Similar to @ref ClBatchConcatenateKernel::configure()
      *
      * @return a status
      */
@@ -69,7 +66,7 @@
     void run_op(ITensorPack &tensors, const Window &window, ::cl::CommandQueue &queue) override;
 
 private:
-    unsigned int _batch_offset;
+    unsigned int _batch_offset{ 0 };
 };
 } // namespace kernels
 } // namespace opencl
diff --git a/src/core/gpu/cl/kernels/ClConvertFullyConnectedWeightsKernel.h b/src/core/gpu/cl/kernels/ClConvertFullyConnectedWeightsKernel.h
index 6f4f09d..3976fd4 100644
--- a/src/core/gpu/cl/kernels/ClConvertFullyConnectedWeightsKernel.h
+++ b/src/core/gpu/cl/kernels/ClConvertFullyConnectedWeightsKernel.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CLCONVERTFULLYCONNECTEDWEIGHTSKERNEL_H
-#define ARM_COMPUTE_CLCONVERTFULLYCONNECTEDWEIGHTSKERNEL_H
+#ifndef ARM_COMPUTE_CL_CONVERT_FULLYCONNECTED_WEIGHTS_KERNEL_H
+#define ARM_COMPUTE_CL_CONVERT_FULLYCONNECTED_WEIGHTS_KERNEL_H
 
 #include "src/core/common/Macros.h"
 #include "src/core/gpu/cl/ClCompileContext.h"
@@ -30,8 +30,6 @@
 
 namespace arm_compute
 {
-class ICLTensor;
-
 /** Interface to convert the 2D Fully Connected weights from NCHW to NHWC or vice versa.
  *
  * @note This function can be applied to the 2D weights used by a Fully Connected layer if:
@@ -58,12 +56,11 @@
      * @param[in]  data_layout        The data layout the weights have been trained in.
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, const TensorShape &original_src_shape, DataLayout data_layout);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClConvertFullyConnectedWeightsKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src                Source weights tensor info to convert. Must be 2 dimensional. Data types supported: All.
-     * @param[in] dst                The converted weights tensor info. Shape and Data Type: Same as @p src.
-     * @param[in] original_src_shape Shape of the original src tensor (the one entering fully connected layer).
-     * @param[in] data_layout        The data layout the weights have been trained in.
+     * Similar to @ref ClConvertFullyConnectedWeightsKernel::configure()
+     *
+     * @return a status
      */
     static Status validate(const ITensorInfo *src, const ITensorInfo *dst, const TensorShape &original_src_shape, DataLayout data_layout);
 
@@ -73,4 +70,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CLCONVERTFULLYCONNECTEDWEIGHTSKERNEL_H */
+#endif /* ARM_COMPUTE_CL_CONVERT_FULLYCONNECTED_WEIGHTS_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClCopyKernel.h b/src/core/gpu/cl/kernels/ClCopyKernel.h
index f3eb0aa..d2732c4 100644
--- a/src/core/gpu/cl/kernels/ClCopyKernel.h
+++ b/src/core/gpu/cl/kernels/ClCopyKernel.h
@@ -48,11 +48,9 @@
      * @param[in]  dst_window      (Optional) Window to be used in case only copying into part of a tensor. Default is nullptr.
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, Window *dst_window = nullptr);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClCopyKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src        Source tensor info. Data types supported: All.
-     * @param[in] dst        Destination tensor info. Data types supported: same as @p src.
-     * @param[in] dst_window (Optional) Window to be used in case only copying into part of a tensor. Default is nullptr.
+     * Similar to @ref ClCopyKernel::configure()
      *
      * @return a status
      */
@@ -68,4 +66,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_COPY_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_COPY_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClCropKernel.cpp b/src/core/gpu/cl/kernels/ClCropKernel.cpp
index ef2e48b..a052ef5 100644
--- a/src/core/gpu/cl/kernels/ClCropKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClCropKernel.cpp
@@ -41,11 +41,6 @@
 {
 namespace kernels
 {
-void ClCropKernel::configure(const ITensorInfo *src, ITensorInfo *dst, Coordinates2D start, Coordinates2D end, uint32_t batch_index, float extrapolation_value, Window *dst_window)
-{
-    configure(CLKernelLibrary::get().get_compile_context(), src, dst, start, end, batch_index, extrapolation_value, dst_window);
-}
-
 ClCropKernel::ClCropKernel()
 {
     _type = CLKernelType::ELEMENTWISE;
diff --git a/src/core/gpu/cl/kernels/ClCropKernel.h b/src/core/gpu/cl/kernels/ClCropKernel.h
index 7120dbb..d819122 100644
--- a/src/core/gpu/cl/kernels/ClCropKernel.h
+++ b/src/core/gpu/cl/kernels/ClCropKernel.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CLCROPKERNEL_H
-#define ARM_COMPUTE_CLCROPKERNEL_H
+#ifndef ARM_COMPUTE_CL_CROP_KERNEL_H
+#define ARM_COMPUTE_CL_CROP_KERNEL_H
 
 #include "src/core/common/Macros.h"
 #include "src/core/gpu/cl/ClCompileContext.h"
@@ -44,19 +44,6 @@
      *
      * @note Supported tensor rank: up to 4
      *
-     * @param[in]  src                 Source tensor info. Data type supported: All. Data layouts supported: NHWC.
-     * @param[out] dst                 Destination tensor info. Data type supported: F32
-     * @param[in]  start               Coordinates of where to start cropping the image.
-     * @param[in]  end                 Coordinates of where to end cropping the image.
-     * @param[in]  batch_index         Fourth dimension index of the 3D image to crop in @p src.
-     * @param[in]  extrapolation_value Value to be used for values outside of the image. Default is 0.
-     * @param[in]  dst_window          Output window to be used in case cropped image is being copied into a tensor. Default is nullptr.
-     */
-    void configure(const ITensorInfo *src, ITensorInfo *dst, Coordinates2D start, Coordinates2D end, uint32_t batch_index, float extrapolation_value = 0, Window *dst_window = nullptr);
-    /** Configure kernel
-     *
-     * @note Supported tensor rank: up to 4
-     *
      * @param[in]  compile_context     The compile context to be used.
      * @param[in]  src                 Source tensor info. Data type supported: All. Data layouts supported: NHWC.
      * @param[out] dst                 Destination tensor info. Data type supported: F32
@@ -68,18 +55,11 @@
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, Coordinates2D start, Coordinates2D end, uint32_t batch_index, float extrapolation_value = 0,
                    Window *dst_window = nullptr);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref CLStridedSliceKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @note Supported tensor rank: up to 4
+     * Similar to @ref ClCropKernel::configure()
      *
-     * @param[in] src                 Source tensor info. Data type supported: All. Data layouts supported: NHWC.
-     * @param[in] dst                 Destination tensor info. Data type supported: F32
-     * @param[in] start               Coordinates of where to start cropping the image.
-     * @param[in] end                 Coordinates of where to end cropping the image.
-     * @param[in] batch_index         Fourth dimension index of the 3D image to crop in @p src.
-     * @param[in] extrapolation_value Value to be used for values outside of the image. Default is 0.
-     * @param[in] dst_window          Output window to be used in case cropped image is being copied into a tensor. Default is nullptr.
+     * @return a status
      */
     static Status validate(const ITensorInfo *src, const ITensorInfo *dst, Coordinates2D start, Coordinates2D end, uint32_t batch_index, float extrapolation_value = 0,
                            Window *dst_window = nullptr);
@@ -95,4 +75,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CLCROPKERNEL_H */
+#endif /* ARM_COMPUTE_CL_CROP_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClDepthConcatenateKernel.h b/src/core/gpu/cl/kernels/ClDepthConcatenateKernel.h
index 103ef00..0f40847 100644
--- a/src/core/gpu/cl/kernels/ClDepthConcatenateKernel.h
+++ b/src/core/gpu/cl/kernels/ClDepthConcatenateKernel.h
@@ -40,7 +40,6 @@
 class ClDepthConcatenateKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClDepthConcatenateKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClDepthConcatenateKernel);
     /** Initialise the kernel's source and destination
@@ -55,11 +54,9 @@
      *
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src, unsigned int depth_offset, ITensorInfo *dst);
-    /**  Static function to check if given info will lead to a valid configuration of @ref ClDepthConcatenateKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src          Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/F16/F32
-     * @param[in] depth_offset The offset on the Z axis.
-     * @param[in] dst          Destination tensor info. Data types supported: Same as @p src.
+     * Similar to @ref ClDepthConcatenateKernel::configure()
      *
      * @return a status
      */
diff --git a/src/core/gpu/cl/kernels/ClDequantizeKernel.h b/src/core/gpu/cl/kernels/ClDequantizeKernel.h
index 2460674..0912e1b 100644
--- a/src/core/gpu/cl/kernels/ClDequantizeKernel.h
+++ b/src/core/gpu/cl/kernels/ClDequantizeKernel.h
@@ -38,7 +38,6 @@
 class ClDequantizeKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClDequantizeKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClDequantizeKernel);
     /** Initialise the kernel's input and output
diff --git a/src/core/gpu/cl/kernels/ClDirectConv2dKernel.h b/src/core/gpu/cl/kernels/ClDirectConv2dKernel.h
index b592a21..4880d4a 100644
--- a/src/core/gpu/cl/kernels/ClDirectConv2dKernel.h
+++ b/src/core/gpu/cl/kernels/ClDirectConv2dKernel.h
@@ -86,4 +86,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_DIRECT_CONV2D_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_DIRECT_CONV2D_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClElementwiseKernel.cpp b/src/core/gpu/cl/kernels/ClElementwiseKernel.cpp
index 7bfdb9e..b645353 100644
--- a/src/core/gpu/cl/kernels/ClElementwiseKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClElementwiseKernel.cpp
@@ -276,21 +276,12 @@
     _type = CLKernelType::ELEMENTWISE;
 }
 
-void ClElementwiseKernel::configure_common(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst)
-{
-    configure_common(CLKernelLibrary::get().get_compile_context(), src1, src2, dst);
-}
-
 void ClElementwiseKernel::configure_common(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst)
 {
     // Configure kernel window
     auto win_config = validate_and_configure_window(*src1, *src2, *dst);
     ARM_COMPUTE_ERROR_THROW_ON(win_config.first);
 
-    _src1 = src1;
-    _src2 = src2;
-    _dst  = dst;
-
     std::string kernel_name = "elementwise_operation_" + name();
     if(is_data_type_quantized(src1->data_type()))
     {
diff --git a/src/core/gpu/cl/kernels/ClElementwiseKernel.h b/src/core/gpu/cl/kernels/ClElementwiseKernel.h
index 7f55151..ab5c777 100644
--- a/src/core/gpu/cl/kernels/ClElementwiseKernel.h
+++ b/src/core/gpu/cl/kernels/ClElementwiseKernel.h
@@ -44,7 +44,6 @@
 class ClElementwiseKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClElementwiseKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClElementwiseKernel);
 
@@ -80,30 +79,14 @@
     /** Commmon configure function for element-wise operators with no additional options (e.g., Div, Min, Max, SquaredDiff)
      *
      */
-    void configure_common(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst);
-    /** Commmon configure function for element-wise operators with no additional options (e.g., Div, Min, Max, SquaredDiff)
-     *
-     */
     void configure_common(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst);
 
     ActivationLayerInfo _act_info{};
-
-private:
-    const ITensorInfo *_src1
-    {
-        nullptr
-    }; /**< Source tensor info 1 */
-    const ITensorInfo *_src2
-    {
-        nullptr
-    };                            /**< Source tensor info 2 */
-    ITensorInfo *_dst{ nullptr }; /**< Destination tensor info */
 };
 
 class ClLogicalBinaryKernel : public ClElementwiseKernel
 {
 public:
-    /** Default constructor */
     ClLogicalBinaryKernel() = default;
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClLogicalBinaryKernel);
     /** Function to configure kernel
@@ -115,12 +98,11 @@
      * @param[in] dst             Destination tensor info. Data types supported: same as @p src1.
      */
     void configure(const ClCompileContext &compile_context, LogicalOperation op, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst);
-    /** Static function to check if the given configuration is valid for this kernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] op   Logical binary operation to be executed.
-     * @param[in] src1 First source tensor info. Data types supported: U8.
-     * @param[in] src2 Second source tensor info. Data types supported: same as @p src1.
-     * @param[in] dst  Destination tensor info. Data types supported: same as @p src1.
+     * Similar to @ref ClLogicalBinaryKernel::configure()
+     *
+     * @return a status
      */
     static Status validate(LogicalOperation op, const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst);
 
@@ -153,16 +135,11 @@
     void configure(const ClCompileContext &compile_context, ArithmeticOperation op, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ConvertPolicy &policy,
                    const ActivationLayerInfo &act_info = ActivationLayerInfo());
 
-    /** Static function to check if given info will lead to a valid configuration of @ref ClSaturatedArithmeticKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] op       Arithmetic operation to be executed.
-     * @param[in] input1   First tensor input info info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/S32/F32.
-     * @param[in] input2   Second tensor input info info. Data types supported: Same as @p input1.
-     * @param[in] output   Output tensor info info. Data types supported: Same as @p input1.
-     * @param[in] policy   Policy to use to handle overflow.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClSaturatedArithmeticKernel::configure()
      *
-     * @return a Status
+     * @return a status
      */
     static Status validate(ArithmeticOperation op, const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ConvertPolicy &policy,
                            const ActivationLayerInfo &act_info = ActivationLayerInfo());
@@ -197,15 +174,11 @@
     void configure(const ClCompileContext &compile_context, ArithmeticOperation op, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst,
                    const ActivationLayerInfo &act_info = ActivationLayerInfo());
 
-    /** Static function to check if given info will lead to a valid configuration of @ref ClArithmeticKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] op       Arithmetic operation to be executed.
-     * @param[in] src1     First source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/S32/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: same as @p src1.
-     * @param[in] dst      Destination tensor info. Data types supported: same as @p src1.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClArithmeticKernel::configure()
      *
-     * @return a Status
+     * @return a status
      */
     static Status validate(ArithmeticOperation op, const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
 
diff --git a/src/core/gpu/cl/kernels/ClElementwiseUnaryKernel.h b/src/core/gpu/cl/kernels/ClElementwiseUnaryKernel.h
index 225869b..64cc2f7 100644
--- a/src/core/gpu/cl/kernels/ClElementwiseUnaryKernel.h
+++ b/src/core/gpu/cl/kernels/ClElementwiseUnaryKernel.h
@@ -48,11 +48,9 @@
      * @param[in]  op              Element wise unary operation to perform.
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, const ElementWiseUnary &op);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClElementWiseUnaryKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
-     * @param[in] op  Element wise unary operation to perform.
+     * Similar to @ref ClElementWiseUnaryKernel::configure()
      *
      * @return a status
      */
diff --git a/src/core/gpu/cl/kernels/ClFillKernel.cpp b/src/core/gpu/cl/kernels/ClFillKernel.cpp
index 526a466..f213bf8 100644
--- a/src/core/gpu/cl/kernels/ClFillKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClFillKernel.cpp
@@ -47,13 +47,6 @@
     _type = CLKernelType::ELEMENTWISE;
 }
 
-void ClFillKernel::configure(ITensorInfo      *tensor,
-                             const PixelValue &constant_value,
-                             Window           *window)
-{
-    configure(CLKernelLibrary::get().get_compile_context(), tensor, constant_value, window);
-}
-
 void ClFillKernel::configure(const CLCompileContext &compile_context, ITensorInfo *tensor,
                              const PixelValue &constant_value,
                              Window           *window)
diff --git a/src/core/gpu/cl/kernels/ClFillKernel.h b/src/core/gpu/cl/kernels/ClFillKernel.h
index 9542c20..ecc2546 100644
--- a/src/core/gpu/cl/kernels/ClFillKernel.h
+++ b/src/core/gpu/cl/kernels/ClFillKernel.h
@@ -42,24 +42,15 @@
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClFillKernel);
     /** Initialise the kernel's tensor and filling value
      *
-     * @param[in,out] tensor         Input tensor info. Supported data types: All.
-     * @param[in]     constant_value The value used to fill the planes of the tensor
-     * @param[in]     window         Window to be used in case setting only part of a tensor. Default is nullptr.
-     */
-    void configure(ITensorInfo *tensor, const PixelValue &constant_value, Window *window = nullptr);
-    /** Initialise the kernel's tensor and filling value
-     *
      * @param[in]     compile_context The compile context to be used.
      * @param[in,out] tensor          Input tensor info. Supported data types: All.
      * @param[in]     constant_value  The value used to fill the planes of the tensor
      * @param[in]     window          Window to be used in case setting only part of a tensor. Default is nullptr.
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *tensor, const PixelValue &constant_value, Window *window = nullptr);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClFillKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] tensor         Source tensor info. Data types supported: All.
-     * @param[in] constant_value The value used to fill the planes of the tensor
-     * @param[in] window         Window to be used in case setting only part of a tensor. Default is nullptr.
+     * Similar to @ref ClFillKernel::configure()
      *
      * @return a status
      */
@@ -74,4 +65,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CLMEMSETRKERNEL_H */
+#endif /* ARM_COMPUTE_CL_FILL_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClFloorKernel.h b/src/core/gpu/cl/kernels/ClFloorKernel.h
index 3bc648b..57c9906 100644
--- a/src/core/gpu/cl/kernels/ClFloorKernel.h
+++ b/src/core/gpu/cl/kernels/ClFloorKernel.h
@@ -47,11 +47,9 @@
      * @param[out] dst             Destination tensor info. Same as @p src
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref ClFloorKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor info. Data type supported: F16/F32.
-     * @param[in] dst Destination tensor info. Same as @p src
+     * Similar to @ref ClFloorKernel::configure()
      *
      * @return a status
      */
diff --git a/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyNativeKernel.h b/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyNativeKernel.h
index 491c3e4..eaa125f 100644
--- a/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyNativeKernel.h
+++ b/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyNativeKernel.h
@@ -78,4 +78,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CL_GEMMLOWP_MATRIXMULTIPLY_NATIVE_KERNEL_H*/
+#endif /* ARM_COMPUTE_CL_GEMMLOWP_MATRIXMULTIPLY_NATIVE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyReshapedKernel.h b/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyReshapedKernel.h
index b99dec3..99cff01 100644
--- a/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyReshapedKernel.h
+++ b/src/core/gpu/cl/kernels/ClGemmLowpMatrixMultiplyReshapedKernel.h
@@ -87,4 +87,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CL_GEMMLOWP_MATRIXMULTIPLY_RESHAPED_KERNEL_H*/
+#endif /* ARM_COMPUTE_CL_GEMMLOWP_MATRIXMULTIPLY_RESHAPED_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClGemmMatrixMultiplyNativeKernel.h b/src/core/gpu/cl/kernels/ClGemmMatrixMultiplyNativeKernel.h
index c3bdc75..cd7bf27 100644
--- a/src/core/gpu/cl/kernels/ClGemmMatrixMultiplyNativeKernel.h
+++ b/src/core/gpu/cl/kernels/ClGemmMatrixMultiplyNativeKernel.h
@@ -85,4 +85,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_GEMM_MATRIXMULTIPLY_NATIVE_KERNEL_H*/
+#endif /* ARM_COMPUTE_CL_GEMM_MATRIXMULTIPLY_NATIVE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClHeightConcatenateKernel.h b/src/core/gpu/cl/kernels/ClHeightConcatenateKernel.h
index 9a4380a..0733078 100644
--- a/src/core/gpu/cl/kernels/ClHeightConcatenateKernel.h
+++ b/src/core/gpu/cl/kernels/ClHeightConcatenateKernel.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CL_HEIGHT_CONCATENATE_LAYER_KERNEL_H
-#define ARM_COMPUTE_CL_HEIGHT_CONCATENATE_LAYER_KERNEL_H
+#ifndef ARM_COMPUTE_CL_HEIGHT_CONCATENATE_KERNEL_H
+#define ARM_COMPUTE_CL_HEIGHT_CONCATENATE_KERNEL_H
 
 #include "src/core/common/Macros.h"
 #include "src/core/gpu/cl/ClCompileContext.h"
@@ -40,7 +40,6 @@
 class ClHeightConcatenateKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClHeightConcatenateKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClHeightConcatenateKernel);
     /** Initialise the kernel's source and destination
@@ -52,11 +51,9 @@
      *
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src, unsigned int height_offset, ITensorInfo *dst);
-    /**  Static function to check if given info will lead to a valid configuration of @ref ClHeightConcatenateKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src           Source tensor info. Data types supported: All.
-     * @param[in] height_offset The starting offset on the Y axis for the dst tensor.
-     * @param[in] dst           Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClHeightConcatenateKernel::configure()
      *
      * @return a status
      */
@@ -71,4 +68,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CL_HEIGHT_CONCATENATE_LAYER_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_HEIGHT_CONCATENATE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClMulKernel.h b/src/core/gpu/cl/kernels/ClMulKernel.h
index 9c70301..dec8dba 100644
--- a/src/core/gpu/cl/kernels/ClMulKernel.h
+++ b/src/core/gpu/cl/kernels/ClMulKernel.h
@@ -38,7 +38,6 @@
 class ClMulKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClMulKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClMulKernel);
     /** Initialise the kernel's src and dst.
@@ -87,7 +86,6 @@
 class ClComplexMulKernel : public ICLKernel
 {
 public:
-    /** Default constructor */
     ClComplexMulKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClComplexMulKernel);
     /** Initialise the kernel's src and dst.
diff --git a/src/core/gpu/cl/kernels/ClPermuteKernel.h b/src/core/gpu/cl/kernels/ClPermuteKernel.h
index 326110a..839e224 100644
--- a/src/core/gpu/cl/kernels/ClPermuteKernel.h
+++ b/src/core/gpu/cl/kernels/ClPermuteKernel.h
@@ -41,7 +41,6 @@
 class ClPermuteKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClPermuteKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClPermuteKernel);
     /** Set the src and dst of the kernel.
@@ -54,13 +53,9 @@
      * @param[in] perm            Permutation vector
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, const PermutationVector &perm);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClPermuteKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @note Arbitrary permutation vectors are supported with rank not greater than 4
-     *
-     * @param[in] src  The src tensor info. Data types supported: All.
-     * @param[in] dst  The dst tensor info. Data types supported: same as @p src.
-     * @param[in] perm Permutation vector
+     * Similar to @ref ClPermuteKernel::configure()
      *
      * @return a status
      */
@@ -75,4 +70,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_PERMUTE_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_PERMUTE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClPool2dKernel.cpp b/src/core/gpu/cl/kernels/ClPool2dKernel.cpp
index 9d5a24f..e522814 100644
--- a/src/core/gpu/cl/kernels/ClPool2dKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClPool2dKernel.cpp
@@ -203,7 +203,6 @@
 } // namespace
 
 ClPool2dKernel::ClPool2dKernel()
-    : _pool_info(), _data_layout(DataLayout::UNKNOWN), _border_size(0), _num_elems_processed_per_iteration(1)
 {
     _type = CLKernelType::POOL;
 }
diff --git a/src/core/gpu/cl/kernels/ClPool2dKernel.h b/src/core/gpu/cl/kernels/ClPool2dKernel.h
index 8ecb8eb..ab8c56a 100644
--- a/src/core/gpu/cl/kernels/ClPool2dKernel.h
+++ b/src/core/gpu/cl/kernels/ClPool2dKernel.h
@@ -38,7 +38,6 @@
 class ClPool2dKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClPool2dKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClPool2dKernel);
 
@@ -65,10 +64,10 @@
     BorderSize border_size() const override;
 
 public:
-    PoolingLayerInfo _pool_info;
-    DataLayout       _data_layout;
-    BorderSize       _border_size;
-    unsigned int     _num_elems_processed_per_iteration;
+    PoolingLayerInfo _pool_info{};
+    DataLayout       _data_layout{ DataLayout::UNKNOWN };
+    BorderSize       _border_size{ 0 };
+    unsigned int     _num_elems_processed_per_iteration{ 1 };
 };
 } // namespace kernels
 } // namespace opencl
diff --git a/src/core/gpu/cl/kernels/ClQuantizeKernel.h b/src/core/gpu/cl/kernels/ClQuantizeKernel.h
index cd97298..1991a2f 100644
--- a/src/core/gpu/cl/kernels/ClQuantizeKernel.h
+++ b/src/core/gpu/cl/kernels/ClQuantizeKernel.h
@@ -41,7 +41,6 @@
 class ClQuantizeKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClQuantizeKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClQuantizeKernel);
     /** Set the input, output.
diff --git a/src/core/gpu/cl/kernels/ClReshapeKernel.h b/src/core/gpu/cl/kernels/ClReshapeKernel.h
index 3cd8369..01e1ee8 100644
--- a/src/core/gpu/cl/kernels/ClReshapeKernel.h
+++ b/src/core/gpu/cl/kernels/ClReshapeKernel.h
@@ -47,11 +47,9 @@
      * @param[out] dst             Destination tensor info. Data type supported: Same as @p src
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref ClReshapeKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor info. Data type supported: All
-     * @param[in] dst Destination tensor info. Data type supported: Same as @p src
+     * Similar to @ref ClReshapeKernel::configure()
      *
      * @return a status
      */
@@ -63,4 +61,4 @@
 } // namespace opencl
 } // namespace kernels
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_RESHAPE_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_RESHAPE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClScaleKernel.h b/src/core/gpu/cl/kernels/ClScaleKernel.h
index 826c482..8333c7d 100644
--- a/src/core/gpu/cl/kernels/ClScaleKernel.h
+++ b/src/core/gpu/cl/kernels/ClScaleKernel.h
@@ -31,8 +31,6 @@
 
 namespace arm_compute
 {
-class ICLTensor;
-
 namespace opencl
 {
 namespace kernels
@@ -41,10 +39,8 @@
 class ClScaleKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClScaleKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClScaleKernel);
-
     /** Initialise the kernel's inputs, output and interpolation policy
      *
      * @param[in]  compile_context The compile context to be used.
@@ -54,13 +50,9 @@
      * @param[in]  info            @ref ScaleKernelInfo Kernel descriptor to be used to configure.
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src, ITensorInfo *dst, const ScaleKernelInfo &info);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref ClScaleKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src  Source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/F16/F32
-     * @param[in] dst  Destination tensor info. Data types supported: Same as @p src
-     *                 All but the lowest two dimensions must be the same size as in the input tensor, i.e. scaling is only performed within the XY-plane.
-     * @param[in] info @ref ScaleKernelInfo Kernel descriptor to be used to validate
+     * Similar to @ref ClScaleKernel::configure()
      *
      * @return a status
      */
@@ -71,9 +63,9 @@
     void run_op(ITensorPack &tensors, const Window &window, cl::CommandQueue &queue) override;
 
 private:
-    DataLayout _data_layout = DataLayout::UNKNOWN;
+    DataLayout _data_layout{ DataLayout::UNKNOWN };
 };
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CLSCALEKERNEL_H */
+#endif /* ARM_COMPUTE_CL_SCALE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClSoftmaxKernel.h b/src/core/gpu/cl/kernels/ClSoftmaxKernel.h
index db1aca3..a2ad02d 100644
--- a/src/core/gpu/cl/kernels/ClSoftmaxKernel.h
+++ b/src/core/gpu/cl/kernels/ClSoftmaxKernel.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CLSOFTMAXLAYERKERNEL_H
-#define ARM_COMPUTE_CLSOFTMAXLAYERKERNEL_H
+#ifndef ARM_COMPUTE_CL_SOFTMAX_KERNEL_H
+#define ARM_COMPUTE_CL_SOFTMAX_KERNEL_H
 
 #include "arm_compute/core/Error.h"
 #include "arm_compute/core/KernelDescriptors.h"
@@ -50,7 +50,6 @@
     /** Info for whether a parallel reduction will be run and the vector size of the execution. */
     using ParallelReductionInfo = std::tuple<bool, unsigned int>;
 
-    /** Default constructor */
     ClLogits1DMaxShiftExpSumKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClLogits1DMaxShiftExpSumKernel);
     /** Configure the kernel using the given information about tensors
@@ -63,12 +62,9 @@
      * @param[in]     info            Contains information consumed by kernels for softmax described in @ref SoftmaxKernelInfo.
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo &src, ITensorInfo &max, ITensorInfo &dst, ITensorInfo &sum, const SoftmaxKernelInfo &info);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClLogits1DMaxShiftExpSumKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor. Data types supported: QASYMM8/QASYMM8_SIGNED/F16/F32
-     * @param[in] max Max values tensor. Data types supported: same as @p src
-     * @param[in] dst Destination tensor. Data types supported: same as @p src
-     * @param[in] sum Sum of 1D logits tensor. Data types supported: same as @p src
+     * Similar to @ref ClLogits1DMaxShiftExpSumKernel::configure()
      *
      * @return a status
      */
@@ -93,7 +89,6 @@
 class ClLogits1DNormKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClLogits1DNormKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClLogits1DNormKernel);
 
@@ -106,12 +101,9 @@
      * @param[in]  info            Contains information consumed by kernels for softmax described in @ref SoftmaxKernelInfo.
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo &src, const ITensorInfo &sum, ITensorInfo &dst, const SoftmaxKernelInfo &info);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClLogits1DNormKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src  Source tensor. Data types supported: S32/F16/F32. If this kernel is used for log softmax, only F32/F16 is supported.
-     * @param[in] sum  Sum tensor. Dimensions should be dim(input)-1. Data types supported: same as @p input
-     * @param[in] dst  Destination tensor. Data types supported: QASYMM8 for S32 @p input, or same as @p input
-     * @param[in] info Contains information consumed by kernels for softmax described in @ref SoftmaxKernelInfo.
+     * Similar to @ref ClLogits1DNormKernel::configure()
      *
      * @return a status
      */
@@ -123,4 +115,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CLSOFTMAXLAYERKERNEL_H */
+#endif /* ARM_COMPUTE_CL_SOFTMAX_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClTransposeKernel.h b/src/core/gpu/cl/kernels/ClTransposeKernel.h
index 7d1226c..c8379d4 100644
--- a/src/core/gpu/cl/kernels/ClTransposeKernel.h
+++ b/src/core/gpu/cl/kernels/ClTransposeKernel.h
@@ -47,10 +47,9 @@
      * @param[in] dst             The dst tensor info. Data types supported: Same as @p src
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClTransposeKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src The src tensor info. Data types supported: All.
-     * @param[in] dst The dst tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClTransposeKernel::configure()
      *
      * @return a status
      */
@@ -62,4 +61,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_TRANSPOSE_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_TRANSPOSE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClWidthConcatenate2TensorsKernel.h b/src/core/gpu/cl/kernels/ClWidthConcatenate2TensorsKernel.h
index 56202ba..15e0757 100644
--- a/src/core/gpu/cl/kernels/ClWidthConcatenate2TensorsKernel.h
+++ b/src/core/gpu/cl/kernels/ClWidthConcatenate2TensorsKernel.h
@@ -40,7 +40,6 @@
 class ClWidthConcatenate2TensorsKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClWidthConcatenate2TensorsKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClWidthConcatenate2TensorsKernel);
     /** Initialise the kernel's sources and destination
@@ -51,11 +50,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: Same as @p src1.
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst);
-    /**  Static function to check if given info will lead to a valid configuration of @ref ClWidthConcatenate2TensorsKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src1 First tensor info. Data types supported: All.
-     * @param[in] src2 Second tensor info. Data types supported: same as @p src1
-     * @param[in] dst  Destination tensor info. Data types supported: Same as @p src1.
+     * Similar to @ref ClWidthConcatenate2TensorsKernel::configure()
      *
      * @return a status
      */
diff --git a/src/core/gpu/cl/kernels/ClWidthConcatenate4TensorsKernel.h b/src/core/gpu/cl/kernels/ClWidthConcatenate4TensorsKernel.h
index 19bda65..1e3f47f 100644
--- a/src/core/gpu/cl/kernels/ClWidthConcatenate4TensorsKernel.h
+++ b/src/core/gpu/cl/kernels/ClWidthConcatenate4TensorsKernel.h
@@ -41,7 +41,6 @@
 class ClWidthConcatenate4TensorsKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClWidthConcatenate4TensorsKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClWidthConcatenate4TensorsKernel);
     /** Initialise the kernel's sources and destination
@@ -54,13 +53,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src1.
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *src3, ITensorInfo *src4, ITensorInfo *dst);
-    /**  Static function to check if given info will lead to a valid configuration of @ref ClWidthConcatenate4TensorsKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src1 First tensor info. Data types supported: All.
-     * @param[in] src2 Second tensor info. Data types supported: same as @p src1
-     * @param[in] src3 Third tensor info. Data types supported: same as @p src1
-     * @param[in] src4 Fourth tensor info. Data types supported: same as @p src1
-     * @param[in] dst  Destination tensor info. Data types supported: same as @p src1.
+     * Similar to @ref ClWidthConcatenate4TensorsKernel::configure()
      *
      * @return a status
      */
diff --git a/src/core/gpu/cl/kernels/ClWidthConcatenateKernel.h b/src/core/gpu/cl/kernels/ClWidthConcatenateKernel.h
index 6bc8e57..300c4be 100644
--- a/src/core/gpu/cl/kernels/ClWidthConcatenateKernel.h
+++ b/src/core/gpu/cl/kernels/ClWidthConcatenateKernel.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CL_WIDTH_CONCATENATE_LAYER_KERNEL_H
-#define ARM_COMPUTE_CL_WIDTH_CONCATENATE_LAYER_KERNEL_H
+#ifndef ARM_COMPUTE_CL_WIDTH_CONCATENATE_KERNEL_H
+#define ARM_COMPUTE_CL_WIDTH_CONCATENATE_KERNEL_H
 
 #include "src/core/common/Macros.h"
 #include "src/core/gpu/cl/ClCompileContext.h"
@@ -40,7 +40,6 @@
 class ClWidthConcatenateKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClWidthConcatenateKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClWidthConcatenateKernel);
     /** Initialise the kernel's source and destination
@@ -52,11 +51,9 @@
      *
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src, unsigned int width_offset, ITensorInfo *dst);
-    /**  Static function to check if given info will lead to a valid configuration of @ref ClWidthConcatenateKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src          Source tensor info. Data types supported: All.
-     * @param[in] width_offset The offset on the X axis.
-     * @param[in] dst          Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClWidthConcatenateKernel::configure()
      *
      * @return a status
      */
@@ -68,4 +65,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CL_WIDTH_CONCATENATE_LAYER_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_WIDTH_CONCATENATE_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClWinogradFilterTransformKernel.h b/src/core/gpu/cl/kernels/ClWinogradFilterTransformKernel.h
index 13200dc..145954f 100644
--- a/src/core/gpu/cl/kernels/ClWinogradFilterTransformKernel.h
+++ b/src/core/gpu/cl/kernels/ClWinogradFilterTransformKernel.h
@@ -39,7 +39,6 @@
 class ClWinogradFilterTransformKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClWinogradFilterTransformKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClWinogradFilterTransformKernel);
     /** Set the input and output tensor.
@@ -75,4 +74,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_WINOGRAD_FILTER_TRANSFORM_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_WINOGRAD_FILTER_TRANSFORM_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.cpp b/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.cpp
index 62db228..538d8ae 100644
--- a/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.cpp
@@ -101,7 +101,6 @@
 } // namespace
 
 ClWinogradInputTransformKernel::ClWinogradInputTransformKernel()
-    : _border_size(0), _data_layout(DataLayout::UNKNOWN), _num_tiles_x(0), _num_tiles_y(0), _step_z(1)
 {
     _type = CLKernelType::WINOGRAD;
 }
diff --git a/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.h b/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.h
index 76b4527..40fc2f3 100644
--- a/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.h
+++ b/src/core/gpu/cl/kernels/ClWinogradInputTransformKernel.h
@@ -39,7 +39,6 @@
 class ClWinogradInputTransformKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClWinogradInputTransformKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClWinogradInputTransformKernel);
     /** Set the input and output of the kernel.
@@ -76,13 +75,13 @@
 private:
     using WinogradKey = std::pair<std::pair<int, int>, std::pair<int, int>>;
 
-    BorderSize   _border_size;
-    DataLayout   _data_layout;
-    int          _num_tiles_x;
-    int          _num_tiles_y;
-    unsigned int _step_z;
+    BorderSize   _border_size{ 0 };
+    DataLayout   _data_layout{ DataLayout::UNKNOWN };
+    int          _num_tiles_x{ 0 };
+    int          _num_tiles_y{ 0 };
+    unsigned int _step_z{ 1 };
 };
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_WINOGRAD_INPUT_TRANSFORM_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_WINOGRAD_INPUT_TRANSFORM_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClWinogradOutputTransformKernel.h b/src/core/gpu/cl/kernels/ClWinogradOutputTransformKernel.h
index 2948d3f..22b7f07 100644
--- a/src/core/gpu/cl/kernels/ClWinogradOutputTransformKernel.h
+++ b/src/core/gpu/cl/kernels/ClWinogradOutputTransformKernel.h
@@ -39,7 +39,6 @@
 class ClWinogradOutputTransformKernel : public IClKernel
 {
 public:
-    /** Default constructor */
     ClWinogradOutputTransformKernel();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClWinogradOutputTransformKernel);
     /** Set the input and output tensor.
@@ -64,7 +63,6 @@
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src, ITensorInfo *bias, ITensorInfo *dst, const WinogradInfo &winograd_info,
                    const ActivationLayerInfo &act_info = ActivationLayerInfo());
-
     /** Static function to check if given info will lead to a valid configuration
      *
      * Similar to ClWinogradOutputTransformKernel::configure()
@@ -84,4 +82,4 @@
 } // namespace kernels
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CL_WINOGRAD_OUTPUT_TRANSFORM_KERNEL_H */
+#endif /* ARM_COMPUTE_CL_WINOGRAD_OUTPUT_TRANSFORM_KERNEL_H */
