diff --git a/1.0/FullyConnected.hpp b/1.0/FullyConnected.hpp
new file mode 100644
index 0000000..0fb029d
--- /dev/null
+++ b/1.0/FullyConnected.hpp
@@ -0,0 +1,42 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/Tensor.hpp>
+
+#include "../ConversionUtils.hpp"
+
+namespace armnn_driver
+{
+
+inline armnn::TensorShape FlattenFullyConnectedInput(const armnn::TensorShape &inputShape,
+                                                     const armnn::TensorShape &weightsShape)
+{
+    if (inputShape.GetNumDimensions() > 2U)
+    {
+        unsigned int dim0 = inputShape[0];
+        unsigned int dim1 = inputShape[1];
+
+        for (unsigned int i = 2U; i < inputShape.GetNumDimensions(); ++i)
+        {
+            dim1 *= inputShape[i];
+        }
+
+        unsigned int divisor = weightsShape[1] / dim1;
+        if(dim0 % divisor != 0)
+        {
+            throw std::runtime_error("Failed to deduce tensor shape");
+        }
+
+        return armnn::TensorShape({dim0 / divisor, dim1 * divisor});
+    }
+    else
+    {
+        return inputShape;
+    }
+}
+
+}
\ No newline at end of file
diff --git a/1.0/HalPolicy.cpp b/1.0/HalPolicy.cpp
index dee4a7a..158f0e3 100644
--- a/1.0/HalPolicy.cpp
+++ b/1.0/HalPolicy.cpp
@@ -5,7 +5,9 @@
 
 #include "HalPolicy.hpp"
 
-#include "armnn/Optional.hpp"
+#include <armnn/Optional.hpp>
+
+#include "FullyConnected.hpp"
 
 namespace armnn_driver
 {
@@ -633,25 +635,13 @@
 
     armnn::ConstTensor weights = weightsPin.GetConstTensor();
     armnn::ConstTensor bias    = biasPin.GetConstTensor();
-
     armnn::TensorInfo reshapedInfo = inputInfo;
-    if (inputInfo.GetNumDimensions() > 2U)
+
+    try
     {
-        unsigned int dim0 = inputInfo.GetShape()[0];
-        unsigned int dim1 = inputInfo.GetShape()[1];
-
-        for (unsigned int i = 2U; i < inputInfo.GetNumDimensions(); ++i)
-        {
-            dim1 *= inputInfo.GetShape()[i];
-        }
-
-        unsigned int divisor = weights.GetInfo().GetShape()[1] / dim1;
-        if(dim0 % divisor != 0)
-        {
-            return Fail("%s: Failed to deduce tensor shape", __func__);
-        }
-
-        reshapedInfo.SetShape(armnn::TensorShape({dim0 / divisor, dim1 * divisor}));
+        reshapedInfo.SetShape(FlattenFullyConnectedInput(inputInfo.GetShape(), weights.GetInfo().GetShape()));
+    } catch (const std::exception &e) {
+        return Fail("%s: %s", __func__, e.what());
     }
 
     // ensuring that the bias value is within 1% of the weights input (small float differences can exist)
diff --git a/test/1.0/FullyConnectedReshape.cpp b/test/1.0/FullyConnectedReshape.cpp
new file mode 100644
index 0000000..250f883
--- /dev/null
+++ b/test/1.0/FullyConnectedReshape.cpp
@@ -0,0 +1,20 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "../DriverTestHelpers.hpp"
+#include "../../1.0/FullyConnected.hpp"
+
+#include <boost/test/unit_test.hpp>
+
+BOOST_AUTO_TEST_SUITE(FullyConnectedReshapeTests)
+
+BOOST_AUTO_TEST_CASE(TestFlattenFullyConnectedInput)
+{
+    using armnn::TensorShape;
+    BOOST_TEST(FlattenFullyConnectedInput(TensorShape({97,1,1,2048}), TensorShape({512, 2048})) ==
+               TensorShape({97, 2048}));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/Android.mk b/test/Android.mk
index da3ac70..87f0b63 100644
--- a/test/Android.mk
+++ b/test/Android.mk
@@ -45,6 +45,7 @@
 
 LOCAL_SRC_FILES := \
         1.0/Convolution2D.cpp \
+        1.0/FullyConnectedReshape.cpp \
         Tests.cpp \
         UtilsTests.cpp \
         Concurrent.cpp \
