diff --git a/src/backends/backendsCommon/test/Pooling2dEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/Pooling2dEndToEndTestImpl.hpp
index addd27c..026dbfd 100644
--- a/src/backends/backendsCommon/test/Pooling2dEndToEndTestImpl.hpp
+++ b/src/backends/backendsCommon/test/Pooling2dEndToEndTestImpl.hpp
@@ -117,15 +117,15 @@
     std::vector<T> expectedOutput;
     if (padMethod == PaddingMethod::Exclude)
     {
-        expectedOutput  = { 3  , 3.5 , 4 ,
-                            4.5, 5  , 5.5,
-                            6  , 6.5, 7  };
+        expectedOutput  = { 3.f , 3.5f, 4.f ,
+                            4.5f, 5.f , 5.5f,
+                            6.f , 6.5f, 7.f  };
     }
     else
     {
-        expectedOutput  = { 1.33333, 2.33333, 1.77778,
-                            3      , 5      , 3.66667,
-                            2.66667, 4.33333, 3.11111 };
+        expectedOutput  = { 1.33333f, 2.33333f, 1.77778f,
+                            3.f     , 5.f     , 3.66667f,
+                            2.66667f, 4.33333f, 3.11111f };
     }
 
     std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } };
diff --git a/src/backends/tosaCommon/operatorMappings/Conv2dOperator.cpp b/src/backends/tosaCommon/operatorMappings/Conv2dOperator.cpp
index dadd91b..6fc1678 100644
--- a/src/backends/tosaCommon/operatorMappings/Conv2dOperator.cpp
+++ b/src/backends/tosaCommon/operatorMappings/Conv2dOperator.cpp
@@ -114,7 +114,7 @@
                                static_cast<int>(conv2dDescriptor->m_StrideX)};
     std::vector<int> dilation = {static_cast<int>(conv2dDescriptor->m_DilationY),
                                  static_cast<int>(conv2dDescriptor->m_DilationX)};
-    TosaConvAttribute attribute(pad, dilation, stride, 0, 0, ArmNNToDType(inputs[0]->GetDataType()));
+    TosaConvAttribute attribute(pad, stride, dilation, 0, 0, ArmNNToDType(inputs[0]->GetDataType()));
 
     auto* op = new TosaSerializationOperator(Op_CONV2D,
                                              Attribute_ConvAttribute,
diff --git a/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp b/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp
index be2f53e..dccb298 100644
--- a/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp
+++ b/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp
@@ -279,7 +279,7 @@
 
 inline std::vector<uint8_t> ConvertConstantTensorDataToBuffer(const std::shared_ptr<ConstTensorHandle>& tensorHandle)
 {
-    tosa_err_t error;
+    tosa_err_t error = tosa_err_t::TOSA_OK;
     std::vector<uint8_t> uint8Data;
     auto tensorInfo = tensorHandle->GetTensorInfo();
 
diff --git a/src/backends/tosaCommon/test/OneToOneMappingTests.cpp b/src/backends/tosaCommon/test/OneToOneMappingTests.cpp
index 2b0c1e5..e74c638 100644
--- a/src/backends/tosaCommon/test/OneToOneMappingTests.cpp
+++ b/src/backends/tosaCommon/test/OneToOneMappingTests.cpp
@@ -177,6 +177,80 @@
         basicBlock, inputShape, outputShape, Op_CONV2D, Attribute_ConvAttribute, descriptor, LayerType::Convolution2d);
 }
 
