diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp
index 9263f1a..7f00dbe 100644
--- a/src/armnn/LoadedNetwork.cpp
+++ b/src/armnn/LoadedNetwork.cpp
@@ -136,6 +136,12 @@
 
     // Set up memory.
     m_OptimizedNetwork->GetGraph().AllocateDynamicBuffers();
+
+    // Now that the intermediate tensor memory has been set-up, do any post allocation configuration for each workload.
+    for (auto& workload : m_WorkloadQueue)
+    {
+        workload->PostAllocationConfigure();
+    }
 }
 
 TensorInfo LoadedNetwork::GetInputTensorInfo(LayerBindingId layerId) const
diff --git a/src/backends/backendsCommon/Workload.hpp b/src/backends/backendsCommon/Workload.hpp
index 447ec1b..3efd7db 100644
--- a/src/backends/backendsCommon/Workload.hpp
+++ b/src/backends/backendsCommon/Workload.hpp
@@ -20,6 +20,7 @@
 public:
     virtual ~IWorkload() {}
 
+    virtual void PostAllocationConfigure() = 0;
     virtual void Execute() const = 0;
 
     virtual void RegisterDebugCallback(const DebugCallbackFunction& func) {}
@@ -44,6 +45,8 @@
         m_Data.Validate(info);
     }
 
+    void PostAllocationConfigure() override {}
+
     const QueueDescriptor& GetData() const { return m_Data; }
 
 protected:
diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp
index 74f3997..cba4d3d 100644
--- a/src/backends/backendsCommon/test/LayerTests.cpp
+++ b/src/backends/backendsCommon/test/LayerTests.cpp
@@ -1177,6 +1177,7 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
@@ -1268,6 +1269,7 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1346,6 +1348,7 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1419,6 +1422,7 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1533,7 +1537,9 @@
     CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2Ref.get(), &input2[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
+    workloadRef->PostAllocationConfigure();
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1598,6 +1604,7 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -1952,6 +1959,7 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     ExecuteWorkload(*workload, memoryManager);
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -2770,6 +2778,7 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -2923,9 +2932,10 @@
     CopyDataToITensorHandle(inputHandle0Ref.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
+    workloadRef->PostAllocationConfigure();
     workloadRef->Execute();
-
     CopyDataFromITensorHandle(&comparisonResult.output[0][0][0][0], outputHandle.get());
     CopyDataFromITensorHandle(&comparisonResult.outputExpected[0][0][0][0], outputHandleRef.get());
 
@@ -3004,7 +3014,9 @@
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
     CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
+    workloadRef->PostAllocationConfigure();
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -3049,6 +3061,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), inputData);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     outputData.resize(outputTensorInfo.GetNumElements());
@@ -3381,6 +3394,7 @@
         ++nextInputId;
     }
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     if (needPermuteForConcat)
@@ -5002,6 +5016,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5071,6 +5086,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5140,6 +5156,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5207,6 +5224,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5276,6 +5294,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5326,6 +5345,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
@@ -5392,6 +5412,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     ExecuteWorkload(*workload, memoryManager);
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5415,13 +5436,13 @@
     float qScale,
     int32_t qOffset)
 {
-  const armnn::TensorShape inputShape{ 3, 3 };
-  const armnn::TensorShape outputShape{ 7, 7 };
+    const armnn::TensorShape inputShape{ 3, 3 };
+    const armnn::TensorShape outputShape{ 7, 7 };
 
-  const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
-  const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
+    const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
+    const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
 
-  std::vector<T> inputValues(
+    std::vector<T> inputValues(
     QuantizedVector<T>(qScale, qOffset,
     {
       // Height (3) x Width (3)
@@ -5430,8 +5451,8 @@
       3, 2, 4
     }));
 
- std::vector<T> expectedOutputValues(
-  QuantizedVector<T>(qScale, qOffset,
+    std::vector<T> expectedOutputValues(
+    QuantizedVector<T>(qScale, qOffset,
     {
       0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0,
@@ -5442,38 +5463,39 @@
       0, 0, 0, 0, 0, 0, 0
     }));
 
-  auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, std::vector<T>(inputValues));
+    auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, std::vector<T>(inputValues));
 
-  LayerTestResult<T, 2> result(outputTensorInfo);
-  result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, std::vector<T>(expectedOutputValues));
+    LayerTestResult<T, 2> result(outputTensorInfo);
+    result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, std::vector<T>(expectedOutputValues));
 
-  std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
-  std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
+    std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
+    std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
 
-  armnn::PadQueueDescriptor descriptor;
+    armnn::PadQueueDescriptor descriptor;
 
