diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91a0a0a..edf35ab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -549,6 +549,7 @@
              src/armnnTfLiteParser/test/DepthwiseConvolution2D.cpp
              src/armnnTfLiteParser/test/DetectionPostProcess.cpp
              src/armnnTfLiteParser/test/FullyConnected.cpp
+             src/armnnTfLiteParser/test/Maximum.cpp
              src/armnnTfLiteParser/test/MaxPool2D.cpp
              src/armnnTfLiteParser/test/Mean.cpp
              src/armnnTfLiteParser/test/Multiplication.cpp
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp
index e19edc3..80b6d99 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -427,6 +427,7 @@
     m_ParserFunctions[tflite::BuiltinOperator_FULLY_CONNECTED]   =  &TfLiteParser::ParseFullyConnected;
     m_ParserFunctions[tflite::BuiltinOperator_LOGISTIC]          =  &TfLiteParser::ParseLogistic;
     m_ParserFunctions[tflite::BuiltinOperator_MAX_POOL_2D]       =  &TfLiteParser::ParseMaxPool2D;
+    m_ParserFunctions[tflite::BuiltinOperator_MAXIMUM]           =  &TfLiteParser::ParseMaximum;
     m_ParserFunctions[tflite::BuiltinOperator_RELU]              =  &TfLiteParser::ParseRelu;
     m_ParserFunctions[tflite::BuiltinOperator_RELU6]             =  &TfLiteParser::ParseRelu6;
     m_ParserFunctions[tflite::BuiltinOperator_RESHAPE]           =  &TfLiteParser::ParseReshape;
@@ -891,6 +892,39 @@
     ParsePool(subgraphIndex, operatorIndex, PoolingAlgorithm::Max);
 }
 
+void TfLiteParser::ParseMaximum(size_t subgraphIndex, size_t operatorIndex)
+{
+    CHECK_MODEL(m_Model, subgraphIndex, operatorIndex);
+
+    auto inputs = GetInputs(m_Model, subgraphIndex, operatorIndex);
+    CHECK_VALID_SIZE(inputs.size(), 2);
+
+    auto outputs = GetOutputs(m_Model, subgraphIndex, operatorIndex);
+    CHECK_VALID_SIZE(outputs.size(), 1);
+
+    armnn::TensorInfo inputTensorInfo  = ToTensorInfo(inputs[0]);
+    armnn::TensorInfo input1TensorInfo = ToTensorInfo(inputs[1]);
+
+    auto layerName = boost::str(boost::format("Maximum:%1%:%2%") % subgraphIndex % operatorIndex);
+    IConnectableLayer* layer = m_Network->AddMaximumLayer(layerName.c_str());
+
+    TensorInfo outputTensorInfo = ToTensorInfo(outputs[0]);
+    layer->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
+
+    auto inputTensorIndexes = AsUnsignedVector(GetInputTensorIds(m_Model, subgraphIndex, operatorIndex));
+    if (inputTensorInfo.GetNumDimensions() != input1TensorInfo.GetNumDimensions())
+    {
+        AddBroadcastReshapeLayer(subgraphIndex, operatorIndex, layer);
+    }
+    else
+    {
+        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});
+    }
+
+    auto outputTensorIndexes = AsUnsignedVector(GetOutputTensorIds(m_Model, subgraphIndex, operatorIndex));
+    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});
+}
+
 void TfLiteParser::ParsePool(size_t subgraphIndex,
                              size_t operatorIndex,
                              PoolingAlgorithm algorithm)
diff --git a/src/armnnTfLiteParser/TfLiteParser.hpp b/src/armnnTfLiteParser/TfLiteParser.hpp
index e074b76..1e09e72 100644
--- a/src/armnnTfLiteParser/TfLiteParser.hpp
+++ b/src/armnnTfLiteParser/TfLiteParser.hpp
@@ -100,6 +100,7 @@
     void ParseFullyConnected(size_t subgraphIndex, size_t operatorIndex);
     void ParseLogistic(size_t subgraphIndex, size_t operatorIndex);
     void ParseMaxPool2D(size_t subgraphIndex, size_t operatorIndex);
+    void ParseMaximum(size_t subgraphIndex, size_t operatorIndex);
     void ParseRelu(size_t subgraphIndex, size_t operatorIndex);
     void ParseRelu6(size_t subgraphIndex, size_t operatorIndex);
     void ParseReshape(size_t subgraphIndex, size_t operatorIndex);
