diff --git a/Android.mk b/Android.mk
index f767b20..9be1b59 100644
--- a/Android.mk
+++ b/Android.mk
@@ -173,6 +173,7 @@
         src/armnn/layers/L2NormalizationLayer.cpp \
         src/armnn/layers/LogSoftmaxLayer.cpp \
         src/armnn/layers/LstmLayer.cpp \
+        src/armnn/layers/MapLayer.cpp \
         src/armnn/layers/MaximumLayer.cpp \
         src/armnn/layers/MeanLayer.cpp \
         src/armnn/layers/MemCopyLayer.cpp \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 592a77d..c1c3af8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -314,6 +314,8 @@
     src/armnn/layers/LogSoftmaxLayer.cpp
     src/armnn/layers/LstmLayer.cpp
     src/armnn/layers/LstmLayer.hpp
+    src/armnn/layers/MapLayer.cpp
+    src/armnn/layers/MapLayer.hpp
     src/armnn/layers/MaximumLayer.cpp
     src/armnn/layers/MaximumLayer.hpp
     src/armnn/layers/MeanLayer.hpp
diff --git a/src/armnn/InternalTypes.hpp b/src/armnn/InternalTypes.hpp
index fc35d35..e95a63a 100644
--- a/src/armnn/InternalTypes.hpp
+++ b/src/armnn/InternalTypes.hpp
@@ -43,6 +43,7 @@
     X(LogSoftmax) \
     X(Lstm) \
     X(QLstm) \
+    X(Map) \
     X(Maximum) \
     X(Mean) \
     X(MemCopy) \
diff --git a/src/armnn/LayersFwd.hpp b/src/armnn/LayersFwd.hpp
index fda00df..f22110d 100644
--- a/src/armnn/LayersFwd.hpp
+++ b/src/armnn/LayersFwd.hpp
@@ -36,6 +36,7 @@
 #include "layers/L2NormalizationLayer.hpp"
 #include "layers/LogSoftmaxLayer.hpp"
 #include "layers/LstmLayer.hpp"
+#include "layers/MapLayer.hpp"
 #include "layers/MaximumLayer.hpp"
 #include "layers/MeanLayer.hpp"
 #include "layers/MemCopyLayer.hpp"
@@ -126,6 +127,7 @@
 DECLARE_LAYER(L2Normalization)
 DECLARE_LAYER(LogSoftmax)
 DECLARE_LAYER(Lstm)
+DECLARE_LAYER(Map)
 DECLARE_LAYER(Maximum)
 DECLARE_LAYER(Mean)
 DECLARE_LAYER(MemCopy)