+TEST_CASE("GetTosaMapping_AvgPool2DLayer")
+{
+    Pooling2dDescriptor descriptor;
+    descriptor.m_PoolType = PoolingAlgorithm::Average;
+    descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2;
+    descriptor.m_StrideX = descriptor.m_StrideY = 2;
+    descriptor.m_PadLeft = 1;
+    descriptor.m_PadRight = 1;
+    descriptor.m_PadTop = 1;
+    descriptor.m_PadBottom = 1;
+    descriptor.m_PaddingMethod = PaddingMethod::Exclude;
+
+    TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32);
+    TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32);
+
+    std::vector<std::vector<int32_t>> inputShape  = {{ 1, 1, 4, 4 }};
+    std::vector<std::vector<int32_t>> outputShape = {{ 1, 1, 3, 3 }};
+
+    TosaSerializationBasicBlock* basicBlock =
+            GetTosaMapping(nullptr, LayerType::Pooling2d, {&inputTensorInfo}, {&outputTensorInfo}, descriptor);
+    AssertTosaOneToOneMappingBasicBlock(basicBlock,
+                                        inputShape,
+                                        outputShape,
+                                        Op_AVG_POOL2D,
+                                        Attribute_PoolAttribute,
+                                        descriptor,
+                                        LayerType::Pooling2d);
+}
+
+TEST_CASE("GetTosaMappingFromLayer_AvgPool2DLayer")
+{
+    IRuntime::CreationOptions options;
+    IRuntimePtr runtime(IRuntime::Create(options));
+
+    // Builds up the structure of the network.
+    INetworkPtr net(INetwork::Create());
+
+    Pooling2dDescriptor descriptor;
+    descriptor.m_PoolType = PoolingAlgorithm::Average;
+    descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2;
+    descriptor.m_StrideX = descriptor.m_StrideY = 2;
+    descriptor.m_PadLeft = 1;
+    descriptor.m_PadRight = 1;
+    descriptor.m_PadTop = 1;
+    descriptor.m_PadBottom = 1;
+    descriptor.m_PaddingMethod = PaddingMethod::Exclude;
+
+    IConnectableLayer* input0  = net->AddInputLayer(0, "input0");
+    IConnectableLayer* pool    = net->AddPooling2dLayer(descriptor, "pool");
+    IConnectableLayer* output  = net->AddOutputLayer(0, "output");
+
+    input0->GetOutputSlot(0).Connect(pool->GetInputSlot(0));
+    pool->GetOutputSlot(0).Connect(output->GetInputSlot(0));
+
+    TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32);
+    TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32);
+
+    std::vector<std::vector<int32_t>> inputShape  = {{ 1, 1, 4, 4 }};
+    std::vector<std::vector<int32_t>> outputShape = {{ 1, 1, 3, 3 }};
+
+    input0->GetOutputSlot(0).SetTensorInfo(inputTensorInfo);
+    pool->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
+
+    TosaSerializationBasicBlock* basicBlock =
+            GetTosaMappingFromLayer(PolymorphicDowncast<Layer*>(pool));
+    AssertTosaOneToOneMappingBasicBlock(basicBlock,
+                                        inputShape,
+                                        outputShape,
+                                        Op_AVG_POOL2D,
+                                        Attribute_PoolAttribute,
+                                        descriptor,
+                                        LayerType::Pooling2d);
+}
+
 TEST_CASE("GetTosaMapping_MaxPool2DLayer")
 {
     Pooling2dDescriptor descriptor;
@@ -241,80 +315,6 @@
         basicBlock, inputShape, outputShape, Op_MAX_POOL2D, Attribute_PoolAttribute, descriptor, LayerType::Pooling2d);
 }
 