diff --git a/src/armnnTfLiteParser/test/Maximum.cpp b/src/armnnTfLiteParser/test/Maximum.cpp
new file mode 100644
index 0000000..56a1ecf
--- /dev/null
+++ b/src/armnnTfLiteParser/test/Maximum.cpp
@@ -0,0 +1,175 @@
+//
+// 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>
+
+BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
+
+struct MaximumFixture : public ParserFlatbuffersFixture
+{
+    explicit MaximumFixture(const std::string & inputShape1,
+                            const std::string & inputShape2,
+                            const std::string & outputShape)
+    {
+        m_JsonString = R"(
+            {
+                "version": 3,
+                "operator_codes": [ { "builtin_code": "MAXIMUM" } ],
+                "subgraphs": [ {
+                    "tensors": [
+                        {
+                            "shape": )" + inputShape1 + R"(,
+                            "type": "FLOAT32",
+                            "buffer": 0,
+                            "name": "inputTensor1",
+                            "quantization": {
+                                "min": [ 0.0 ],
+                                "max": [ 255.0 ],
+                                "scale": [ 1.0 ],
+                                "zero_point": [ 0 ],
+                            }
+                        },
+                        {
+                            "shape": )" + inputShape2 + R"(,
+                            "type": "FLOAT32",
+                            "buffer": 1,
+                            "name": "inputTensor2",
+                            "quantization": {
+                                "min": [ 0.0 ],
+                                "max": [ 255.0 ],
+                                "scale": [ 1.0 ],
+                                "zero_point": [ 0 ],
+                            }
+                        },
+                        {
+                            "shape": )" + outputShape + R"( ,
+                            "type": "FLOAT32",
+                            "buffer": 2,
+                            "name": "outputTensor",
+                            "quantization": {
+                                "min": [ 0.0 ],
+                                "max": [ 255.0 ],
+                                "scale": [ 1.0 ],
+                                "zero_point": [ 0 ],
+                            }
+                        }
+                    ],
+                    "inputs": [ 0, 1 ],
+                    "outputs": [ 2 ],
+                    "operators": [
+                        {
+                            "opcode_index": 0,
+                            "inputs": [ 0, 1 ],
+                            "outputs": [ 2 ],
+                            "custom_options_format": "FLEXBUFFERS"
+                        }
+                    ],
+                } ],
+                "buffers" : [
+                    { },
+                    { }
+                ]
+            }
+        )";
+        Setup();
+    }
+};
+
+
+struct MaximumFixture4D4D : MaximumFixture
+{
+    MaximumFixture4D4D() : MaximumFixture("[ 1, 2, 2, 3 ]",
+                                          "[ 1, 2, 2, 3 ]",
+                                          "[ 1, 2, 2, 3 ]") {}
+};
+
+BOOST_FIXTURE_TEST_CASE(ParseMaximum4D4D, MaximumFixture4D4D)
+{
+  RunTest<4, armnn::DataType::Float32>(
+      0,
+      {{"inputTensor1", { 0.0f, 1.0f, 2.0f,
+                          3.0f, 4.0f, 5.0f,
+                          6.0f, 7.0f, 8.0f,
+                          9.0f, 10.0f, 11.0f }},
+      {"inputTensor2",  { 5.0f, 1.0f, 3.0f,
+                          4.0f, 5.5f, 1.0f,
+                          2.0f, 17.0f, 18.0f,
+                          19.0f, 1.0f, 3.0f }}},
+      {{"outputTensor", { 5.0f,  1.0f, 3.0f,
+                          4.0f,  5.5f, 5.0f,
+                          6.0f,  17.0f, 18.0f,
+                          19.0f, 10.0f, 11.0f }}});
+}
+
+struct MaximumBroadcastFixture4D4D : MaximumFixture
+{
+    MaximumBroadcastFixture4D4D() : MaximumFixture("[ 1, 1, 2, 1 ]",
+                                                   "[ 1, 2, 1, 3 ]",
+                                                   "[ 1, 2, 2, 3 ]") {}
+};
+
+BOOST_FIXTURE_TEST_CASE(ParseMaximumBroadcast4D4D, MaximumBroadcastFixture4D4D)
+{
+  RunTest<4, armnn::DataType::Float32>(
+      0,
+      {{"inputTensor1", { 2.0f, 4.0f }},
+      {"inputTensor2",  { 1.0f, 2.0f, 3.0f,
+                          4.0f, 5.0f, 6.0f }}},
+      {{"outputTensor", { 2.0f, 2.0f, 3.0f,
+                          4.0f, 4.0f, 4.0f,
+                          4.0f, 5.0f, 6.0f,
+                          4.0f, 5.0f, 6.0f }}});
+}
+
+struct MaximumBroadcastFixture4D1D : MaximumFixture
+{
+    MaximumBroadcastFixture4D1D() : MaximumFixture("[ 1, 2, 2, 3 ]",
+                                                   "[ 1 ]",
+                                                   "[ 1, 2, 2, 3 ]") {}
+};
+
+BOOST_FIXTURE_TEST_CASE(ParseMaximumBroadcast4D1D, MaximumBroadcastFixture4D1D)
+{
+  RunTest<4, armnn::DataType::Float32>(
+      0,
+      {{"inputTensor1", { 0.0f, 1.0f, 2.0f,
+                          3.0f, 4.0f, 5.0f,
+                          6.0f, 7.0f, 8.0f,
+                          9.0f, 10.0f, 11.0f }},
+      {"inputTensor2",  { 5.0f }}},
+      {{"outputTensor", { 5.0f, 5.0f, 5.0f,
+                          5.0f, 5.0f, 5.0f,
+                          6.0f, 7.0f, 8.0f,
+                          9.0f, 10.0f, 11.0f }}});
+}
+
+struct MaximumBroadcastFixture1D4D : MaximumFixture
+{
+    MaximumBroadcastFixture1D4D() : MaximumFixture("[ 1 ]",
+                                                   "[ 1, 2, 2, 3 ]",
+                                                   "[ 1, 2, 2, 3 ]") {}
+};
+
+BOOST_FIXTURE_TEST_CASE(ParseMaximumBroadcast1D4D, MaximumBroadcastFixture1D4D)
+{
+  RunTest<4, armnn::DataType::Float32>(
+      0,
+      {{"inputTensor1", { 3.0f }},
+      {"inputTensor2",  { 0.0f, 1.0f, 2.0f,
+                          3.0f, 4.0f, 5.0f,
+                          6.0f, 7.0f, 8.0f,
+                          9.0f, 10.0f, 11.0f }}},
+      {{"outputTensor", { 3.0f, 3.0f, 3.0f,
+                          3.0f, 4.0f, 5.0f,
+                          6.0f, 7.0f, 8.0f,
+                          9.0f, 10.0f, 11.0f }}});
+}
+
+BOOST_AUTO_TEST_SUITE_END()
