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)
 {