diff --git a/src/armnn/layers/MapLayer.cpp b/src/armnn/layers/MapLayer.cpp
new file mode 100644
index 0000000..bc6cbf1
--- /dev/null
+++ b/src/armnn/layers/MapLayer.cpp
@@ -0,0 +1,49 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#include "MapLayer.hpp"
+
+#include "LayerCloneBase.hpp"
+
+#include <armnn/TypesUtils.hpp>
+#include <backendsCommon/WorkloadData.hpp>
+#include <backendsCommon/WorkloadFactory.hpp>
+#include <backendsCommon/MapWorkload.hpp>
+
+namespace armnn
+{
+
+MapLayer::MapLayer(const char* name)
+    : Layer(1, 0, LayerType::Map, name)
+{
+}
+
+MapLayer* MapLayer::Clone(Graph& graph) const
+{
+    return CloneBase<MapLayer>(graph, GetName());
+}
+
+std::unique_ptr<IWorkload> MapLayer::CreateWorkload(const IWorkloadFactory& factory) const
+{
+    IgnoreUnused(factory);
+    MapQueueDescriptor descriptor;
+
+    //This is different from other workloads. Does not get created by the workload factory.
+    return std::make_unique<MapWorkload>(descriptor, PrepInfoAndDesc(descriptor));
+}
+
+void MapLayer::ValidateTensorShapesFromInputs()
+{
+    // validates that the input is connected.
+    VerifyLayerConnections(1, CHECK_LOCATION());
+    ARMNN_ASSERT(GetNumOutputSlots() == 0);
+}
+
+void MapLayer::Accept(ILayerVisitor& visitor) const
+{
+    IgnoreUnused(visitor);
+    throw armnn::Exception("MapLayer should not appear in an input graph");
+}
+
+} // namespace armnn
diff --git a/src/armnn/layers/MapLayer.hpp b/src/armnn/layers/MapLayer.hpp
new file mode 100644
index 0000000..620caf7
--- /dev/null
+++ b/src/armnn/layers/MapLayer.hpp
@@ -0,0 +1,42 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <Layer.hpp>
+
+namespace armnn
+{
+
+/// This layer represents a memory copy operation.
+class MapLayer : public Layer
+{
+public:
+    /// Makes a workload for the Map type.
+    /// @param [in] graph The graph where this layer can be found.
+    /// @param [in] factory The workload factory which will create the workload.
+    /// @return A pointer to the created workload, or nullptr if not created.
+    virtual std::unique_ptr<IWorkload>CreateWorkload(const IWorkloadFactory& factory) const override;
+
+    /// Creates a dynamically-allocated copy of this layer.
+    /// @param [in] graph The graph into which this layer is being cloned.
+    MapLayer* Clone(Graph& graph) const override;
+
+    /// Check if the input tensor shape(s)
+    /// will lead to a valid configuration of @ref MapLayer.
+    /// @param [in] shapeInferenceMethod Indicates if output shape shall be overwritten or just validated.
+    void ValidateTensorShapesFromInputs() override;
+
+    void Accept(ILayerVisitor& visitor) const override;
+
+protected:
+    /// Constructor to create a MapLayer.
+    /// @param [in] name Optional name for the layer.
+    MapLayer(const char* name);
+
+    /// Default destructor
+    ~MapLayer() = default;
+};
+
+} // namespace
diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt
index cec56f1..28b3088 100644
--- a/src/backends/backendsCommon/CMakeLists.txt
+++ b/src/backends/backendsCommon/CMakeLists.txt
@@ -22,6 +22,8 @@
     LayerSupportBase.hpp
     LayerSupportRules.hpp
     MakeWorkloadHelper.hpp
+    MapWorkload.cpp
+    MapWorkload.hpp
     MemCopyWorkload.cpp
     MemCopyWorkload.hpp
     MemImportWorkload.cpp
diff --git a/src/backends/backendsCommon/MapWorkload.cpp b/src/backends/backendsCommon/MapWorkload.cpp
new file mode 100644
index 0000000..99dd43e
--- /dev/null
+++ b/src/backends/backendsCommon/MapWorkload.cpp
@@ -0,0 +1,22 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <backendsCommon/MapWorkload.hpp>
+
+namespace armnn
+{
+
+MapWorkload::MapWorkload(const MapQueueDescriptor& descriptor,
+                         const WorkloadInfo& info)
+    : BaseWorkload<MapQueueDescriptor>(descriptor, info)
+{
+}
+
+void MapWorkload::Execute() const
+{
+    m_Data.m_Inputs[0]->Map();
+}
+
+} //namespace armnn
diff --git a/src/backends/backendsCommon/MapWorkload.hpp b/src/backends/backendsCommon/MapWorkload.hpp
new file mode 100644
index 0000000..dbbf36a
--- /dev/null
+++ b/src/backends/backendsCommon/MapWorkload.hpp
@@ -0,0 +1,19 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include "Workload.hpp"
+
+namespace armnn
+{
+
+class MapWorkload : public BaseWorkload<MapQueueDescriptor>
+{
+public:
+    MapWorkload(const MapQueueDescriptor& descriptor, const WorkloadInfo& info);
+    void Execute() const override;
+};
+
+} //namespace armnn
diff --git a/src/backends/backendsCommon/WorkloadData.cpp b/src/backends/backendsCommon/WorkloadData.cpp
index e9023b6..1344959 100644
--- a/src/backends/backendsCommon/WorkloadData.cpp
+++ b/src/backends/backendsCommon/WorkloadData.cpp
@@ -464,6 +464,24 @@
 }
 
 //---------------------------------------------------------------
+void MapQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const
+{
+    const std::string descriptorName{"MapQueueDescriptor"};
+
+    ValidateNumInputs(workloadInfo,  descriptorName, 1);
+    ValidateNumOutputs(workloadInfo, descriptorName , 0);
+
+    for (unsigned int i = 0; i < m_Inputs.size(); ++i)
+    {
+        if (!m_Inputs[i])
+        {
+            throw InvalidArgumentException(
+                fmt::format("{}: Invalid NULL input {}.", descriptorName, static_cast<int>(i)));
+        }
+    }
+}
+
+//---------------------------------------------------------------
 void MemCopyQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const
 {
     const std::string descriptorName{"MemCopyQueueDescriptor"};
diff --git a/src/backends/backendsCommon/WorkloadData.hpp b/src/backends/backendsCommon/WorkloadData.hpp
index 1f54f9a..be0a67e 100644
--- a/src/backends/backendsCommon/WorkloadData.hpp
+++ b/src/backends/backendsCommon/WorkloadData.hpp
@@ -55,6 +55,11 @@
     QueueDescriptorWithParameters& operator=(QueueDescriptorWithParameters const&) = default;
 };
 