-  std::vector<std::pair<unsigned int, unsigned int>> PadList;
-  PadList.push_back(std::pair<unsigned int, unsigned int>(2,2));
-  PadList.push_back(std::pair<unsigned int, unsigned int>(2,2));
+    std::vector<std::pair<unsigned int, unsigned int>> PadList;
+    PadList.push_back(std::pair<unsigned int, unsigned int>(2,2));
+    PadList.push_back(std::pair<unsigned int, unsigned int>(2,2));
 
-  descriptor.m_Parameters.m_PadList = PadList;
-  armnn::WorkloadInfo info;
+    descriptor.m_Parameters.m_PadList = PadList;
+    armnn::WorkloadInfo info;
 
-  AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
-  AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
+    AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
+    AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
 
-  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
+    std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
 
-  inputHandle->Allocate();
-  outputHandle->Allocate();
+    inputHandle->Allocate();
+    outputHandle->Allocate();
 
-  CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
+    CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
 
-  workload->Execute();
+    workload->PostAllocationConfigure();
+    workload->Execute();
 
-  CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
+    CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
 
-  return result;
+    return result;
 }
 
 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
@@ -5553,6 +5575,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
@@ -5790,6 +5813,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -6251,6 +6275,7 @@
 
     outputHandle->Allocate();
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -6406,6 +6431,7 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
@@ -6541,6 +6567,7 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
@@ -6610,6 +6637,7 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -6739,6 +6767,7 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -7034,6 +7063,7 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -7252,6 +7282,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -7311,6 +7342,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -7368,6 +7400,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -7423,6 +7456,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -7480,6 +7514,7 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -7516,6 +7551,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
@@ -7593,6 +7629,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
@@ -8384,6 +8421,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), input.origin());
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
@@ -8660,7 +8698,9 @@
     CopyDataToITensorHandle(poolingOutputHandle.get(), &resultMaxPool[0][0][0][0]);
     CopyDataToITensorHandle(addInputHandle.get(), &addInput[0][0][0][0]);
 
+    workload->PostAllocationConfigure();
     workload->Execute();
+    addWorkload->PostAllocationConfigure();
     addWorkload->Execute();
 
     CopyDataFromITensorHandle(&addRet.output[0][0][0][0], addOutputHandle.get());
@@ -8795,7 +8835,7 @@
     const std::vector<T> &outputData,
     float scale = 1.0f,
     int32_t offset = 0)
-  {
+{
     auto dataType = (std::is_same<T, uint8_t>::value ? armnn::DataType::QuantisedAsymm8 : armnn::DataType::Float32);
 
     armnn::TensorInfo inputTensorInfo(InputDim, inputShape, dataType);
@@ -8830,6 +8870,7 @@
 
     CopyDataToITensorHandle(inputHandle.get(), input.origin());
 
+    workload->PostAllocationConfigure();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
diff --git a/src/backends/reference/backend.mk b/src/backends/reference/backend.mk
index f2b1153..e74e853 100644
--- a/src/backends/reference/backend.mk
+++ b/src/backends/reference/backend.mk
@@ -30,7 +30,6 @@
         workloads/RefBatchNormalizationUint8Workload.cpp \
         workloads/RefBatchToSpaceNdFloat32Workload.cpp \
         workloads/RefBatchToSpaceNdUint8Workload.cpp \
-        workloads/RefComparisonWorkload.cpp \
         workloads/RefConstantWorkload.cpp \
         workloads/RefConvertFp16ToFp32Workload.cpp \
         workloads/RefConvertFp32ToFp16Workload.cpp \
diff --git a/src/backends/reference/workloads/BaseIterator.hpp b/src/backends/reference/workloads/BaseIterator.hpp
index 95c75a5..955d7f2 100644
--- a/src/backends/reference/workloads/BaseIterator.hpp
+++ b/src/backends/reference/workloads/BaseIterator.hpp
@@ -25,34 +25,30 @@
     virtual BaseIterator& operator-=(const unsigned int increment) = 0;
 };
 
+template<typename IType>
 class Decoder : public BaseIterator
 {
 public:
-    Decoder() : BaseIterator() {}
+    using InterfaceType = IType;
+
+    Decoder() {}
 
     virtual ~Decoder() {}
 
-    virtual float Get() const = 0;
+    virtual IType Get() const = 0;
 };
 
+template<typename IType>
 class Encoder : public BaseIterator
 {
 public:
-    Encoder() : BaseIterator() {}
+    using InterfaceType = IType;
+
+    Encoder() {}
 
     virtual ~Encoder() {}
 
-    virtual void Set(const float& right) = 0;
-};
-
-class ComparisonEncoder : public BaseIterator
-{
-public:
-    ComparisonEncoder() : BaseIterator() {}
-
-    virtual ~ComparisonEncoder() {}
-
-    virtual void Set(bool right) = 0;
+    virtual void Set(IType right) = 0;
 };
 
 template<typename T, typename Base>
@@ -84,7 +80,7 @@
     T* m_Iterator;
 };
 
