diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt
index 2a3b1ad..49a8b17 100644
--- a/src/backends/cl/workloads/CMakeLists.txt
+++ b/src/backends/cl/workloads/CMakeLists.txt
@@ -74,6 +74,8 @@
     ClSpaceToDepthWorkload.hpp
     ClSplitterWorkload.cpp
     ClSplitterWorkload.hpp
+    ClStackWorkload.cpp
+    ClStackWorkload.hpp
     ClStridedSliceWorkload.cpp
     ClStridedSliceWorkload.hpp
     ClSubtractionWorkload.cpp
diff --git a/src/backends/cl/workloads/ClStackWorkload.cpp b/src/backends/cl/workloads/ClStackWorkload.cpp
new file mode 100644
index 0000000..3ba698e
--- /dev/null
+++ b/src/backends/cl/workloads/ClStackWorkload.cpp
@@ -0,0 +1,74 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#include "ClStackWorkload.hpp"
+#include "ClWorkloadUtils.hpp"
+#include <aclCommon/ArmComputeTensorUtils.hpp>
+#include <backendsCommon/CpuTensorHandle.hpp>
+#include <cl/ClTensorHandle.hpp>
+#include <cl/ClLayerSupport.hpp>
+
+#include <arm_compute/core/Types.h>
+
+#include <boost/numeric/conversion/cast.hpp>
+#include <boost/polymorphic_pointer_cast.hpp>
+
+namespace armnn
+{
+using namespace armcomputetensorutils;
+
+namespace
+{
+int CalcAxis(const unsigned int axis, const unsigned int inputDimensions)
+{
+    const int intAxis = boost::numeric_cast<int>(axis);
+    return boost::numeric_cast<int>(inputDimensions) - intAxis;
+}
+} //namespace
+
+arm_compute::Status ClStackWorkloadValidate(const std::vector<const TensorInfo*>& inputs,
+                                            const TensorInfo& output,
+                                            const StackDescriptor& descriptor)
+{
+    std::vector<arm_compute::ITensorInfo*> aclInputPtrs;
+    arm_compute::TensorInfo aclInputInfo;
+    for (const TensorInfo* input : inputs)
+    {
+        aclInputInfo = BuildArmComputeTensorInfo(*input);
+        aclInputPtrs.emplace_back(&aclInputInfo);
+    }
+    const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
+
+    int aclAxis = CalcAxis(descriptor.m_Axis, descriptor.m_InputShape.GetNumDimensions());
+
+    return arm_compute::CLStackLayer::validate(aclInputPtrs, aclAxis, &aclOutputInfo);
+}
+
+ClStackWorkload::ClStackWorkload(const StackQueueDescriptor& descriptor, const WorkloadInfo& info)
+: BaseWorkload<StackQueueDescriptor>(descriptor, info)
+{
+    std::vector<arm_compute::ICLTensor*> aclInputs;
+    for (auto input : m_Data.m_Inputs)
+    {
+        arm_compute::ICLTensor& aclInput = boost::polymorphic_pointer_downcast<IClTensorHandle>(input)->GetTensor();
+        aclInputs.emplace_back(&aclInput);
+    }
+    arm_compute::ICLTensor& output = boost::polymorphic_pointer_downcast<IClTensorHandle>(
+                                                                         m_Data.m_Outputs[0])->GetTensor();
+
+    m_Layer.reset(new arm_compute::CLStackLayer());
+    int aclAxis = CalcAxis(descriptor.m_Parameters.m_Axis, descriptor.m_Parameters.m_InputShape.GetNumDimensions());
+    m_Layer->configure(aclInputs, aclAxis, &output);
+}
+
+void ClStackWorkload::Execute() const
+{
+    if (m_Layer)
+    {
+        ARMNN_SCOPED_PROFILING_EVENT_CL("ClStackWorkload_Execute");
+        m_Layer->run();
+    }
+}
+
+} //namespace armnn
\ No newline at end of file
diff --git a/src/backends/cl/workloads/ClStackWorkload.hpp b/src/backends/cl/workloads/ClStackWorkload.hpp
new file mode 100644
index 0000000..7500869
--- /dev/null
+++ b/src/backends/cl/workloads/ClStackWorkload.hpp
@@ -0,0 +1,29 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <backendsCommon/Workload.hpp>
+
+#include <arm_compute/runtime/CL/CLFunctions.h>
+
+namespace armnn
+{
+arm_compute::Status ClStackWorkloadValidate(const std::vector<const TensorInfo*>& inputs,
+                                            const TensorInfo& output,
+                                            const StackDescriptor& descriptor);
+
+class ClStackWorkload : public BaseWorkload<StackQueueDescriptor>
+{
+public:
+    ClStackWorkload(const StackQueueDescriptor& descriptor, const WorkloadInfo& info);
+
+    void Execute() const override;
+
+private:
+    mutable std::unique_ptr<arm_compute::CLStackLayer> m_Layer;
+};
+
+} //namespace armnn
diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp
index a64dea2..03dffc4 100644
--- a/src/backends/cl/workloads/ClWorkloads.hpp
+++ b/src/backends/cl/workloads/ClWorkloads.hpp
@@ -36,6 +36,7 @@
 #include "ClSpaceToBatchNdWorkload.hpp"
 #include "ClSpaceToDepthWorkload.hpp"
 #include "ClSplitterWorkload.hpp"
+#include "ClStackWorkload.hpp"
 #include "ClStridedSliceWorkload.hpp"
 #include "ClSubtractionWorkload.hpp"
 #include "ClConvertFp16ToFp32Workload.hpp"
