diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index 47c998a..c1416f9 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -16,6 +16,7 @@
 #include <iostream>
 
 #include <boost/polymorphic_cast.hpp>
+#include <backends/BackendProfiling.hpp>
 
 using namespace armnn;
 using namespace std;
@@ -181,6 +182,19 @@
                 m_BackendContexts.emplace(std::make_pair(id, std::move(context)));
             }
             supportedBackends.emplace(id);
+
+            unique_ptr<armnn::profiling::IBackendProfiling> profilingIface =
+                std::make_unique<armnn::profiling::BackendProfiling>(armnn::profiling::BackendProfiling(
+                    options, armnn::profiling::ProfilingService::Instance(), id));
+
+            // Backends may also provide a profiling context. Ask for it now.
+            auto profilingContext = backend->CreateBackendProfilingContext(options, profilingIface);
+            // Backends that don't support profiling will return a null profiling context.
+            if (profilingContext)
+            {
+                // Pass the context onto the profiling service.
+                armnn::profiling::ProfilingService::Instance().AddBackendProfilingContext(id, profilingContext);
+            }
         }
         catch (const BackendUnavailableException&)
         {
@@ -230,9 +244,11 @@
         }
     }
 
+
     // Clear all dynamic backends.
     DynamicBackendUtils::DeregisterDynamicBackends(m_DeviceSpec.GetDynamicBackends());
     m_DeviceSpec.ClearDynamicBackends();
+    m_BackendContexts.clear();
 }
 
 LoadedNetwork* Runtime::GetLoadedNetworkPtr(NetworkId networkId) const
diff --git a/src/backends/backendsCommon/IBackendInternal.cpp b/src/backends/backendsCommon/IBackendInternal.cpp
index c86d026..a9d5a54 100644
--- a/src/backends/backendsCommon/IBackendInternal.cpp
+++ b/src/backends/backendsCommon/IBackendInternal.cpp
@@ -45,7 +45,7 @@
 }
 
 IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
-    const IRuntime::CreationOptions&, armnn::profiling::IBackendProfiling&) const
+    const IRuntime::CreationOptions&, IBackendProfilingPtr&)
 {
     return IBackendProfilingContextPtr{};
 }
diff --git a/src/backends/backendsCommon/test/MockBackend.cpp b/src/backends/backendsCommon/test/MockBackend.cpp
index d8f8cfe..ac99738 100644
--- a/src/backends/backendsCommon/test/MockBackend.cpp
+++ b/src/backends/backendsCommon/test/MockBackend.cpp
@@ -99,7 +99,7 @@
 }
 
 IBackendInternal::IBackendProfilingContextPtr MockBackend::CreateBackendProfilingContext(
-    const IRuntime::CreationOptions&, armnn::profiling::IBackendProfiling&) const
+    const IRuntime::CreationOptions&, IBackendProfilingPtr&)
 {
     return IBackendProfilingContextPtr{};
 }
diff --git a/src/backends/backendsCommon/test/MockBackend.hpp b/src/backends/backendsCommon/test/MockBackend.hpp
index 3fe3100..d1a0082 100644
--- a/src/backends/backendsCommon/test/MockBackend.hpp
+++ b/src/backends/backendsCommon/test/MockBackend.hpp
@@ -5,14 +5,15 @@
 
 #pragma once
 
+#include <LayerSupportCommon.hpp>
 #include <armnn/backends/IBackendInternal.hpp>
 #include <armnn/backends/OptimizationViews.hpp>
-#include <LayerSupportCommon.hpp>
 #include <backendsCommon/LayerSupportBase.hpp>
 
 namespace armnn
 {
 
+
 class MockBackend : public IBackendInternal
 {
 public:
@@ -20,17 +21,20 @@
     ~MockBackend() = default;
 
     static const BackendId& GetIdStatic();
-    const BackendId& GetId() const override { return GetIdStatic(); }
+    const BackendId& GetId() const override
+    {
+        return GetIdStatic();
+    }
 
     IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override;
 
-    IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
-        const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
+    IBackendInternal::IWorkloadFactoryPtr
+        CreateWorkloadFactory(const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
 
     IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
-    IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
-        const IRuntime::CreationOptions& creationOptions,
-        armnn::profiling::IBackendProfiling& backendProfiling) const override;
+    IBackendInternal::IBackendProfilingContextPtr
+        CreateBackendProfilingContext(const IRuntime::CreationOptions& creationOptions,
+                                      IBackendProfilingPtr& backendProfiling) override;
 
     IBackendInternal::Optimizations GetOptimizations() const override;
     IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
@@ -38,7 +42,8 @@
     OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const override;
 };
 
-class MockLayerSupport : public LayerSupportBase {
+class MockLayerSupport : public LayerSupportBase
+{
 public:
     bool IsInputSupported(const TensorInfo& /*input*/,
                           Optional<std::string&> /*reasonIfUnsupported = EmptyOptional()*/) const override
@@ -47,7 +52,7 @@
     }
 
     bool IsOutputSupported(const TensorInfo& /*input*/,
-                          Optional<std::string&> /*reasonIfUnsupported = EmptyOptional()*/) const override
+                           Optional<std::string&> /*reasonIfUnsupported = EmptyOptional()*/) const override
     {
         return true;
     }
@@ -71,4 +76,4 @@
     }
 };
 
