diff --git a/src/armnn/test/CreateWorkload.hpp b/src/armnn/test/CreateWorkload.hpp
index 1193ab7..f758aaa 100644
--- a/src/armnn/test/CreateWorkload.hpp
+++ b/src/armnn/test/CreateWorkload.hpp
@@ -1227,4 +1227,30 @@
     return std::make_pair(std::move(optimizedNet), std::move(workload));
 }
 
+template<typename ConstantWorkload, armnn::DataType DataType>
+std::unique_ptr<ConstantWorkload> CreateConstantWorkloadTest(armnn::IWorkloadFactory& factory,
+                                                             armnn::Graph& graph,
+                                                             const armnn::TensorShape& outputShape)
+{
+    armnn::TensorInfo outputTensorInfo(outputShape, DataType);
+
+    auto constant = graph.AddLayer<ConstantLayer>("constant");
+    constant->m_LayerOutput = std::make_unique<ScopedCpuTensorHandle>(outputTensorInfo);
+    BOOST_TEST_CHECKPOINT("created constant layer");
+
+    Layer* const output = graph.AddLayer<OutputLayer>(0, "output");
+
+    // Adds connections.
+    Connect(constant, output, outputTensorInfo, 0, 0);
+    BOOST_TEST_CHECKPOINT("connect constant to output");
+
+    CreateTensorHandles(graph, factory);
+    BOOST_TEST_CHECKPOINT("created tensor handles");
+
+    auto workloadConstant = MakeAndCheckWorkload<ConstantWorkload>(*constant, graph, factory);
+    BOOST_TEST_CHECKPOINT("created Constant workload");
+
+    return std::move(workloadConstant);
+}
+
 }
diff --git a/src/backends/backendsCommon/WorkloadData.cpp b/src/backends/backendsCommon/WorkloadData.cpp
index 335e7c5..a3470ad 100644
--- a/src/backends/backendsCommon/WorkloadData.cpp
+++ b/src/backends/backendsCommon/WorkloadData.cpp
@@ -812,6 +812,18 @@
         "ConstantQueueDescriptor",
         "constant",
         "output");
+
+    // Check the supported data types
+    std::vector<DataType> supportedTypes =
+                              {
+                                  DataType::Float32,
+                                  DataType::Float16,
+                                  DataType::Signed32,
+                                  DataType::QuantisedAsymm8,
+                                  DataType::QuantisedSymm16
+                              };
+
+    ValidateDataTypes(workloadInfo.m_OutputTensorInfos[0], supportedTypes, "ConstantQueueDescriptor");
 }
 
 void ReshapeQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const
diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp
index 980cd84..52c9773 100644
--- a/src/backends/backendsCommon/test/LayerTests.cpp
+++ b/src/backends/backendsCommon/test/LayerTests.cpp
@@ -6387,9 +6387,11 @@
     constexpr unsigned int outputChannels = inputChannels;
     constexpr unsigned int outputBatchSize = inputBatchSize;
 
-    armnn::TensorInfo inputTensorInfo({ inputBatchSize, inputChannels, inputHeight, inputWidth }, ArmnnType);
+    armnn::TensorInfo inputTensorInfo({ inputBatchSize, inputChannels, inputHeight, inputWidth },
+                                        ArmnnType, qScale, qOffset);
 
-    armnn::TensorInfo outputTensorInfo({ outputBatchSize, outputChannels, outputHeight, outputWidth }, ArmnnType);
+    armnn::TensorInfo outputTensorInfo({ outputBatchSize, outputChannels, outputHeight, outputWidth },
+                                         ArmnnType, qScale, qOffset);
 
     // Set quantization parameters if the requested type is a quantized type.
     if(armnn::IsQuantizedType<T>())
@@ -6471,7 +6473,14 @@
     return ConstantTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
 }
 
-LayerTestResult<uint8_t, 4> ConstantTestUint8(
+LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
+{
+    return ConstantTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.0f, 0);
+}
+
+LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
 {
@@ -8173,13 +8182,20 @@
          1.f/20.f, 50, armnn::DataLayout::NHWC);
 }
 
-LayerTestResult<uint8_t, 4> ConstantUint8Test(
+LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
 {
     return ConstantTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 2e-6f, 1);
 }
 
+LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
+{
+    return ConstantTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 2e-6f, 1);
+}
+
 LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
diff --git a/src/backends/backendsCommon/test/LayerTests.hpp b/src/backends/backendsCommon/test/LayerTests.hpp
index 60195cd..76dc240 100644
--- a/src/backends/backendsCommon/test/LayerTests.hpp
+++ b/src/backends/backendsCommon/test/LayerTests.hpp
@@ -774,7 +774,11 @@
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
 
-LayerTestResult<uint8_t, 4> ConstantTestUint8(
+LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
+
+LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
 
@@ -988,7 +992,11 @@
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
 
-LayerTestResult<uint8_t, 4> ConstantUint8Test(
+LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
+
+LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
 
diff --git a/src/backends/cl/test/ClLayerTests.cpp b/src/backends/cl/test/ClLayerTests.cpp
index 0af1d34..4d58778 100644
--- a/src/backends/cl/test/ClLayerTests.cpp
+++ b/src/backends/cl/test/ClLayerTests.cpp
@@ -260,7 +260,7 @@
 
 // Constant
 ARMNN_AUTO_TEST_CASE(Constant, ConstantTest)
-ARMNN_AUTO_TEST_CASE(ConstantUint8, ConstantTestUint8)
+ARMNN_AUTO_TEST_CASE(ConstantUint8, ConstantUint8SimpleQuantizationScaleNoOffsetTest)
 
 // Concat
 ARMNN_AUTO_TEST_CASE(Concatenation1d, Concatenation1dTest)
diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp
index dce369d..58618b4 100644
--- a/src/backends/neon/test/NeonLayerTests.cpp
+++ b/src/backends/neon/test/NeonLayerTests.cpp
@@ -344,7 +344,7 @@
 
 // Constant
 ARMNN_AUTO_TEST_CASE(Constant, ConstantTest)
-ARMNN_AUTO_TEST_CASE(ConstantUint8, ConstantTestUint8)
+ARMNN_AUTO_TEST_CASE(ConstantUint8, ConstantUint8SimpleQuantizationScaleNoOffsetTest)
 
 // Concatenation
 ARMNN_AUTO_TEST_CASE(Concatenation1d, Concatenation1dTest)
diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp
index 858bd87..7beff72 100644
--- a/src/backends/reference/RefLayerSupport.cpp
+++ b/src/backends/reference/RefLayerSupport.cpp
@@ -306,13 +306,15 @@
 bool RefLayerSupport::IsConstantSupported(const TensorInfo& output,
                                           Optional<std::string&> reasonIfUnsupported) const
 {
-    return IsSupportedForDataTypeGeneric(reasonIfUnsupported,
-                                         output.GetDataType(),
-                                         &FalseFunc<>,
-                                         &TrueFunc<>,
-                                         &TrueFunc<>,
-                                         &TrueFunc<>,
-                                         &FalseFunc<>);
+    std::array<DataType,4> supportedTypes = {
+        DataType::Float32,
+        DataType::Signed32,
+        DataType::QuantisedAsymm8,
+        DataType::QuantisedSymm16
+    };
+
+    return CheckSupportRule(TypeAnyOf(output, supportedTypes), reasonIfUnsupported,
+                                  "Reference constant: output is not a supported type.");
 }
 
 bool RefLayerSupport::IsConvertFp16ToFp32Supported(const TensorInfo& input,
diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp
index 8c37fab..45c43a9 100644
--- a/src/backends/reference/RefWorkloadFactory.cpp
+++ b/src/backends/reference/RefWorkloadFactory.cpp
@@ -253,8 +253,7 @@
 std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConstant(const ConstantQueueDescriptor& descriptor,
     const WorkloadInfo& info) const
 {
-    return MakeWorkloadHelper<NullWorkload, RefConstantFloat32Workload, RefConstantUint8Workload,
-        RefConstantInt32Workload, NullWorkload>(descriptor, info);
+    return std::make_unique<RefConstantWorkload>(descriptor, info);
 }
 
 std::unique_ptr<IWorkload> RefWorkloadFactory::CreateReshape(const ReshapeQueueDescriptor& descriptor,
diff --git a/src/backends/reference/RefWorkloadFactory.hpp b/src/backends/reference/RefWorkloadFactory.hpp
index 86f1ec3..cbfcbfa 100644
--- a/src/backends/reference/RefWorkloadFactory.hpp
+++ b/src/backends/reference/RefWorkloadFactory.hpp
@@ -187,7 +187,6 @@
 
     template <typename F32Workload, typename U8Workload, typename QueueDescriptorType>
     std::unique_ptr<IWorkload> MakeWorkload(const QueueDescriptorType& descriptor, const WorkloadInfo& info) const;
-
 };
 
 } // namespace armnn
diff --git a/src/backends/reference/test/RefCreateWorkloadTests.cpp b/src/backends/reference/test/RefCreateWorkloadTests.cpp
index 024bfe1..4827d28 100644
--- a/src/backends/reference/test/RefCreateWorkloadTests.cpp
+++ b/src/backends/reference/test/RefCreateWorkloadTests.cpp
@@ -701,4 +701,37 @@
     RefCreateMergerWorkloadTest<RefConcatWorkload, armnn::DataType::QuantisedAsymm8>({ 2, 3, 2, 10 }, 3);
 }
 
+template <typename ConstantWorkloadType, armnn::DataType DataType>
+static void RefCreateConstantWorkloadTest(const armnn::TensorShape& outputShape)
+{
+    armnn::Graph graph;
+    RefWorkloadFactory factory;
+    auto workload = CreateConstantWorkloadTest<ConstantWorkloadType, DataType>(factory, graph, outputShape);
+
+    // Check output is as expected
+    auto queueDescriptor = workload->GetData();
+    auto outputHandle = boost::polymorphic_downcast<CpuTensorHandle*>(queueDescriptor.m_Outputs[0]);
+    BOOST_TEST((outputHandle->GetTensorInfo() == TensorInfo(outputShape, DataType)));
+}
+
+BOOST_AUTO_TEST_CASE(CreateConstantUint8Workload)
+{
+    RefCreateConstantWorkloadTest<RefConstantWorkload, armnn::DataType::QuantisedAsymm8>({ 2, 3, 2, 10 });
+}
+
+BOOST_AUTO_TEST_CASE(CreateConstantInt16Workload)
+{
+    RefCreateConstantWorkloadTest<RefConstantWorkload, armnn::DataType::QuantisedSymm16>({ 2, 3, 2, 10 });
+}
+
+BOOST_AUTO_TEST_CASE(CreateConstantFloat32Workload)
+{
+    RefCreateConstantWorkloadTest<RefConstantWorkload, armnn::DataType::Float32>({ 2, 3, 2, 10 });
+}
+
+BOOST_AUTO_TEST_CASE(CreateConstantSigned32Workload)
+{
+    RefCreateConstantWorkloadTest<RefConstantWorkload, armnn::DataType::Signed32>({ 2, 3, 2, 10 });
+}
+
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/backends/reference/test/RefLayerTests.cpp b/src/backends/reference/test/RefLayerTests.cpp
index 053de9e..55a2516 100644
--- a/src/backends/reference/test/RefLayerTests.cpp
+++ b/src/backends/reference/test/RefLayerTests.cpp
@@ -385,7 +385,8 @@
 
 // Constant
 ARMNN_AUTO_TEST_CASE(Constant, ConstantTest)
-ARMNN_AUTO_TEST_CASE(ConstantUint8, ConstantUint8Test)
+ARMNN_AUTO_TEST_CASE(ConstantUint8, ConstantUint8CustomQuantizationScaleAndOffsetTest)
+ARMNN_AUTO_TEST_CASE(ConstantInt16, ConstantInt16CustomQuantizationScaleAndOffsetTest)
 
 // Concat
 ARMNN_AUTO_TEST_CASE(Concatenation1d, Concatenation1dTest)
diff --git a/src/backends/reference/workloads/RefConstantWorkload.cpp b/src/backends/reference/workloads/RefConstantWorkload.cpp
index e074c6f..3506198 100644
--- a/src/backends/reference/workloads/RefConstantWorkload.cpp
+++ b/src/backends/reference/workloads/RefConstantWorkload.cpp
@@ -16,37 +16,26 @@
 namespace armnn
 {
 
-template <armnn::DataType DataType>
-void RefConstantWorkload<DataType>::Execute() const
+RefConstantWorkload::RefConstantWorkload(
+    const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info)
+    : BaseWorkload<ConstantQueueDescriptor>(descriptor, info) {}
+
+void RefConstantWorkload::PostAllocationConfigure()
 {
-    // Considering the reference backend independently, it could be possible to initialise the intermediate tensor
-    // created by the layer output handler at workload construction time, rather than at workload execution time.
-    // However, this is not an option for other backends (e.g. CL). For consistency, we prefer to align all
-    // implementations.
-    // A similar argument can be made about performing the memory copy in the first place (the layer output handler
-    // could have a non-owning reference to the layer output tensor managed by the const input layer); again, this is
-    // not an option for other backends, and the extra complexity required to make this work for the reference backend
-    // may not be worth the effort (skipping a memory copy in the first inference).
-    ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefConstantWorkload_Execute");
+    const ConstantQueueDescriptor& data = this->m_Data;
 
-    if (!m_RanOnce)
-    {
-        const ConstantQueueDescriptor& data = this->m_Data;
+    BOOST_ASSERT(data.m_LayerOutput != nullptr);
 
-        BOOST_ASSERT(data.m_LayerOutput != nullptr);
+    const TensorInfo& outputInfo = GetTensorInfo(data.m_Outputs[0]);
+    BOOST_ASSERT(data.m_LayerOutput->GetTensorInfo().GetNumBytes() == outputInfo.GetNumBytes());
 
-        const TensorInfo& outputInfo = GetTensorInfo(data.m_Outputs[0]);
-        BOOST_ASSERT(data.m_LayerOutput->GetTensorInfo().GetNumBytes() == outputInfo.GetNumBytes());
-
-        memcpy(GetOutputTensorData<void>(0, data), data.m_LayerOutput->GetConstTensor<void>(),
-            outputInfo.GetNumBytes());
-
-        m_RanOnce = true;
-    }
+    memcpy(GetOutputTensorData<void>(0, data), data.m_LayerOutput->GetConstTensor<void>(),
+        outputInfo.GetNumBytes());
 }
 
-template class RefConstantWorkload<DataType::Float32>;
-template class RefConstantWorkload<DataType::QuantisedAsymm8>;
-template class RefConstantWorkload<DataType::Signed32>;
+void RefConstantWorkload::Execute() const
+{
+    ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefConstantWorkload_Execute");
+}
 
 } //namespace armnn
diff --git a/src/backends/reference/workloads/RefConstantWorkload.hpp b/src/backends/reference/workloads/RefConstantWorkload.hpp
index 75d7ecc..ada488a 100644
--- a/src/backends/reference/workloads/RefConstantWorkload.hpp
+++ b/src/backends/reference/workloads/RefConstantWorkload.hpp
@@ -14,27 +14,13 @@
 {
 
 // Base class template providing an implementation of the Constant layer common to all data types.
-template <armnn::DataType DataType>
-class RefConstantWorkload : public TypedWorkload<ConstantQueueDescriptor, DataType>
+class RefConstantWorkload : public BaseWorkload<ConstantQueueDescriptor>
 {
 public:
-    RefConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info)
-        : TypedWorkload<ConstantQueueDescriptor, DataType>(descriptor, info)
-        , m_RanOnce(false)
-    {
-    }
+    RefConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info);
 
-    using TypedWorkload<ConstantQueueDescriptor, DataType>::m_Data;
-    using TypedWorkload<ConstantQueueDescriptor, DataType>::TypedWorkload;
-
+    void PostAllocationConfigure() override;
     virtual void Execute() const override;
-
-private:
-    mutable bool m_RanOnce;
 };
 
-using RefConstantFloat32Workload = RefConstantWorkload<DataType::Float32>;
-using RefConstantUint8Workload = RefConstantWorkload<DataType::QuantisedAsymm8>;
-using RefConstantInt32Workload = RefConstantWorkload<DataType::Signed32>;
-
 } //namespace armnn