-TEST_CASE("GetTosaMapping_AvgPool2DLayer")
-{
-    Pooling2dDescriptor descriptor;
-    descriptor.m_PoolType = PoolingAlgorithm::Average;
-    descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2;
-    descriptor.m_StrideX = descriptor.m_StrideY = 2;
-    descriptor.m_PadLeft = 1;
-    descriptor.m_PadRight = 1;
-    descriptor.m_PadTop = 1;
-    descriptor.m_PadBottom = 1;
-    descriptor.m_PaddingMethod = PaddingMethod::Exclude;
-
-    TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32);
-    TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32);
-
-    std::vector<std::vector<int32_t>> inputShape  = {{ 1, 1, 4, 4 }};
-    std::vector<std::vector<int32_t>> outputShape = {{ 1, 1, 3, 3 }};
-
-    TosaSerializationBasicBlock* basicBlock =
-        GetTosaMapping(nullptr, LayerType::Pooling2d, {&inputTensorInfo}, {&outputTensorInfo}, descriptor);
-    AssertTosaOneToOneMappingBasicBlock(basicBlock,
-                                        inputShape,
-                                        outputShape,
-                                        Op_AVG_POOL2D,
-                                        Attribute_PoolAttribute,
-                                        descriptor,
-                                        LayerType::Pooling2d);
-}
-
-TEST_CASE("GetTosaMappingFromLayer_AvgPool2DLayer")
-{
-    IRuntime::CreationOptions options;
-    IRuntimePtr runtime(IRuntime::Create(options));
-
-    // Builds up the structure of the network.
-    INetworkPtr net(INetwork::Create());
-
-    Pooling2dDescriptor descriptor;
-    descriptor.m_PoolType = PoolingAlgorithm::Average;
-    descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2;
-    descriptor.m_StrideX = descriptor.m_StrideY = 2;
-    descriptor.m_PadLeft = 1;
-    descriptor.m_PadRight = 1;
-    descriptor.m_PadTop = 1;
-    descriptor.m_PadBottom = 1;
-    descriptor.m_PaddingMethod = PaddingMethod::Exclude;
-
-    IConnectableLayer* input0  = net->AddInputLayer(0, "input0");
-    IConnectableLayer* pool    = net->AddPooling2dLayer(descriptor, "pool");
-    IConnectableLayer* output  = net->AddOutputLayer(0, "output");
-
-    input0->GetOutputSlot(0).Connect(pool->GetInputSlot(0));
-    pool->GetOutputSlot(0).Connect(output->GetInputSlot(0));
-
-    TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32);
-    TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32);
-
-    std::vector<std::vector<int32_t>> inputShape  = {{ 1, 1, 4, 4 }};
-    std::vector<std::vector<int32_t>> outputShape = {{ 1, 1, 3, 3 }};
-
-    input0->GetOutputSlot(0).SetTensorInfo(inputTensorInfo);
-    pool->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
-
-    TosaSerializationBasicBlock* basicBlock =
-        GetTosaMappingFromLayer(PolymorphicDowncast<Layer*>(pool));
-    AssertTosaOneToOneMappingBasicBlock(basicBlock,
-                                        inputShape,
-                                        outputShape,
-                                        Op_AVG_POOL2D,
-                                        Attribute_PoolAttribute,
-                                        descriptor,
-                                        LayerType::Pooling2d);
-}
-
 TEST_CASE("GetTosaMapping_ReshapeLayer")
 {
     TensorInfo inputInfo = TensorInfo({ 2, 3 }, DataType::Float32);
diff --git a/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
index 00c0386..49f2cb7 100644
--- a/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
+++ b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
@@ -45,22 +45,6 @@
     Convolution2dEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends, armnn::DataLayout::NHWC, false);
 }
 
-// Max Pool 2D
-TEST_CASE("TosaRefMaxPool2DEndtoEndTestFloat32")
-{
-    MaxPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends);
-}
-
-TEST_CASE("TosaRefMaxPool2DEndtoEndTestFloat16")
-{
-    MaxPool2dEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
-}
-
-TEST_CASE("TosaRefMaxPool2DIgnoreValueEndtoEndTestFloat32")
-{
-    MaxPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends, PaddingMethod::IgnoreValue);
-}
-
 // Average Pool 2D
 TEST_CASE("TosaRefAvgPool2DEndtoEndTestFloat32")
 {
@@ -77,6 +61,22 @@
     AvgPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends, PaddingMethod::IgnoreValue);
 }
 
+// Max Pool 2D
+TEST_CASE("TosaRefMaxPool2DEndtoEndTestFloat32")
+{
+    MaxPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefMaxPool2DEndtoEndTestFloat16")
+{
+    MaxPool2dEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefMaxPool2DIgnoreValueEndtoEndTestFloat32")
+{
+    MaxPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends, PaddingMethod::IgnoreValue);
+}
+
 // Reshape
 TEST_CASE("TosaRefReshapeEndtoEndTestFloat32")
 {