-class QASymm8Decoder : public TypedIterator<const uint8_t, Decoder>
+class QASymm8Decoder : public TypedIterator<const uint8_t, Decoder<float>>
 {
 public:
     QASymm8Decoder(const uint8_t* data, const float scale, const int32_t offset)
@@ -100,19 +96,7 @@
     const int32_t m_Offset;
 };
 
-class FloatDecoder : public TypedIterator<const float, Decoder>
-{
-public:
-    FloatDecoder(const float* data)
-        : TypedIterator(data) {}
-
-    float Get() const override
-    {
-        return *m_Iterator;
-    }
-};
-
-class QSymm16Decoder : public TypedIterator<const int16_t, Decoder>
+class QSymm16Decoder : public TypedIterator<const int16_t, Decoder<float>>
 {
 public:
     QSymm16Decoder(const int16_t* data, const float scale, const int32_t offset)
@@ -128,25 +112,25 @@
     const int32_t m_Offset;
 };
 
-class FloatEncoder : public TypedIterator<float, Encoder>
+class FloatDecoder : public TypedIterator<const float, Decoder<float>>
 {
 public:
-    FloatEncoder(float* data)
+    FloatDecoder(const float* data)
         : TypedIterator(data) {}
 
-    void Set(const float& right) override
+    float Get() const override
     {
-        *m_Iterator = right;
+        return *m_Iterator;
     }
 };
 
-class QASymm8Encoder : public TypedIterator<uint8_t, Encoder>
+class QASymm8Encoder : public TypedIterator<uint8_t, Encoder<float>>
 {
 public:
     QASymm8Encoder(uint8_t* data, const float scale, const int32_t offset)
         : TypedIterator(data), m_Scale(scale), m_Offset(offset) {}
 
-    void Set(const float& right) override
+    void Set(float right) override
     {
         *m_Iterator = armnn::Quantize<uint8_t>(right, m_Scale, m_Offset);
     }
@@ -156,7 +140,35 @@
     const int32_t m_Offset;
 };
 
-class BooleanEncoder : public TypedIterator<uint8_t, ComparisonEncoder>
+class QSymm16Encoder : public TypedIterator<int16_t, Encoder<float>>
+{
+public:
+    QSymm16Encoder(int16_t* data, const float scale, const int32_t offset)
+        : TypedIterator(data), m_Scale(scale), m_Offset(offset) {}
+
+    void Set(float right) override
+    {
+        *m_Iterator = armnn::Quantize<int16_t>(right, m_Scale, m_Offset);
+    }
+
+private:
+    const float m_Scale;
+    const int32_t m_Offset;
+};
+
+class FloatEncoder : public TypedIterator<float, Encoder<float>>
+{
+public:
+    FloatEncoder(float* data)
+        : TypedIterator(data) {}
+
+    void Set(float right) override
+    {
+        *m_Iterator = right;
+    }
+};
+
+class BooleanEncoder : public TypedIterator<uint8_t, Encoder<bool>>
 {
 public:
     BooleanEncoder(uint8_t* data)
@@ -168,20 +180,5 @@
     }
 };
 
-class QSymm16Encoder : public TypedIterator<int16_t, Encoder>
-{
-public:
-    QSymm16Encoder(int16_t* data, const float scale, const int32_t offset)
-        : TypedIterator(data), m_Scale(scale), m_Offset(offset) {}
-
-    void Set(const float& right) override
-    {
-        *m_Iterator = armnn::Quantize<int16_t>(right, m_Scale, m_Offset);
-    }
-
-private:
-    const float m_Scale;
-    const int32_t m_Offset;
-};
 
 } //namespace armnn
\ No newline at end of file
diff --git a/src/backends/reference/workloads/CMakeLists.txt b/src/backends/reference/workloads/CMakeLists.txt
index 4ff2466..e94b031 100644
--- a/src/backends/reference/workloads/CMakeLists.txt
+++ b/src/backends/reference/workloads/CMakeLists.txt
@@ -16,10 +16,12 @@
     ConvImpl.hpp
     Debug.cpp
     Debug.hpp
+    Decoders.hpp
     DetectionPostProcess.cpp
     DetectionPostProcess.hpp
     ElementwiseFunction.cpp
     ElementwiseFunction.hpp
