diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp
index eaaded5..4e61383 100644
--- a/src/profiling/ProfilingService.cpp
+++ b/src/profiling/ProfilingService.cpp
@@ -21,8 +21,27 @@
 {
     if (m_Options.m_EnableProfiling == true)
     {
-        // Setup Counter Directory - this should only be created if profiling is enabled
-        // Setup Counter meta
+        // Setup provisional Counter Directory example - this should only be created if profiling is enabled
+        // Setup provisional Counter meta example
+        const std::string categoryName = "Category";
+
+        m_CounterDirectory.RegisterCategory(categoryName);
+        m_CounterDirectory.RegisterDevice("device name", 0, categoryName);
+        m_CounterDirectory.RegisterCounterSet("counterSet_name", 2, categoryName);
+
+        m_CounterDirectory.RegisterCounter(categoryName,
+                                           0,
+                                           1,
+                                           123.45f,
+                                           "counter name 1",
+                                           "counter description");
+
+        m_CounterDirectory.RegisterCounter(categoryName,
+                                           0,
+                                           1,
+                                           123.45f,
+                                           "counter name 2",
+                                           "counter description");
 
         // For now until CounterDirectory setup is implemented, change m_State once everything initialised
         m_State.TransitionToState(ProfilingState::NotConnected);
@@ -46,10 +65,26 @@
     }
 }
 
+const ICounterDirectory& ProfilingService::GetCounterDirectory() const
+{
+    return m_CounterDirectory;
+}
+
 ProfilingState ProfilingService::GetCurrentState() const
 {
     return m_State.GetCurrentState();
 }
+
+void ProfilingService::ResetExternalProfilingOptions(const Runtime::CreationOptions::ExternalProfilingOptions& options)
+{
+    if(!m_Options.m_EnableProfiling)
+    {
+        m_Options = options;
+        Initialise();
+        return;
+    }
+    m_Options = options;
+}
 } // namespace profiling
 
 } // namespace armnn
\ No newline at end of file
diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp
index 33f1135..eb29c33 100644
--- a/src/profiling/ProfilingService.hpp
+++ b/src/profiling/ProfilingService.hpp
@@ -7,6 +7,7 @@
 
 #include "ProfilingStateMachine.hpp"
 #include "ProfilingConnectionFactory.hpp"
+#include "CounterDirectory.hpp"
 
 namespace armnn
 {
@@ -22,16 +23,17 @@
 
     void Run();
 
+    const ICounterDirectory& GetCounterDirectory() const;
     ProfilingState GetCurrentState() const;
-
-    // Options are public to allow profiling to be turned on at runtime
-    Runtime::CreationOptions::ExternalProfilingOptions m_Options;
+    void ResetExternalProfilingOptions(const Runtime::CreationOptions::ExternalProfilingOptions& options);
 
 private:
     void Initialise();
 
-    ProfilingStateMachine m_State;
+    CounterDirectory m_CounterDirectory;
     ProfilingConnectionFactory m_Factory;
+    Runtime::CreationOptions::ExternalProfilingOptions m_Options;
+    ProfilingStateMachine m_State;
 };
 
 } // namespace profiling
diff --git a/src/profiling/test/ProfilingTests.cpp b/src/profiling/test/ProfilingTests.cpp
index a5d60a5..2a20aac 100644
--- a/src/profiling/test/ProfilingTests.cpp
+++ b/src/profiling/test/ProfilingTests.cpp
@@ -535,13 +535,28 @@
     BOOST_CHECK(service.GetCurrentState() ==  ProfilingState::Uninitialised);
     service.Run();
     BOOST_CHECK(service.GetCurrentState() ==  ProfilingState::Uninitialised);
-    service.m_Options.m_EnableProfiling = true;
-    service.Run();
+    options.m_EnableProfiling = true;
+    service.ResetExternalProfilingOptions(options);
     BOOST_CHECK(service.GetCurrentState() ==  ProfilingState::NotConnected);
     service.Run();
     BOOST_CHECK(service.GetCurrentState() ==  ProfilingState::WaitingForAck);
 }
 
+BOOST_AUTO_TEST_CASE(CheckProfilingServiceCounterDirectory)
+{
+    armnn::Runtime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingService service(options);
+
+    const ICounterDirectory& counterDirectory0 = service.GetCounterDirectory();
+    BOOST_CHECK(counterDirectory0.GetCounterCount() == 0);
+
+    options.m_EnableProfiling = true;
+    service.ResetExternalProfilingOptions(options);
+
+    const ICounterDirectory& counterDirectory1 = service.GetCounterDirectory();
+    BOOST_CHECK(counterDirectory1.GetCounterCount() != 0);
+}
+
 BOOST_AUTO_TEST_CASE(CheckProfilingObjectUids)
 {
     uint16_t uid = 0;
