diff --git a/1.2/HalPolicy.cpp b/1.2/HalPolicy.cpp
index 3c00388..f93629e 100644
--- a/1.2/HalPolicy.cpp
+++ b/1.2/HalPolicy.cpp
@@ -6,6 +6,7 @@
 #include "HalPolicy.hpp"
 
 #include "OutputShapeUtils.hpp"
+#include "Utils.hpp"
 
 #include "../1.0/HalPolicy.hpp"
 #include "../1.1/HalPolicy.hpp"
@@ -270,7 +271,7 @@
     desc.m_BiasEnabled = true;
     armnn::Optional<armnn::TensorInfo> biases(bias.GetInfo());
 
-    if (IsDynamicOutput(outputInfo))
+    if (IsDynamicTensor(outputInfo))
     {
         try
         {
@@ -450,7 +451,7 @@
     armnn::Optional<armnn::TensorInfo> biases(bias.GetInfo());
 
     armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output);
-    if (IsDynamicOutput(outputInfo))
+    if (IsDynamicTensor(outputInfo))
     {
         try
         {
@@ -522,7 +523,7 @@
     }
 
     armnn::TensorInfo outInfo = GetTensorInfoForOperand(*outputOperand);
-    if (IsDynamicOutput(outInfo))
+    if (IsDynamicTensor(outInfo))
     {
         ALOGD("Output shape not set, will infer from inputs");
         outInfo.SetShape(InferMaximumOutputShape(input0.GetTensorInfo().GetShape(), input1.GetTensorInfo().GetShape()));
@@ -571,7 +572,7 @@
     }
 
     armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output);
-    if (IsDynamicOutput(outputInfo))
+    if (IsDynamicTensor(outputInfo))
     {
         ALOGD("Output shape not set, will infer from inputs");
         outputInfo.SetShape(InferMinimumOutputShape(input0.GetTensorInfo().GetShape(),
@@ -628,7 +629,7 @@
     }
 
     armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output);
-    if (IsDynamicOutput(outputInfo))
+    if (IsDynamicTensor(outputInfo))
     {
         ALOGD("Output shape not set, will infer from inputs");
         outputInfo.SetShape(InferPadOutputShape(inputInfo.GetShape(), descriptor.m_PadList));
@@ -726,7 +727,7 @@
     const armnn::TensorInfo& alphaInfo  = alpha.GetTensorInfo();
 
     armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output);
-    if (IsDynamicOutput(outputInfo))
+    if (IsDynamicTensor(outputInfo))
     {
         ALOGD("Output shape not set, will infer from inputs");
         outputInfo.SetShape(InferPreluOutputShape(inputInfo.GetShape(), alphaInfo.GetShape()));
@@ -848,7 +849,7 @@
         return false;
     }
 
-    if (IsDynamicOutput(outputInfo))
+    if (IsDynamicTensor(outputInfo))
     {
         try
         {
@@ -961,7 +962,7 @@
     }
 
     armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*outputOperand);
-    if (IsDynamicOutput(outputInfo))
+    if (IsDynamicTensor(outputInfo))
     {
         ALOGD("Output shape not set, will infer from input");
         outputInfo.SetShape(input.GetTensorInfo().GetShape());
