diff --git a/CMakeLists.txt b/CMakeLists.txt
index a12d6b4..e8f9c46 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -453,6 +453,7 @@
              src/armnnTfLiteParser/test/Addition.cpp
              src/armnnTfLiteParser/test/AvgPool2D.cpp
              src/armnnTfLiteParser/test/Concatenation.cpp
+             src/armnnTfLiteParser/test/Constant.cpp
              src/armnnTfLiteParser/test/Conv2D.cpp
              src/armnnTfLiteParser/test/DepthwiseConvolution2D.cpp
              src/armnnTfLiteParser/test/FullyConnected.cpp
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp
index 8b2a818..83f6950 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -588,6 +588,7 @@
 
         SetupInputLayers(subgraphIndex);
         SetupOutputLayers(subgraphIndex);
+        SetupConstantLayers(subgraphIndex);
 
         ++subgraphIndex;
     }
@@ -1742,6 +1743,39 @@
     }
 }
 
+void TfLiteParser::SetupConstantLayers(size_t subgraphIndex)
+{
+    CHECK_SUBGRAPH(m_Model, subgraphIndex);
+
+    const auto & subGraphPtr = m_Model->subgraphs[subgraphIndex];
+    for (unsigned int subgraphIndex = 0; subgraphIndex < m_SubgraphConnections.size(); ++subgraphIndex)
+    {
+        for (unsigned int tensorIndex = 0; tensorIndex < m_SubgraphConnections[subgraphIndex].size(); ++tensorIndex)
+        {
+            if (m_SubgraphConnections[subgraphIndex][tensorIndex].outputSlot == nullptr &&
+                m_SubgraphConnections[subgraphIndex][tensorIndex].inputSlots.size() > 0)
+            {
+                TensorRawPtr tensorPtr = subGraphPtr->tensors[tensorIndex].get();
+                armnn::TensorInfo tensorInfo = ToTensorInfo(tensorPtr);
+                auto tensorAndData = CreateConstTensor(tensorPtr,
+                                                       tensorInfo,
+                                                       armnn::Optional<armnn::PermutationVector&>());
+
+                std::string layerName = boost::str(boost::format("Constant:%1%") % tensorPtr->name);
+                IConnectableLayer *layer =
+                    m_Network->AddConstantLayer(tensorAndData.first, layerName.c_str());
+
+                layer->GetOutputSlot(0).SetTensorInfo(tensorInfo);
+                RegisterOutputSlots(subgraphIndex,
+                                    VIRTUAL_OPERATOR_ID,
+                                    layer,
+                                    { tensorIndex });
+
+            }
+        }
+    }
+}
+
 // example usage: BufferRawPtr bufferPtr = GetBuffer(m_Model, inputs[0]->buffer);
 TfLiteParser::BufferRawPtr TfLiteParser::GetBuffer(const ModelPtr& model, size_t bufferIndex)
 {
diff --git a/src/armnnTfLiteParser/TfLiteParser.hpp b/src/armnnTfLiteParser/TfLiteParser.hpp
index 594f9e7..1ca00b9 100644
--- a/src/armnnTfLiteParser/TfLiteParser.hpp
+++ b/src/armnnTfLiteParser/TfLiteParser.hpp
@@ -123,6 +123,7 @@
 
     void SetupInputLayers(size_t subgraphIndex);
     void SetupOutputLayers(size_t subgraphIndex);
+    void SetupConstantLayers(size_t subgraphIndex);
 
     void ResetParser();
 
diff --git a/src/armnnTfLiteParser/test/Constant.cpp b/src/armnnTfLiteParser/test/Constant.cpp
new file mode 100644
index 0000000..356e1b7
--- /dev/null
+++ b/src/armnnTfLiteParser/test/Constant.cpp
@@ -0,0 +1,113 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <boost/test/unit_test.hpp>
+#include "ParserFlatbuffersFixture.hpp"
+#include "../TfLiteParser.hpp"
+
+#include <string>
+#include <iostream>
+
+using armnnTfLiteParser::TfLiteParser;
+
+BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
+
+struct ConstantAddFixture : public ParserFlatbuffersFixture
+{
+    explicit ConstantAddFixture(const std::string & inputShape,
+                                const std::string & outputShape,
+                                const std::string & constShape,
+                                const std::string & constData)
+    {
+        m_JsonString = R"(
+            {
+                "version": 3,
+                "operator_codes": [ { "builtin_code": "ADD" } ],
+                "subgraphs": [ {
+                    "tensors": [
+                        {
+                            "shape": )" + constShape + R"( ,
+                            "type": "UINT8",
+                            "buffer": 3,
+                            "name": "ConstTensor",
+                            "quantization": {
+                                "min": [ 0.0 ],
+                                "max": [ 255.0 ],
+                                "scale": [ 1.0 ],
+                                "zero_point": [ 0 ],
+                            }
+                        },
+                        {
+                            "shape": )" + inputShape + R"(,
+                            "type": "UINT8",
+                            "buffer": 1,
+                            "name": "InputTensor",
+                            "quantization": {
+                                "min": [ 0.0 ],
+                                "max": [ 255.0 ],
+                                "scale": [ 1.0 ],
+                                "zero_point": [ 0 ],
+                            }
+                        },
+                        {
+                            "shape": )" + outputShape + R"( ,
+                            "type": "UINT8",
+                            "buffer": 2,
+                            "name": "OutputTensor",
+                            "quantization": {
+                                "min": [ 0.0 ],
+                                "max": [ 255.0 ],
+                                "scale": [ 1.0 ],
+                                "zero_point": [ 0 ],
+                            }
+                        }
+                    ],
+                "inputs": [ 1 ],
+                "outputs": [ 2 ],
+                "operators": [
+                    {
+                        "opcode_index": 0,
+                        "inputs": [ 1, 0 ],
+                        "outputs": [ 2 ],
+                        "builtin_options_type": "AddOptions",
+                        "builtin_options": {
+                        },
+                        "custom_options_format": "FLEXBUFFERS"
+                    }
+                ],
+              } ],
+              "buffers" : [
+                  { },
+                  { },
+                  { },
+                  { "data": )" + constData + R"(, },
+              ]
+            }
+      )";
+      Setup();
+    }
+};
+
+
+struct SimpleConstantAddFixture : ConstantAddFixture
+{
+    SimpleConstantAddFixture()
+        : ConstantAddFixture("[ 2, 2 ]",        // inputShape
+                             "[ 2, 2 ]",        // outputShape
+                             "[ 2, 2 ]",        // constShape
+                             "[  4,5, 6,7 ]")   // constData
+    {}
+};
+
+BOOST_FIXTURE_TEST_CASE(SimpleConstantAdd, SimpleConstantAddFixture)
+{
+    RunTest<2, armnn::DataType::QuantisedAsymm8>(
+                0,
+                {{"InputTensor", { 0, 1, 2, 3 }}},
+                {{"OutputTensor", { 4, 6, 8, 10 }}}
+                );
+}
+
+BOOST_AUTO_TEST_SUITE_END()