+    Encoders.hpp
     FullyConnected.cpp
     FullyConnected.hpp
     Gather.cpp
@@ -44,8 +46,6 @@
     RefBatchToSpaceNdFloat32Workload.hpp
     RefBatchToSpaceNdUint8Workload.cpp
     RefBatchToSpaceNdUint8Workload.hpp
-    RefComparisonWorkload.cpp
-    RefComparisonWorkload.hpp
     RefConstantWorkload.cpp
     RefConstantWorkload.hpp
     RefConvertFp16ToFp32Workload.cpp
diff --git a/src/backends/reference/workloads/Decoders.hpp b/src/backends/reference/workloads/Decoders.hpp
new file mode 100644
index 0000000..4112e7d
--- /dev/null
+++ b/src/backends/reference/workloads/Decoders.hpp
@@ -0,0 +1,48 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "BaseIterator.hpp"
+
+namespace armnn
+{
+
+template<typename T>
+std::unique_ptr<Decoder<T>> MakeDecoder(const TensorInfo& info, const void* data);
+
+template<>
+std::unique_ptr<Decoder<float>> MakeDecoder(const TensorInfo& info, const void* data)
+{
+    switch(info.GetDataType())
+    {
+        case armnn::DataType::QuantisedAsymm8:
+        {
+            return std::make_unique<QASymm8Decoder>(
+                static_cast<const uint8_t*>(data),
+                info.GetQuantizationScale(),
+                info.GetQuantizationOffset());
+        }
+        case armnn::DataType::QuantisedSymm16:
+        {
+            return std::make_unique<QSymm16Decoder>(
+                static_cast<const int16_t*>(data),
+                info.GetQuantizationScale(),
+                info.GetQuantizationOffset());
+        }
+        case armnn::DataType::Float32:
+        {
+            return std::make_unique<FloatDecoder>(static_cast<const float*>(data));
+        }
+        default:
+        {
+            BOOST_ASSERT_MSG(false, "Not supported Data Type!");
+            break;
+        }
+    }
+    return nullptr;
+}
+
+} //namespace armnn
\ No newline at end of file
diff --git a/src/backends/reference/workloads/ElementwiseFunction.cpp b/src/backends/reference/workloads/ElementwiseFunction.cpp
index 934a862..7a5c071 100644
--- a/src/backends/reference/workloads/ElementwiseFunction.cpp
+++ b/src/backends/reference/workloads/ElementwiseFunction.cpp
@@ -13,26 +13,25 @@
 namespace armnn
 {
 
-template <typename Functor, typename DecoderOp, typename EncoderOp>
-ElementwiseFunction<Functor, DecoderOp, EncoderOp>::ElementwiseFunction(const TensorShape& inShape0,
-                                                                        const TensorShape& inShape1,
-                                                                        const TensorShape& outShape,
-                                                                        DecoderOp& inData0,
-                                                                        DecoderOp& inData1,
-                                                                        EncoderOp& outData)
+template <typename Functor>
+ElementwiseFunction<Functor>::ElementwiseFunction(const TensorShape& inShape0,
+                                                   const TensorShape& inShape1,
+                                                   const TensorShape& outShape,
+                                                   armnn::Decoder<InType>& inData0,
+                                                   armnn::Decoder<InType>& inData1,
+                                                   armnn::Encoder<OutType>& outData)
 {
     BroadcastLoop(inShape0, inShape1, outShape).Unroll(Functor(), 0, inData0, inData1, outData);
 }
 
 } //namespace armnn
 
-template struct armnn::ElementwiseFunction<std::plus<float>, armnn::Decoder, armnn::Encoder>;
-template struct armnn::ElementwiseFunction<std::minus<float>, armnn::Decoder, armnn::Encoder>;
-template struct armnn::ElementwiseFunction<std::multiplies<float>, armnn::Decoder, armnn::Encoder>;
-template struct armnn::ElementwiseFunction<std::divides<float>, armnn::Decoder, armnn::Encoder>;
-template struct armnn::ElementwiseFunction<armnn::maximum<float>, armnn::Decoder, armnn::Encoder>;
-template struct armnn::ElementwiseFunction<armnn::minimum<float>, armnn::Decoder, armnn::Encoder>;
-
-template struct armnn::ElementwiseFunction<std::equal_to<float>, armnn::Decoder, armnn::ComparisonEncoder>;
-template struct armnn::ElementwiseFunction<std::greater<float>, armnn::Decoder, armnn::ComparisonEncoder>;
+template struct armnn::ElementwiseFunction<std::plus<float>>;
+template struct armnn::ElementwiseFunction<std::minus<float>>;
+template struct armnn::ElementwiseFunction<std::multiplies<float>>;
+template struct armnn::ElementwiseFunction<std::divides<float>>;
+template struct armnn::ElementwiseFunction<armnn::maximum<float>>;
+template struct armnn::ElementwiseFunction<armnn::minimum<float>>;
+template struct armnn::ElementwiseFunction<std::equal_to<float>>;
+template struct armnn::ElementwiseFunction<std::greater<float>>;
 