-} // namespace armnn
+}    // namespace armnn
diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp
index 8e839ae..f662754 100644
--- a/src/backends/cl/ClBackend.cpp
+++ b/src/backends/cl/ClBackend.cpp
@@ -75,8 +75,7 @@
 }
 
 IBackendInternal::IBackendProfilingContextPtr ClBackend::CreateBackendProfilingContext(
-    const IRuntime::CreationOptions&,
-    armnn::profiling::IBackendProfiling&) const
+    const IRuntime::CreationOptions&, IBackendProfilingPtr&)
 {
     return IBackendProfilingContextPtr{};
 }
diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp
index 703ae17..e85c616 100644
--- a/src/backends/cl/ClBackend.hpp
+++ b/src/backends/cl/ClBackend.hpp
@@ -31,8 +31,8 @@
     void RegisterTensorHandleFactories(TensorHandleFactoryRegistry& registry) override;
 
     IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
-    IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(const IRuntime::CreationOptions&,
-                                                              armnn::profiling::IBackendProfiling&) const override;
+    IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
+        const IRuntime::CreationOptions&, IBackendProfilingPtr& backendProfiling) override;
 
     IBackendInternal::Optimizations GetOptimizations() const override;
     IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp
index 1d48297..4201ba8 100644
--- a/src/backends/neon/NeonBackend.cpp
+++ b/src/backends/neon/NeonBackend.cpp
@@ -62,8 +62,7 @@
 }
 
 IBackendInternal::IBackendProfilingContextPtr NeonBackend::CreateBackendProfilingContext(
-    const IRuntime::CreationOptions&,
-    armnn::profiling::IBackendProfiling&) const
+    const IRuntime::CreationOptions&, IBackendProfilingPtr&)
 {
     return IBackendProfilingContextPtr{};
 }
diff --git a/src/backends/neon/NeonBackend.hpp b/src/backends/neon/NeonBackend.hpp
index b1eeeb6..ad4ac8d 100644
--- a/src/backends/neon/NeonBackend.hpp
+++ b/src/backends/neon/NeonBackend.hpp
@@ -27,8 +27,8 @@
         class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override;
 
     IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
-    IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(const IRuntime::CreationOptions&,
-        armnn::profiling::IBackendProfiling&) const override;
+    IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
+        const IRuntime::CreationOptions&, IBackendProfilingPtr& backendProfiling) override;
     IBackendInternal::Optimizations GetOptimizations() const override;
     IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
 
diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp
index d006c72..584ce78 100644
--- a/src/backends/reference/RefBackend.cpp
+++ b/src/backends/reference/RefBackend.cpp
@@ -49,7 +49,7 @@
 }
 
 IBackendInternal::IBackendProfilingContextPtr RefBackend::CreateBackendProfilingContext(
-    const IRuntime::CreationOptions&, armnn::profiling::IBackendProfiling&) const
+    const IRuntime::CreationOptions&, IBackendProfilingPtr&)
 {
     return IBackendProfilingContextPtr{};
 }
diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp
index e647b75..92d392d 100644
--- a/src/backends/reference/RefBackend.hpp
+++ b/src/backends/reference/RefBackend.hpp
@@ -29,8 +29,7 @@
     IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
 
     IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
-        const IRuntime::CreationOptions& creationOptions,
-        armnn::profiling::IBackendProfiling& backendProfiling) const override;
+        const IRuntime::CreationOptions& creationOptions, IBackendProfilingPtr& backendProfiling) override;
 
     IBackendInternal::Optimizations GetOptimizations() const override;
     IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp
index 926e54a..5cee477 100644
--- a/src/profiling/ProfilingService.cpp
+++ b/src/profiling/ProfilingService.cpp
@@ -391,6 +391,7 @@
 
     // ...finally reset the profiling state machine
     m_StateMachine.Reset();
+    m_BackendProfilingContexts.clear();
 }
 
 void ProfilingService::Stop()
diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp
index e510589..4438952 100644
--- a/src/profiling/ProfilingService.hpp
+++ b/src/profiling/ProfilingService.hpp
@@ -22,6 +22,7 @@
 #include "SendCounterPacket.hpp"
 #include "SendTimelinePacket.hpp"
 #include "TimelinePacketWriterFactory.hpp"
+#include <armnn/backends/profiling/IBackendProfilingContext.hpp>
 
 namespace armnn
 {
@@ -63,6 +64,13 @@
     // Disconnects the profiling service from the external server
     void Disconnect();
 
+    // Store a profiling context returned from a backend that support profiling.
+    void AddBackendProfilingContext(const BackendId backendId,
+        std::shared_ptr<armnn::profiling::IBackendProfilingContext> profilingContext)
+    {
+        m_BackendProfilingContexts.emplace(backendId, std::move(profilingContext));
+    }
+
     const ICounterDirectory& GetCounterDirectory() const;
     ICounterRegistry& GetCounterRegistry();
     ProfilingState GetCurrentState() const;
@@ -132,6 +140,8 @@
     PerJobCounterSelectionCommandHandler m_PerJobCounterSelectionCommandHandler;
     ProfilingGuidGenerator m_GuidGenerator;
     TimelinePacketWriterFactory m_TimelinePacketWriterFactory;
+    std::unordered_map<BackendId,
+        std::shared_ptr<armnn::profiling::IBackendProfilingContext>> m_BackendProfilingContexts;
 
 protected:
     // Default constructor/destructor kept protected for testing
diff --git a/src/profiling/backends/BackendProfiling.cpp b/src/profiling/backends/BackendProfiling.cpp
new file mode 100644
index 0000000..a49122a
--- /dev/null
+++ b/src/profiling/backends/BackendProfiling.cpp
@@ -0,0 +1,48 @@
+//
+// Copyright © 2020 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "BackendProfiling.hpp"
+#include "RegisterBackendCounters.hpp"
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+std::unique_ptr<IRegisterBackendCounters>
+    BackendProfiling::GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID)
+{
+    return std::make_unique<RegisterBackendCounters>(RegisterBackendCounters(currentMaxGlobalCounterID, m_backendId));
+}
+
+std::unique_ptr<ISendTimelinePacket> BackendProfiling::GetSendTimelinePacket()
+{
+    return m_ProfilingService.GetSendTimelinePacket();
+}
+
+IProfilingGuidGenerator& BackendProfiling::GetProfilingGuidGenerator()
+{
+    // The profiling service is our Guid Generator.
+    return m_ProfilingService;
+}
+
+CounterStatus BackendProfiling::GetCounterStatus(uint16_t)
+{
+    return CounterStatus();
+}
+
+std::vector<CounterStatus> BackendProfiling::GetActiveCounters()
+{
+    return std::vector<CounterStatus>();
+}
+
+bool BackendProfiling::IsProfilingEnabled() const
+{
+    return m_ProfilingService.IsProfilingEnabled();
+}
+
+}    // namespace profiling
+}    // namespace armnn
diff --git a/src/profiling/backends/BackendProfiling.hpp b/src/profiling/backends/BackendProfiling.hpp
new file mode 100644
index 0000000..2bc365a
--- /dev/null
+++ b/src/profiling/backends/BackendProfiling.hpp
@@ -0,0 +1,49 @@
+//
+// Copyright © 2020 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <ProfilingService.hpp>
+#include <armnn/backends/profiling/IBackendProfiling.hpp>
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+class BackendProfiling : public IBackendProfiling
+{
+public:
+    BackendProfiling(const IRuntime::CreationOptions& options, ProfilingService& profilingService, const BackendId& id)
+        : m_options(options)
+        , m_ProfilingService(profilingService)
+        , m_backendId(id)
+    {}
+
+    ~BackendProfiling()
+    {}
+
+    std::unique_ptr<IRegisterBackendCounters>
+        GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) override;
+
+    std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() override;
+
+    IProfilingGuidGenerator& GetProfilingGuidGenerator() override;
+
+    void ReportCounters(const std::vector<Timestamp>&) override
+    {}
+
+    CounterStatus GetCounterStatus(uint16_t backendCounterId) override;
+
+    std::vector<CounterStatus> GetActiveCounters() override;
+
+    bool IsProfilingEnabled() const override;
+
+private:
+    IRuntime::CreationOptions m_options;
+    ProfilingService& m_ProfilingService;
+    BackendId m_backendId;
+};
+}    // namespace profiling
+}    // namespace armnn
\ No newline at end of file
