diff --git a/ConversionUtils.hpp b/ConversionUtils.hpp
index 6f1f100..fabf189 100644
--- a/ConversionUtils.hpp
+++ b/ConversionUtils.hpp
@@ -1388,7 +1388,7 @@
     LayerInputHandle input = ConvertToLayerInputHandle<HalPolicy>(operation, 0, model, data);
     if (!input.IsValid())
     {
-        return Fail("%s: Could not read input 0", operationName);
+        return Fail("%s: Operation Could not read input 0", operationName);
     }
 
     const HalOperand* output = GetOutputOperand<HalPolicy>(operation, 0, model);
@@ -1449,16 +1449,17 @@
             return Fail("%s: Operation has invalid inputs", operationName);
         }
 
-        const unsigned int inputWidth  = inputInfo.GetShape()[2];
-        const unsigned int inputHeight = inputInfo.GetShape()[1];
-
-        CalcPadding(inputWidth, desc.m_PoolWidth, desc.m_StrideX, desc.m_PadLeft, desc.m_PadRight, scheme);
-        CalcPadding(inputHeight, desc.m_PoolHeight, desc.m_StrideY, desc.m_PadTop, desc.m_PadBottom, scheme);
-
         if (Is12Operand(*output))
         {
             desc.m_DataLayout = OptionalDataLayout<HalPolicy>(operation, 7, model, data);
         }
+
+        const armnnUtils::DataLayoutIndexed dataLayout(desc.m_DataLayout);
+        const unsigned int inputWidth  = inputInfo.GetShape()[dataLayout.GetWidthIndex()];
+        const unsigned int inputHeight = inputInfo.GetShape()[dataLayout.GetHeightIndex()];
+
+        CalcPadding(inputWidth, desc.m_PoolWidth, desc.m_StrideX, desc.m_PadLeft, desc.m_PadRight, scheme);
+        CalcPadding(inputHeight, desc.m_PoolHeight, desc.m_StrideY, desc.m_PadTop, desc.m_PadBottom, scheme);
     }
 
     bool isSupported = false;