diff --git a/src/backends/reference/workloads/ElementwiseFunction.hpp b/src/backends/reference/workloads/ElementwiseFunction.hpp
index 9eb003d..fd1fab0 100644
--- a/src/backends/reference/workloads/ElementwiseFunction.hpp
+++ b/src/backends/reference/workloads/ElementwiseFunction.hpp
@@ -11,15 +11,18 @@
 namespace armnn
 {
 
-template <typename Functor, typename DecoderOp, typename EncoderOp>
+template <typename Functor>
 struct ElementwiseFunction
 {
+    using OutType = typename Functor::result_type;
+    using InType = typename Functor::first_argument_type;
+
     ElementwiseFunction(const TensorShape& inShape0,
                         const TensorShape& inShape1,
                         const TensorShape& outShape,
-                        DecoderOp& inData0,
-                        DecoderOp& inData1,
-                        EncoderOp& outData);
+                        armnn::Decoder<InType>& inData0,
+                        armnn::Decoder<InType>& inData1,
+                        armnn::Encoder<OutType>& outData);
 };
 
 } //namespace armnn
diff --git a/src/backends/reference/workloads/Encoders.hpp b/src/backends/reference/workloads/Encoders.hpp
new file mode 100644
index 0000000..90300aa
--- /dev/null
+++ b/src/backends/reference/workloads/Encoders.hpp
@@ -0,0 +1,66 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "BaseIterator.hpp"
+
+namespace armnn
+{
+
+template<typename T>
+std::unique_ptr<Encoder<T>> MakeEncoder(const TensorInfo& info, void* data);
+
+template<>
+std::unique_ptr<Encoder<float>> MakeEncoder(const TensorInfo& info, void* data)
+{
+    switch(info.GetDataType())
+    {
+        case armnn::DataType::QuantisedAsymm8:
+        {
+            return std::make_unique<QASymm8Encoder>(
+                static_cast<uint8_t*>(data),
+                info.GetQuantizationScale(),
+                info.GetQuantizationOffset());
+        }
+        case armnn::DataType::QuantisedSymm16:
+        {
+            return std::make_unique<QSymm16Encoder>(
+                static_cast<int16_t*>(data),
+                info.GetQuantizationScale(),
+                info.GetQuantizationOffset());
+        }
+        case armnn::DataType::Float32:
+        {
+            return std::make_unique<FloatEncoder>(static_cast<float*>(data));
+        }
+        default:
+        {
+            BOOST_ASSERT_MSG(false, "Cannot encode from float. Not supported target Data Type!");
+            break;
+        }
+    }
+    return nullptr;
+}
+
+template<>
+std::unique_ptr<Encoder<bool>> MakeEncoder(const TensorInfo& info, void* data)
+{
+    switch(info.GetDataType())
+    {
+        case armnn::DataType::Boolean:
+        {
+            return std::make_unique<BooleanEncoder>(static_cast<uint8_t*>(data));
+        }
+        default:
+        {
+            BOOST_ASSERT_MSG(false, "Cannot encode from boolean. Not supported target Data Type!");
+            break;
+        }
+    }
+    return nullptr;
+}
+
+} //namespace armnn
\ No newline at end of file
diff --git a/src/backends/reference/workloads/Maximum.hpp b/src/backends/reference/workloads/Maximum.hpp
index 524afff..97df19d 100644
--- a/src/backends/reference/workloads/Maximum.hpp
+++ b/src/backends/reference/workloads/Maximum.hpp
@@ -10,7 +10,7 @@
 namespace armnn
 {
     template<typename T>
-    struct maximum
+struct maximum : public std::binary_function<T, T, T>
     {
         T
         operator () (const T&  inputData0, const T&  inputData1) const
diff --git a/src/backends/reference/workloads/Minimum.hpp b/src/backends/reference/workloads/Minimum.hpp
index 2f3bdc1..0c05398 100644
--- a/src/backends/reference/workloads/Minimum.hpp
+++ b/src/backends/reference/workloads/Minimum.hpp
@@ -9,7 +9,7 @@
 {
 
 template<typename T>
-struct minimum
+struct minimum : public std::binary_function<T, T, T>
 {
     T
     operator()(const T& input1, const T& input2) const
diff --git a/src/backends/reference/workloads/RefComparisonWorkload.cpp b/src/backends/reference/workloads/RefComparisonWorkload.cpp
deleted file mode 100644
index bb8bb04..0000000
--- a/src/backends/reference/workloads/RefComparisonWorkload.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "RefComparisonWorkload.hpp"
-#include "ElementwiseFunction.hpp"
-#include "RefWorkloadUtils.hpp"
-#include "Profiling.hpp"
-#include <vector>
-
-namespace armnn {
-
-template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
-void RefComparisonWorkload<Functor, ParentDescriptor, DebugString>::Execute() const
-{
-    ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, StringMapping::Instance().Get(DebugString));
-    const TensorInfo& inputInfo0 = GetTensorInfo(m_Data.m_Inputs[0]);
-    const TensorInfo& inputInfo1 = GetTensorInfo(m_Data.m_Inputs[1]);
-    const TensorInfo& outputInfo = GetTensorInfo(m_Data.m_Outputs[0]);
-
-    const TensorShape& inShape0 = inputInfo0.GetShape();
-    const TensorShape& inShape1 = inputInfo1.GetShape();
-    const TensorShape& outShape = outputInfo.GetShape();
-
-    switch(inputInfo0.GetDataType())
-    {
-        case armnn::DataType::QuantisedAsymm8:
-        {
-            QASymm8Decoder decodeIterator0(GetInputTensorDataU8(0, m_Data),
-                                           inputInfo0.GetQuantizationScale(),
-                                           inputInfo0.GetQuantizationOffset());
-
-            QASymm8Decoder decodeIterator1(GetInputTensorDataU8(1, m_Data),
-                                           inputInfo1.GetQuantizationScale(),
-                                           inputInfo1.GetQuantizationOffset());
-
-            BooleanEncoder encodeIterator0(GetOutputTensorDataU8(0, m_Data));
-
-            ElementwiseFunction<Functor, Decoder, ComparisonEncoder>(inShape0,
-                                                                     inShape1,
-                                                                     outShape,
-                                                                     decodeIterator0,
-                                                                     decodeIterator1,
-                                                                     encodeIterator0);
-            break;
-        }
-        case armnn::DataType::Float32:
-        {
-            FloatDecoder decodeIterator0(GetInputTensorDataFloat(0, m_Data));
-            FloatDecoder decodeIterator1(GetInputTensorDataFloat(1, m_Data));
-            BooleanEncoder encodeIterator0(GetOutputTensorDataU8(0, m_Data));
-
-            ElementwiseFunction<Functor, Decoder, ComparisonEncoder>(inShape0,
-                                                                     inShape1,
-                                                                     outShape,
-                                                                     decodeIterator0,
-                                                                     decodeIterator1,
-                                                                     encodeIterator0);
-            break;
-        }
-        default:
-            BOOST_ASSERT_MSG(false, "RefComparisonWorkload: Not supported Data Type!");
-            break;
-    }
-}
-
-}
-
-template class armnn::RefComparisonWorkload<std::equal_to<float>,
-                                           armnn::EqualQueueDescriptor,
-                                           armnn::StringMapping::RefEqualWorkload_Execute>;
-
-template class armnn::RefComparisonWorkload<std::greater<float>,
-                                           armnn::GreaterQueueDescriptor,
-                                           armnn::StringMapping::RefGreaterWorkload_Execute>;
diff --git a/src/backends/reference/workloads/RefComparisonWorkload.hpp b/src/backends/reference/workloads/RefComparisonWorkload.hpp
deleted file mode 100644
index cfc2dcf..0000000
--- a/src/backends/reference/workloads/RefComparisonWorkload.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Types.hpp>
-#include <backendsCommon/Workload.hpp>
-#include <backendsCommon/WorkloadData.hpp>
-#include "StringMapping.hpp"
-
-namespace armnn
-{
-
-template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
-class RefComparisonWorkload : public BaseWorkload<ParentDescriptor>
-{
-public:
-    using BaseWorkload<ParentDescriptor>::m_Data;
-    using BaseWorkload<ParentDescriptor>::BaseWorkload;
-
-    void Execute() const override;
-};
-
-using RefEqualWorkload =
-    RefComparisonWorkload<std::equal_to<float>,
-                         EqualQueueDescriptor,
-                         StringMapping::RefEqualWorkload_Execute>;
-
-
-using RefGreaterWorkload =
-    RefComparisonWorkload<std::greater<float>,
-                         GreaterQueueDescriptor,
-                         StringMapping::RefGreaterWorkload_Execute>;
-} // armnn
diff --git a/src/backends/reference/workloads/RefElementwiseWorkload.cpp b/src/backends/reference/workloads/RefElementwiseWorkload.cpp
index 1a30e7c..535adca 100644
--- a/src/backends/reference/workloads/RefElementwiseWorkload.cpp
+++ b/src/backends/reference/workloads/RefElementwiseWorkload.cpp
@@ -4,17 +4,41 @@
 //
 
 #include "RefElementwiseWorkload.hpp"
+
+#include "Decoders.hpp"
 #include "ElementwiseFunction.hpp"
-#include "RefWorkloadUtils.hpp"
+#include "Encoders.hpp"
 #include "Profiling.hpp"
+#include "RefWorkloadUtils.hpp"
 #include "StringMapping.hpp"
 #include "TypeUtils.hpp"
+
 #include <vector>
 
 namespace armnn
 {
 
 template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
+RefElementwiseWorkload<Functor, ParentDescriptor, DebugString>::RefElementwiseWorkload(
+    const ParentDescriptor& desc,
+    const WorkloadInfo& info)
+    : BaseWorkload<ParentDescriptor>(desc, info)
+{
+}
+
+template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
+void RefElementwiseWorkload<Functor, ParentDescriptor, DebugString>::PostAllocationConfigure()
+{
+    const TensorInfo& inputInfo0 = GetTensorInfo(m_Data.m_Inputs[0]);
+    const TensorInfo& inputInfo1 = GetTensorInfo(m_Data.m_Inputs[1]);
+    const TensorInfo& outputInfo = GetTensorInfo(m_Data.m_Outputs[0]);
+
+    m_Input0 = MakeDecoder<InType>(inputInfo0, m_Data.m_Inputs[0]->Map());
+    m_Input1 = MakeDecoder<InType>(inputInfo1, m_Data.m_Inputs[1]->Map());
+    m_Output = MakeEncoder<OutType>(outputInfo, m_Data.m_Outputs[0]->Map());
+}
+
+template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
 void RefElementwiseWorkload<Functor, ParentDescriptor, DebugString>::Execute() const
 {
     ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, StringMapping::Instance().Get(DebugString));
@@ -26,73 +50,15 @@
     const TensorShape& inShape1 = inputInfo1.GetShape();
     const TensorShape& outShape = outputInfo.GetShape();
 
-    switch(inputInfo0.GetDataType())
-    {
-        case armnn::DataType::QuantisedAsymm8:
-        {
-            QASymm8Decoder decodeIterator0(GetInputTensorDataU8(0, m_Data),
-                                           inputInfo0.GetQuantizationScale(),
-                                           inputInfo0.GetQuantizationOffset());
-
-            QASymm8Decoder decodeIterator1(GetInputTensorDataU8(1, m_Data),
-                                           inputInfo1.GetQuantizationScale(),
-                                           inputInfo1.GetQuantizationOffset());
-
-            QASymm8Encoder encodeIterator0(GetOutputTensorDataU8(0, m_Data),
-                                           outputInfo.GetQuantizationScale(),
-                                           outputInfo.GetQuantizationOffset());
-
-            ElementwiseFunction<Functor, Decoder, Encoder>(inShape0,
-                                                           inShape1,
-                                                           outShape,
-                                                           decodeIterator0,
-                                                           decodeIterator1,
-                                                           encodeIterator0);
-            break;
-        }
-        case armnn::DataType::Float32:
-        {
-            FloatDecoder decodeIterator0(GetInputTensorDataFloat(0, m_Data));
-            FloatDecoder decodeIterator1(GetInputTensorDataFloat(1, m_Data));
-            FloatEncoder encodeIterator0(GetOutputTensorDataFloat(0, m_Data));
-
-            ElementwiseFunction<Functor, Decoder, Encoder>(inShape0,
-                                                           inShape1,
-                                                           outShape,
-                                                           decodeIterator0,
-                                                           decodeIterator1,
-                                                           encodeIterator0);
-            break;
-        }
-        case armnn::DataType::QuantisedSymm16:
-        {
-            QSymm16Decoder decodeIterator0(GetInputTensorData<int16_t>(0, m_Data),
-                                           inputInfo0.GetQuantizationScale(),
-                                           inputInfo0.GetQuantizationOffset());
-
-            QSymm16Decoder decodeIterator1(GetInputTensorData<int16_t>(1, m_Data),
-                                           inputInfo1.GetQuantizationScale(),
-                                           inputInfo1.GetQuantizationOffset());
-
-            QSymm16Encoder encodeIterator0(GetOutputTensorData<int16_t>(0, m_Data),
-                                           outputInfo.GetQuantizationScale(),
-                                           outputInfo.GetQuantizationOffset());
-
-            ElementwiseFunction<Functor, Decoder, Encoder>(inShape0,
-                                                           inShape1,
-                                                           outShape,
-                                                           decodeIterator0,
-                                                           decodeIterator1,
-                                                           encodeIterator0);
-            break;
-        }
-        default:
-            BOOST_ASSERT_MSG(false, "RefElementwiseWorkload: Not supported Data Type!");
-            break;
-    }
+    ElementwiseFunction<Functor>(inShape0,
+                                 inShape1,
+                                 outShape,
+                                 *m_Input0,
+                                 *m_Input1,
+                                 *m_Output);
 }
 
-}
+} //namespace armnn
 
 template class armnn::RefElementwiseWorkload<std::plus<float>,
                                             armnn::AdditionQueueDescriptor,
@@ -116,4 +82,12 @@
 
 template class armnn::RefElementwiseWorkload<armnn::minimum<float>,
                                             armnn::MinimumQueueDescriptor,
-                                            armnn::StringMapping::RefMinimumWorkload_Execute>;
\ No newline at end of file
+                                            armnn::StringMapping::RefMinimumWorkload_Execute>;
+
+template class armnn::RefElementwiseWorkload<std::equal_to<float>,
+                                            armnn::EqualQueueDescriptor,
+                                            armnn::StringMapping::RefEqualWorkload_Execute>;
+
+template class armnn::RefElementwiseWorkload<std::greater<float>,
+                                            armnn::GreaterQueueDescriptor,
+                                            armnn::StringMapping::RefGreaterWorkload_Execute>;
diff --git a/src/backends/reference/workloads/RefElementwiseWorkload.hpp b/src/backends/reference/workloads/RefElementwiseWorkload.hpp
index 81af196..651942e 100644
--- a/src/backends/reference/workloads/RefElementwiseWorkload.hpp
+++ b/src/backends/reference/workloads/RefElementwiseWorkload.hpp
@@ -8,6 +8,8 @@
 #include <armnn/Types.hpp>
 #include <backendsCommon/Workload.hpp>
 #include <backendsCommon/WorkloadData.hpp>
+#include "BaseIterator.hpp"
+#include "ElementwiseFunction.hpp"
 #include "Maximum.hpp"
 #include "Minimum.hpp"
 #include "StringMapping.hpp"
@@ -19,10 +21,18 @@
 class RefElementwiseWorkload : public BaseWorkload<ParentDescriptor>
 {
 public:
+    using InType = typename ElementwiseFunction<Functor>::InType;
+    using OutType = typename ElementwiseFunction<Functor>::OutType;
     using BaseWorkload<ParentDescriptor>::m_Data;
-    using BaseWorkload<ParentDescriptor>::BaseWorkload;
 
+    RefElementwiseWorkload(const ParentDescriptor& descriptor, const WorkloadInfo& info);
+    void PostAllocationConfigure() override;
     void Execute() const override;
+
+private:
+    std::unique_ptr<Decoder<InType>> m_Input0;
+    std::unique_ptr<Decoder<InType>> m_Input1;
+    std::unique_ptr<Encoder<OutType>> m_Output;
 };
 
 using RefAdditionWorkload =
@@ -54,4 +64,14 @@
     RefElementwiseWorkload<armnn::minimum<float>,
                           MinimumQueueDescriptor,
                           StringMapping::RefMinimumWorkload_Execute>;
+
+using RefEqualWorkload =
+    RefElementwiseWorkload<std::equal_to<float>,
+                           armnn::EqualQueueDescriptor,
+                           armnn::StringMapping::RefEqualWorkload_Execute>;
+
+using RefGreaterWorkload =
+    RefElementwiseWorkload<std::greater<float>,
+                           armnn::GreaterQueueDescriptor,
+                           armnn::StringMapping::RefGreaterWorkload_Execute>;
 } // armnn
diff --git a/src/backends/reference/workloads/RefWorkloads.hpp b/src/backends/reference/workloads/RefWorkloads.hpp
index 77aa56f..a1b5847 100644
--- a/src/backends/reference/workloads/RefWorkloads.hpp
+++ b/src/backends/reference/workloads/RefWorkloads.hpp
@@ -62,7 +62,6 @@
 #include "RefBatchToSpaceNdFloat32Workload.hpp"
 #include "RefDebugWorkload.hpp"
 #include "RefRsqrtFloat32Workload.hpp"
-#include "RefComparisonWorkload.hpp"
 #include "RefDequantizeWorkload.hpp"
 
 #include "RefQuantizeWorkload.hpp"
\ No newline at end of file
