diff --git a/src/runtime/CL/functions/CLFlattenLayer.cpp b/src/runtime/CL/functions/CLFlattenLayer.cpp
index b2860ea..9563055 100644
--- a/src/runtime/CL/functions/CLFlattenLayer.cpp
+++ b/src/runtime/CL/functions/CLFlattenLayer.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -28,11 +28,27 @@
 #include "arm_compute/core/TensorInfo.h"
 #include "arm_compute/core/Validate.h"
 #include "arm_compute/core/utils/misc/ShapeCalculator.h"
-#include "arm_compute/runtime/CL/CLScheduler.h"
+#include "src/core/CL/ICLKernel.h"
 #include "src/core/helpers/AutoConfiguration.h"
+#include "src/runtime/gpu/cl/operators/ClFlatten.h"
 
 namespace arm_compute
 {
+struct CLFlattenLayer::Impl
+{
+    const ICLTensor                   *src{ nullptr };
+    ICLTensor                         *dst{ nullptr };
+    std::unique_ptr<opencl::ClFlatten> op{ nullptr };
+};
+
+CLFlattenLayer::CLFlattenLayer()
+    : _impl(std::make_unique<Impl>())
+{
+}
+CLFlattenLayer::CLFlattenLayer(CLFlattenLayer &&) = default;
+CLFlattenLayer &CLFlattenLayer::operator=(CLFlattenLayer &&) = default;
+CLFlattenLayer::~CLFlattenLayer()                            = default;
+
 void CLFlattenLayer::configure(const ICLTensor *input, ICLTensor *output)
 {
     configure(CLKernelLibrary::get().get_compile_context(), input, output);
@@ -41,8 +57,12 @@
 void CLFlattenLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
 {
     ARM_COMPUTE_ERROR_ON_NULLPTR(input, output);
+    _impl->src = input;
+    _impl->dst = output;
     auto_init_if_empty(*output->info(), input->info()->clone()->set_tensor_shape(misc::shape_calculator::compute_flatten_shape(input->info())));
-    _reshape.configure(compile_context, input, output);
+
+    _impl->op = std::make_unique<opencl::ClFlatten>();
+    _impl->op->configure(compile_context, _impl->src->info(), _impl->dst->info());
 }
 
 Status CLFlattenLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
@@ -53,11 +73,14 @@
         const TensorInfo tensor_info_output = input->clone()->set_tensor_shape(misc::shape_calculator::compute_flatten_shape(input));
         ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_SHAPES(output, &tensor_info_output);
     }
-    return CLReshapeLayer::validate(input, output);
+    return opencl::ClFlatten::validate(input, output);
 }
 
 void CLFlattenLayer::run()
 {
-    _reshape.run();
+    ITensorPack pack;
+    pack.add_tensor(TensorType::ACL_SRC, _impl->src);
+    pack.add_tensor(TensorType::ACL_DST, _impl->dst);
+    _impl->op->run(pack);
 }
 } // namespace arm_compute
\ No newline at end of file