+struct MapQueueDescriptor : QueueDescriptor
+{
+    void Validate(const WorkloadInfo& workloadInfo) const;
+};
+
 struct MemCopyQueueDescriptor : QueueDescriptor
 {
     void Validate(const WorkloadInfo& workloadInfo) const;
diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk
index 7829abb..ceec2ac 100644
--- a/src/backends/backendsCommon/common.mk
+++ b/src/backends/backendsCommon/common.mk
@@ -14,6 +14,7 @@
     IBackendInternal.cpp \
     ITensorHandleFactory.cpp \
     LayerSupportBase.cpp \
+    MapWorkload.cpp \
     MemCopyWorkload.cpp \
     MemImportWorkload.cpp \
     MemSyncWorkload.cpp \
diff --git a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
index ed4b6ff..1078c2a 100644
--- a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
+++ b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
@@ -6,6 +6,7 @@
 
 #include <Graph.hpp>
 
+#include <backendsCommon/MapWorkload.hpp>
 #include <backendsCommon/WorkloadFactory.hpp>
 
 #include <armnn/utility/IgnoreUnused.hpp>
@@ -165,6 +166,22 @@
 };
 
 template<>
+struct DummyLayer<armnn::MapLayer, void>
+{
+    DummyLayer()
+    {
+        m_Layer = dummyGraph.AddLayer<armnn::MapLayer>("");
+    }
+
+    ~DummyLayer()
+    {
+        dummyGraph.EraseLayer(m_Layer);
+    }
+
+    armnn::MapLayer* m_Layer;
+};
+
+template<>
 struct DummyLayer<armnn::OutputLayer, armnn::LayerBindingId>
 {
     DummyLayer()
@@ -467,6 +484,27 @@
     } \
 };
 
+#define DECLARE_LAYER_POLICY_MAP_PARAM(name, descType) \
+template<armnn::DataType DataType> \
+struct LayerTypePolicy<armnn::LayerType::name, DataType> \
+{ \
+    using Type = armnn::name##Layer; \
+    using Desc = descType; \
+    using QueueDesc = armnn::name##QueueDescriptor; \
+    using Workload = armnn::name##Workload; \
+    constexpr static const char* NameStr = #name; \
+    constexpr static const bool IsException = false; \
+    \
+    static std::unique_ptr<armnn::IWorkload> MakeDummyWorkload(armnn::IWorkloadFactory* factory, \
+        unsigned int nIn, unsigned int nOut) \
+    { \
+        IgnoreUnused(factory); \
+        QueueDesc desc; \
+        armnn::WorkloadInfo info = MakeDummyWorkloadInfo<DataType>(nIn, nOut); \
+        return std::make_unique<armnn::name##Workload>(desc, info); \
+    } \
+};
+
 // Define a layer policy specialization for use with the IsLayerSupported tests.
 // Use this version for layers whose constructor takes 1 parameter(name).
 #define DECLARE_LAYER_POLICY_1_PARAM(name) DECLARE_LAYER_POLICY_CUSTOM_PARAM(name, void)
@@ -563,6 +601,8 @@
 
 DECLARE_LAYER_POLICY_2_PARAM(Lstm)
 
+DECLARE_LAYER_POLICY_MAP_PARAM(Map, void)
+
 DECLARE_LAYER_POLICY_1_PARAM(Maximum)
 
 DECLARE_LAYER_POLICY_2_PARAM(Mean)
@@ -751,6 +791,13 @@
     }
 }
 
+template<typename FactoryType, armnn::DataType DataType, armnn::LayerType Type>
+bool IsLayerSupportedTest(FactoryType *factory, Tag<armnn::LayerType::Map>)
+{
+    IgnoreUnused(factory);
+    return true;
+}
+
 // Helper function to compute the next type in the LayerType enum.
 constexpr armnn::LayerType NextType(armnn::LayerType type)
 {
