diff --git a/Android.mk b/Android.mk
index ee2fedd..b0436bd 100644
--- a/Android.mk
+++ b/Android.mk
@@ -110,6 +110,7 @@
         profiling/common/src/CommandHandlerKey.cpp \
         profiling/common/src/CommandHandlerRegistry.cpp \
         profiling/common/src/CommonProfilingUtils.cpp \
+        profiling/common/src/CounterDirectory.cpp \
         profiling/common/src/LabelsAndEventClasses.cpp \
         profiling/common/src/Logging.cpp \
         profiling/common/src/NetworkSockets.cpp \
@@ -117,6 +118,7 @@
         profiling/common/src/Processes.cpp \
         profiling/common/src/SwTrace.cpp \
         profiling/common/src/Threads.cpp \
+        profiling/server/src/timelineDecoder/DirectoryCaptureCommandHandler.cpp \
         profiling/server/src/timelineDecoder/TimelineCaptureCommandHandler.cpp \
         profiling/server/src/timelineDecoder/TimelineDecoder.cpp \
         profiling/server/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.cpp \
@@ -239,10 +241,8 @@
         src/profiling/BufferManager.cpp \
         src/profiling/CommandHandler.cpp \
         src/profiling/ConnectionAcknowledgedCommandHandler.cpp \
-        src/profiling/CounterDirectory.cpp \
         src/profiling/CounterIdMap.cpp \
         src/profiling/DeactivateTimelineReportingCommandHandler.cpp \
-        src/profiling/DirectoryCaptureCommandHandler.cpp \
         src/profiling/FileOnlyProfilingConnection.cpp \
         src/profiling/Holder.cpp \
         src/profiling/IProfilingService.cpp \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c739828..e2fa9f3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -422,23 +422,16 @@
     src/profiling/CommandHandler.hpp
     src/profiling/ConnectionAcknowledgedCommandHandler.cpp
     src/profiling/ConnectionAcknowledgedCommandHandler.hpp
-    src/profiling/Counter.hpp
-    src/profiling/CounterDirectory.cpp
-    src/profiling/CounterDirectory.hpp
     src/profiling/CounterIdMap.cpp
     src/profiling/CounterIdMap.hpp
     src/profiling/DeactivateTimelineReportingCommandHandler.cpp
     src/profiling/DeactivateTimelineReportingCommandHandler.hpp
-    src/profiling/DirectoryCaptureCommandHandler.cpp
-    src/profiling/DirectoryCaptureCommandHandler.hpp
     src/profiling/FileOnlyProfilingConnection.cpp
     src/profiling/FileOnlyProfilingConnection.hpp
     src/profiling/Holder.cpp
     src/profiling/Holder.hpp
     src/profiling/IBufferManager.hpp
     src/profiling/IConsumer.hpp
-    src/profiling/ICounterDirectory.hpp
-    src/profiling/ICounterRegistry.hpp
     src/profiling/ICounterValues.hpp
     src/profiling/IInitialiseProfilingService.hpp
     src/profiling/INotifyBackends.hpp
diff --git a/profiling/common/include/CommonProfilingUtils.hpp b/profiling/common/include/CommonProfilingUtils.hpp
index 68fe6bb..c07beaf 100644
--- a/profiling/common/include/CommonProfilingUtils.hpp
+++ b/profiling/common/include/CommonProfilingUtils.hpp
@@ -4,6 +4,8 @@
 //
 #pragma once
 
+#include "ICounterDirectory.hpp"
+
 #include <cstdint>
 #include <string>
 
@@ -34,5 +36,11 @@
 
 std::string CentreAlignFormatting(const std::string& stringToPass, const int spacingWidth);
 
+void PrintCounterDirectory(ICounterDirectory& counterDirectory);
+
+uint16_t GetNextUid(bool peekOnly = false);
+
+    std::vector<uint16_t> GetNextCounterUids(uint16_t firstUid, uint16_t cores);
+
 } // namespace pipe
-} // namespace arm
\ No newline at end of file
+} // namespace arm
diff --git a/src/profiling/Counter.hpp b/profiling/common/include/Counter.hpp
similarity index 100%
rename from src/profiling/Counter.hpp
rename to profiling/common/include/Counter.hpp
diff --git a/src/profiling/CounterDirectory.hpp b/profiling/common/include/CounterDirectory.hpp
similarity index 100%
rename from src/profiling/CounterDirectory.hpp
rename to profiling/common/include/CounterDirectory.hpp
diff --git a/src/profiling/ICounterDirectory.hpp b/profiling/common/include/ICounterDirectory.hpp
similarity index 100%
rename from src/profiling/ICounterDirectory.hpp
rename to profiling/common/include/ICounterDirectory.hpp
diff --git a/src/profiling/ICounterRegistry.hpp b/profiling/common/include/ICounterRegistry.hpp
similarity index 100%
rename from src/profiling/ICounterRegistry.hpp
rename to profiling/common/include/ICounterRegistry.hpp
diff --git a/profiling/common/src/CMakeLists.txt b/profiling/common/src/CMakeLists.txt
index e02c785..264902c 100644
--- a/profiling/common/src/CMakeLists.txt
+++ b/profiling/common/src/CMakeLists.txt
@@ -10,6 +10,7 @@
         CommandHandlerKey.cpp
         CommandHandlerRegistry.cpp
         CommonProfilingUtils.cpp
+        CounterDirectory.cpp
         LabelsAndEventClasses.cpp
         Logging.cpp
         NetworkSockets.cpp
diff --git a/profiling/common/src/CommonProfilingUtils.cpp b/profiling/common/src/CommonProfilingUtils.cpp
index fe98e0a..01bc461 100644
--- a/profiling/common/src/CommonProfilingUtils.cpp
+++ b/profiling/common/src/CommonProfilingUtils.cpp
@@ -5,7 +5,10 @@
 
 #include <common/include/Assert.hpp>
 #include <common/include/CommonProfilingUtils.hpp>
+#include <common/include/ProfilingException.hpp>
 
+#include <iostream>
+#include <limits>
 #include <sstream>
 
 namespace arm
@@ -140,6 +143,242 @@
     return outputStream.str();
 }
 
+void PrintDeviceDetails(const std::pair<const unsigned short, std::unique_ptr<Device>>& devicePair)
+{
+    std::string body;
+
+    body.append(CentreAlignFormatting(devicePair.second->m_Name, 20));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(devicePair.first), 13));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(devicePair.second->m_Cores), 10));
+    body.append("\n");
+
+    std::cout << std::string(body.size(), '-') << "\n";
+    std::cout<< body;
+}
+
+void PrintCounterSetDetails(const std::pair<const unsigned short, std::unique_ptr<CounterSet>>& counterSetPair)
+{
+    std::string body;
+
+    body.append(CentreAlignFormatting(counterSetPair.second->m_Name, 20));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counterSetPair.first), 13));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counterSetPair.second->m_Count), 10));
+    body.append("\n");
+
+    std::cout << std::string(body.size(), '-') << "\n";
+
+    std::cout<< body;
+}
+
+void PrintCounterDetails(std::shared_ptr<Counter>& counter)
+{
+    std::string body;
+
+    body.append(CentreAlignFormatting(counter->m_Name, 20));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(counter->m_Description, 50));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(counter->m_Units, 14));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counter->m_Uid), 6));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counter->m_MaxCounterUid), 10));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counter->m_Class), 8));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counter->m_Interpolation), 14));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counter->m_Multiplier), 20));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counter->m_CounterSetUid), 16));
+    body.append(" | ");
+    body.append(CentreAlignFormatting(std::to_string(counter->m_DeviceUid), 14));
+
+    body.append("\n");
+
+    std::cout << std::string(body.size(), '-') << "\n";
+
+    std::cout << body;
+}
+
+void PrintCategoryDetails(const std::unique_ptr<Category>& category,
+                          std::unordered_map<unsigned short, std::shared_ptr<Counter>> counterMap)
+{
+    std::string categoryBody;
+    std::string categoryHeader;
+
+    categoryHeader.append(CentreAlignFormatting("Name", 20));
+    categoryHeader.append(" | ");
+    categoryHeader.append(CentreAlignFormatting("Event Count", 14));
+    categoryHeader.append("\n");
+
+    categoryBody.append(CentreAlignFormatting(category->m_Name, 20));
+    categoryBody.append(" | ");
+    categoryBody.append(CentreAlignFormatting(std::to_string(category->m_Counters.size()), 14));
+
+    std::cout << "\n" << "\n";
+    std::cout << CentreAlignFormatting("CATEGORY", static_cast<int>(categoryHeader.size()));
+    std::cout << "\n";
+    std::cout << std::string(categoryHeader.size(), '=') << "\n";
+
+    std::cout << categoryHeader;
+
+    std::cout << std::string(categoryBody.size(), '-') << "\n";
+
+    std::cout << categoryBody;
+
+    std::string counterHeader;
+
+    counterHeader.append(CentreAlignFormatting("Counter Name", 20));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Description", 50));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Units", 14));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("UID", 6));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Max UID", 10));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Class", 8));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Interpolation", 14));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Multiplier", 20));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Counter set UID", 16));
+    counterHeader.append(" | ");
+    counterHeader.append(CentreAlignFormatting("Device UID", 14));
+    counterHeader.append("\n");
+
+    std::cout << "\n" << "\n";
+    std::cout << CentreAlignFormatting("EVENTS IN CATEGORY: " + category->m_Name,
+                                       static_cast<int>(counterHeader.size()));
+    std::cout << "\n";
+    std::cout << std::string(counterHeader.size(), '=') << "\n";
+    std::cout << counterHeader;
+    for (auto& it: category->m_Counters) {
+        auto search = counterMap.find(it);
+        if(search != counterMap.end()) {
+            PrintCounterDetails(search->second);
+        }
+    }
+}
+
+void PrintCounterDirectory(ICounterDirectory& counterDirectory)
+{
+    std::string devicesHeader;
+
+    devicesHeader.append(CentreAlignFormatting("Device name", 20));
+    devicesHeader.append(" | ");
+    devicesHeader.append(CentreAlignFormatting("UID", 13));
+    devicesHeader.append(" | ");
+    devicesHeader.append(CentreAlignFormatting("Cores", 10));
+    devicesHeader.append("\n");
+
+    std::cout << "\n" << "\n";
+    std::cout << CentreAlignFormatting("DEVICES", static_cast<int>(devicesHeader.size()));
+    std::cout << "\n";
+    std::cout << std::string(devicesHeader.size(), '=') << "\n";
+    std::cout << devicesHeader;
+    for (auto& it: counterDirectory.GetDevices()) {
+        PrintDeviceDetails(it);
+    }
+
+    std::string counterSetHeader;
+
+    counterSetHeader.append(CentreAlignFormatting("Counter set name", 20));
+    counterSetHeader.append(" | ");
+    counterSetHeader.append(CentreAlignFormatting("UID", 13));
+    counterSetHeader.append(" | ");
+    counterSetHeader.append(CentreAlignFormatting("Count", 10));
+    counterSetHeader.append("\n");
+
+    std::cout << "\n" << "\n";
+    std::cout << CentreAlignFormatting("COUNTER SETS", static_cast<int>(counterSetHeader.size()));
+    std::cout << "\n";
+    std::cout << std::string(counterSetHeader.size(), '=') << "\n";
+
+    std::cout << counterSetHeader;
+
+    for (auto& it: counterDirectory.GetCounterSets()) {
+        PrintCounterSetDetails(it);
+    }
+
+    auto counters = counterDirectory.GetCounters();
+    for (auto& it: counterDirectory.GetCategories()) {
+        PrintCategoryDetails(it, counters);
+    }
+    std::cout << "\n";
+}
+
+namespace
+{
+
+void ThrowIfCantGenerateNextUid(uint16_t uid, uint16_t cores = 0)
+{
+    // Check that it is possible to generate the next UID without causing an overflow
+    switch (cores)
+    {
+    case 0:
+    case 1:
+        // Number of cores not specified or set to 1 (a value of zero indicates the device is not capable of
+        // running multiple parallel workloads and will not provide multiple streams of data for each event)
+        if (uid == std::numeric_limits<uint16_t>::max())
+        {
+            throw arm::pipe::ProfilingException("Generating the next UID for profiling would result in an overflow");
+        }
+        break;
+    default: // cores > 1
+        // Multiple cores available, as max_counter_uid has to be set to: counter_uid + cores - 1, the maximum
+        // allowed value for a counter UID is consequently: uint16_t_max - cores + 1
+        if (uid >= std::numeric_limits<uint16_t>::max() - cores + 1)
+        {
+            throw arm::pipe::ProfilingException("Generating the next UID for profiling would result in an overflow");
+        }
+        break;
+    }
+}
+
+} // Anonymous namespace
+
+uint16_t GetNextUid(bool peekOnly)
+{
+    // The UID used for profiling objects and events. The first valid UID is 1, as 0 is a reserved value
+    static uint16_t uid = 1;
+
+    // Check that it is possible to generate the next UID without causing an overflow (throws in case of error)
+    ThrowIfCantGenerateNextUid(uid);
+
+    if (peekOnly)
+    {
+        // Peek only
+        return uid;
+    }
+    else
+    {
+        // Get the next UID
+        return uid++;
+    }
+}
+
+std::vector<uint16_t> GetNextCounterUids(uint16_t firstUid, uint16_t cores)
+{
+    // Check that it is possible to generate the next counter UID without causing an overflow (throws in case of error)
+    ThrowIfCantGenerateNextUid(firstUid, cores);
+
+    // Get the next counter UIDs
+    size_t counterUidsSize = cores == 0 ? 1 : cores;
+    std::vector<uint16_t> counterUids(counterUidsSize, 0);
+    for (size_t i = 0; i < counterUidsSize; i++)
+    {
+        counterUids[i] = firstUid++;
+    }
+    return counterUids;
+}
 
 } // namespace pipe
-} // namespace arm
\ No newline at end of file
+} // namespace arm
diff --git a/src/profiling/CounterDirectory.cpp b/profiling/common/src/CounterDirectory.cpp
similarity index 99%
rename from src/profiling/CounterDirectory.cpp
rename to profiling/common/src/CounterDirectory.cpp
index 0f6147f..f338858 100644
--- a/src/profiling/CounterDirectory.cpp
+++ b/profiling/common/src/CounterDirectory.cpp
@@ -3,8 +3,8 @@
 // SPDX-License-Identifier: MIT
 //
 
-#include "CounterDirectory.hpp"
-#include "ProfilingUtils.hpp"
+#include <common/include/CounterDirectory.hpp>
+#include <common/include/CommonProfilingUtils.hpp>
 
 #include <common/include/Assert.hpp>
 #include <common/include/SwTrace.hpp>
diff --git a/src/profiling/DirectoryCaptureCommandHandler.hpp b/profiling/server/include/timelineDecoder/DirectoryCaptureCommandHandler.hpp
similarity index 97%
rename from src/profiling/DirectoryCaptureCommandHandler.hpp
rename to profiling/server/include/timelineDecoder/DirectoryCaptureCommandHandler.hpp
index 007cf05..de10ec8 100644
--- a/src/profiling/DirectoryCaptureCommandHandler.hpp
+++ b/profiling/server/include/timelineDecoder/DirectoryCaptureCommandHandler.hpp
@@ -5,9 +5,8 @@
 
 #pragma once
 
-#include "CounterDirectory.hpp"
-
 #include <common/include/CommandHandlerFunctor.hpp>
+#include <common/include/CounterDirectory.hpp>
 
 #include <atomic>
 
diff --git a/profiling/server/src/timelineDecoder/CMakeLists.txt b/profiling/server/src/timelineDecoder/CMakeLists.txt
index 7154722..4ac68a5 100644
--- a/profiling/server/src/timelineDecoder/CMakeLists.txt
+++ b/profiling/server/src/timelineDecoder/CMakeLists.txt
@@ -6,6 +6,7 @@
 if(BUILD_TIMELINE_DECODER)
     set(timelineDecoder_sources)
     list(APPEND timelineDecoder_sources
+        DirectoryCaptureCommandHandler.cpp
         TimelineCaptureCommandHandler.cpp
         TimelineDecoder.cpp
         TimelineDirectoryCaptureCommandHandler.cpp)
diff --git a/src/profiling/DirectoryCaptureCommandHandler.cpp b/profiling/server/src/timelineDecoder/DirectoryCaptureCommandHandler.cpp
similarity index 98%
rename from src/profiling/DirectoryCaptureCommandHandler.cpp
rename to profiling/server/src/timelineDecoder/DirectoryCaptureCommandHandler.cpp
index 4011c9b..48dce40 100644
--- a/src/profiling/DirectoryCaptureCommandHandler.cpp
+++ b/profiling/server/src/timelineDecoder/DirectoryCaptureCommandHandler.cpp
@@ -3,9 +3,9 @@
 // SPDX-License-Identifier: MIT
 //
 
-#include "DirectoryCaptureCommandHandler.hpp"
+#include <common/include/CommonProfilingUtils.hpp>
 
-#include "ProfilingUtils.hpp"
+#include <server/include/timelineDecoder/DirectoryCaptureCommandHandler.hpp>
 
 #include <atomic>
 #include <iostream>
diff --git a/src/armnn/ArmNNProfilingServiceInitialiser.cpp b/src/armnn/ArmNNProfilingServiceInitialiser.cpp
index 03ca562..bbed43a 100644
--- a/src/armnn/ArmNNProfilingServiceInitialiser.cpp
+++ b/src/armnn/ArmNNProfilingServiceInitialiser.cpp
@@ -9,7 +9,7 @@
 #include <armnn/profiling/ArmNNProfiling.hpp>
 #include <armnn/utility/Assert.hpp>
 
-#include <Counter.hpp>
+#include <common/include/Counter.hpp>
 
 namespace armnn
 {
diff --git a/src/backends/backendsCommon/test/BackendProfilingTests.cpp b/src/backends/backendsCommon/test/BackendProfilingTests.cpp
index 164efb3..9b80a8f 100644
--- a/src/backends/backendsCommon/test/BackendProfilingTests.cpp
+++ b/src/backends/backendsCommon/test/BackendProfilingTests.cpp
@@ -4,7 +4,6 @@
 //
 
 #include "ArmNNProfilingServiceInitialiser.hpp"
-#include "CounterDirectory.hpp"
 #include "CounterIdMap.hpp"
 #include "Holder.hpp"
 #include "MockBackendId.hpp"
@@ -15,24 +14,28 @@
 #include "ProfilingUtils.hpp"
 #include "RequestCounterDirectoryCommandHandler.hpp"
 
-#include <armnn/profiling/ArmNNProfiling.hpp>
-
 #include <TestUtils.hpp>
 
-#include <armnn/utility/IgnoreUnused.hpp>
 #include <armnn/BackendId.hpp>
 #include <armnn/Logging.hpp>
+
+#include <armnn/profiling/ArmNNProfiling.hpp>
 #include <armnn/profiling/ISendTimelinePacket.hpp>
 #include <armnn/profiling/ProfilingOptions.hpp>
+
+#include <armnn/utility/IgnoreUnused.hpp>
+
 #include <armnnTestUtils/MockBackend.hpp>
 
-#include <doctest/doctest.h>
-#include <vector>
-
-#include <cstdint>
-#include <limits>
 #include <backends/BackendProfiling.hpp>
 
+#include <common/include/CounterDirectory.hpp>
+
+#include <doctest/doctest.h>
+
+#include <vector>
+#include <cstdint>
+#include <limits>
 
 namespace arm
 {
diff --git a/src/profiling/FileOnlyProfilingConnection.hpp b/src/profiling/FileOnlyProfilingConnection.hpp
index 48fb4d3..9d40420 100644
--- a/src/profiling/FileOnlyProfilingConnection.hpp
+++ b/src/profiling/FileOnlyProfilingConnection.hpp
@@ -8,13 +8,14 @@
 #include <armnn/profiling/ILocalPacketHandler.hpp>
 #include <armnn/profiling/ProfilingOptions.hpp>
 
-#include "DirectoryCaptureCommandHandler.hpp"
 #include "IProfilingConnection.hpp"
 #include "ProfilingUtils.hpp"
 
 #include <common/include/Assert.hpp>
 #include <common/include/Packet.hpp>
 
+#include <server/include/timelineDecoder/DirectoryCaptureCommandHandler.hpp>
+
 #include <atomic>
 #include <condition_variable>
 #include <fstream>
diff --git a/src/profiling/IProfilingService.hpp b/src/profiling/IProfilingService.hpp
index 6486b6f..353059a 100644
--- a/src/profiling/IProfilingService.hpp
+++ b/src/profiling/IProfilingService.hpp
@@ -8,7 +8,6 @@
 #include "CounterIdMap.hpp"
 #include "Holder.hpp"
 #include "ICounterValues.hpp"
-#include "ICounterRegistry.hpp"
 #include "IInitialiseProfilingService.hpp"
 #include "IProfilingServiceStatus.hpp"
 #include "ISendCounterPacket.hpp"
@@ -18,9 +17,11 @@
 #include <armnn/backends/profiling/IBackendProfilingContext.hpp>
 #include <armnn/profiling/ProfilingOptions.hpp>
 
+#include <common/include/ICounterRegistry.hpp>
 #include <common/include/Optional.hpp>
 #include <common/include/ProfilingGuidGenerator.hpp>
 
+
 namespace arm
 {
 
diff --git a/src/profiling/ISendCounterPacket.hpp b/src/profiling/ISendCounterPacket.hpp
index 0e3ae6f..522dc7c 100644
--- a/src/profiling/ISendCounterPacket.hpp
+++ b/src/profiling/ISendCounterPacket.hpp
@@ -6,7 +6,7 @@
 #pragma once
 
 #include <armnn/backends/profiling/IBackendProfiling.hpp>
-#include "ICounterDirectory.hpp"
+#include <common/include/ICounterDirectory.hpp>
 
 namespace arm
 {
@@ -38,4 +38,3 @@
 } // namespace pipe
 
 } // namespace arm
-
diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp
index 9e788fd..58bfd3a 100644
--- a/src/profiling/ProfilingService.hpp
+++ b/src/profiling/ProfilingService.hpp
@@ -9,12 +9,10 @@
 #include "BufferManager.hpp"
 #include "CommandHandler.hpp"
 #include "ConnectionAcknowledgedCommandHandler.hpp"
-#include "CounterDirectory.hpp"
 #include "CounterIdMap.hpp"
 #include "DeactivateTimelineReportingCommandHandler.hpp"
-#include "ICounterRegistry.hpp"
 #include "ICounterValues.hpp"
-#include <armnn/profiling/ILocalPacketHandler.hpp>
+#include "INotifyBackends.hpp"
 #include "IProfilingService.hpp"
 #include "IReportStructure.hpp"
 #include "PeriodicCounterCapture.hpp"
@@ -27,9 +25,12 @@
 #include "SendThread.hpp"
 #include "SendTimelinePacket.hpp"
 #include "TimelinePacketWriterFactory.hpp"
-#include "INotifyBackends.hpp"
+
 #include <armnn/backends/profiling/IBackendProfilingContext.hpp>
 
+#include <armnn/profiling/ILocalPacketHandler.hpp>
+
+#include <common/include/CounterDirectory.hpp>
 
 #include <list>
 
diff --git a/src/profiling/ProfilingUtils.cpp b/src/profiling/ProfilingUtils.cpp
index e403b1c..2963a98 100644
--- a/src/profiling/ProfilingUtils.cpp
+++ b/src/profiling/ProfilingUtils.cpp
@@ -23,71 +23,6 @@
 namespace pipe
 {
 
-namespace
-{
-
-void ThrowIfCantGenerateNextUid(uint16_t uid, uint16_t cores = 0)
-{
-    // Check that it is possible to generate the next UID without causing an overflow
-    switch (cores)
-    {
-    case 0:
-    case 1:
-        // Number of cores not specified or set to 1 (a value of zero indicates the device is not capable of
-        // running multiple parallel workloads and will not provide multiple streams of data for each event)
-        if (uid == std::numeric_limits<uint16_t>::max())
-        {
-            throw arm::pipe::ProfilingException("Generating the next UID for profiling would result in an overflow");
-        }
-        break;
-    default: // cores > 1
-        // Multiple cores available, as max_counter_uid has to be set to: counter_uid + cores - 1, the maximum
-        // allowed value for a counter UID is consequently: uint16_t_max - cores + 1
-        if (uid >= std::numeric_limits<uint16_t>::max() - cores + 1)
-        {
-            throw arm::pipe::ProfilingException("Generating the next UID for profiling would result in an overflow");
-        }
-        break;
-    }
-}
-
-} // Anonymous namespace
-
-uint16_t GetNextUid(bool peekOnly)
-{
-    // The UID used for profiling objects and events. The first valid UID is 1, as 0 is a reserved value
-    static uint16_t uid = 1;
-
-    // Check that it is possible to generate the next UID without causing an overflow (throws in case of error)
-    ThrowIfCantGenerateNextUid(uid);
-
-    if (peekOnly)
-    {
-        // Peek only
-        return uid;
-    }
-    else
-    {
-        // Get the next UID
-        return uid++;
-    }
-}
-
-std::vector<uint16_t> GetNextCounterUids(uint16_t firstUid, uint16_t cores)
-{
-    // Check that it is possible to generate the next counter UID without causing an overflow (throws in case of error)
-    ThrowIfCantGenerateNextUid(firstUid, cores);
-
-    // Get the next counter UIDs
-    size_t counterUidsSize = cores == 0 ? 1 : cores;
-    std::vector<uint16_t> counterUids(counterUidsSize, 0);
-    for (size_t i = 0; i < counterUidsSize; i++)
-    {
-        counterUids[i] = firstUid++;
-    }
-    return counterUids;
-}
-
 void WriteBytes(const IPacketBufferPtr& packetBuffer, unsigned int offset,  const void* value, unsigned int valueSize)
 {
     ARM_PIPE_ASSERT(packetBuffer);
@@ -656,178 +591,6 @@
     return TimelinePacketStatus::Ok;
 }
 
-void PrintDeviceDetails(const std::pair<const unsigned short, std::unique_ptr<Device>>& devicePair)
-{
-    std::string body;
-
-    body.append(CentreAlignFormatting(devicePair.second->m_Name, 20));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(devicePair.first), 13));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(devicePair.second->m_Cores), 10));
-    body.append("\n");
-
-    std::cout << std::string(body.size(), '-') << "\n";
-    std::cout<< body;
-}
-
-void PrintCounterSetDetails(const std::pair<const unsigned short, std::unique_ptr<CounterSet>>& counterSetPair)
-{
-    std::string body;
-
-    body.append(CentreAlignFormatting(counterSetPair.second->m_Name, 20));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counterSetPair.first), 13));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counterSetPair.second->m_Count), 10));
-    body.append("\n");
-
-    std::cout << std::string(body.size(), '-') << "\n";
-
-    std::cout<< body;
-}
-
-void PrintCounterDetails(std::shared_ptr<Counter>& counter)
-{
-    std::string body;
-
-    body.append(CentreAlignFormatting(counter->m_Name, 20));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(counter->m_Description, 50));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(counter->m_Units, 14));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counter->m_Uid), 6));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counter->m_MaxCounterUid), 10));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counter->m_Class), 8));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counter->m_Interpolation), 14));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counter->m_Multiplier), 20));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counter->m_CounterSetUid), 16));
-    body.append(" | ");
-    body.append(CentreAlignFormatting(std::to_string(counter->m_DeviceUid), 14));
-
-    body.append("\n");
-
-    std::cout << std::string(body.size(), '-') << "\n";
-
-    std::cout << body;
-}
-
-void PrintCategoryDetails(const std::unique_ptr<Category>& category,
-                          std::unordered_map<unsigned short, std::shared_ptr<Counter>> counterMap)
-{
-    std::string categoryBody;
-    std::string categoryHeader;
-
-    categoryHeader.append(CentreAlignFormatting("Name", 20));
-    categoryHeader.append(" | ");
-    categoryHeader.append(CentreAlignFormatting("Event Count", 14));
-    categoryHeader.append("\n");
-
-    categoryBody.append(CentreAlignFormatting(category->m_Name, 20));
-    categoryBody.append(" | ");
-    categoryBody.append(CentreAlignFormatting(std::to_string(category->m_Counters.size()), 14));
-
-    std::cout << "\n" << "\n";
-    std::cout << CentreAlignFormatting("CATEGORY", static_cast<int>(categoryHeader.size()));
-    std::cout << "\n";
-    std::cout << std::string(categoryHeader.size(), '=') << "\n";
-
-    std::cout << categoryHeader;
-
-    std::cout << std::string(categoryBody.size(), '-') << "\n";
-
-    std::cout << categoryBody;
-
-    std::string counterHeader;
-
-    counterHeader.append(CentreAlignFormatting("Counter Name", 20));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Description", 50));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Units", 14));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("UID", 6));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Max UID", 10));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Class", 8));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Interpolation", 14));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Multiplier", 20));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Counter set UID", 16));
-    counterHeader.append(" | ");
-    counterHeader.append(CentreAlignFormatting("Device UID", 14));
-    counterHeader.append("\n");
-
-    std::cout << "\n" << "\n";
-    std::cout << CentreAlignFormatting("EVENTS IN CATEGORY: " + category->m_Name,
-                                       static_cast<int>(counterHeader.size()));
-    std::cout << "\n";
-    std::cout << std::string(counterHeader.size(), '=') << "\n";
-    std::cout << counterHeader;
-    for (auto& it: category->m_Counters) {
-        auto search = counterMap.find(it);
-        if(search != counterMap.end()) {
-            PrintCounterDetails(search->second);
-        }
-    }
-}
-
-void PrintCounterDirectory(ICounterDirectory& counterDirectory)
-{
-    std::string devicesHeader;
-
-    devicesHeader.append(CentreAlignFormatting("Device name", 20));
-    devicesHeader.append(" | ");
-    devicesHeader.append(CentreAlignFormatting("UID", 13));
-    devicesHeader.append(" | ");
-    devicesHeader.append(CentreAlignFormatting("Cores", 10));
-    devicesHeader.append("\n");
-
-    std::cout << "\n" << "\n";
-    std::cout << CentreAlignFormatting("DEVICES", static_cast<int>(devicesHeader.size()));
-    std::cout << "\n";
-    std::cout << std::string(devicesHeader.size(), '=') << "\n";
-    std::cout << devicesHeader;
-    for (auto& it: counterDirectory.GetDevices()) {
-        PrintDeviceDetails(it);
-    }
-
-    std::string counterSetHeader;
-
-    counterSetHeader.append(CentreAlignFormatting("Counter set name", 20));
-    counterSetHeader.append(" | ");
-    counterSetHeader.append(CentreAlignFormatting("UID", 13));
-    counterSetHeader.append(" | ");
-    counterSetHeader.append(CentreAlignFormatting("Count", 10));
-    counterSetHeader.append("\n");
-
-    std::cout << "\n" << "\n";
-    std::cout << CentreAlignFormatting("COUNTER SETS", static_cast<int>(counterSetHeader.size()));
-    std::cout << "\n";
-    std::cout << std::string(counterSetHeader.size(), '=') << "\n";
-
-    std::cout << counterSetHeader;
-
-    for (auto& it: counterDirectory.GetCounterSets()) {
-        PrintCounterSetDetails(it);
-    }
-
-    auto counters = counterDirectory.GetCounters();
-    for (auto& it: counterDirectory.GetCategories()) {
-        PrintCategoryDetails(it, counters);
-    }
-    std::cout << "\n";
-}
-
 uint64_t GetTimestamp()
 {
 #if USE_CLOCK_MONOTONIC_RAW
diff --git a/src/profiling/ProfilingUtils.hpp b/src/profiling/ProfilingUtils.hpp
index 649ebfa..593dd6b 100644
--- a/src/profiling/ProfilingUtils.hpp
+++ b/src/profiling/ProfilingUtils.hpp
@@ -5,11 +5,11 @@
 
 #pragma once
 
+#include <common/include/ICounterDirectory.hpp>
 #include <common/include/ProfilingException.hpp>
 
 #include <armnn/profiling/ISendTimelinePacket.hpp>
 
-#include "ICounterDirectory.hpp"
 #include "IPacketBuffer.hpp"
 
 #include <common/include/Packet.hpp>
@@ -29,10 +29,6 @@
 
 constexpr unsigned int ThreadIdSize = sizeof(int); // Is platform dependent
 
-uint16_t GetNextUid(bool peekOnly = false);
-
-std::vector<uint16_t> GetNextCounterUids(uint16_t firstUid, uint16_t cores);
-
 void WriteBytes(const IPacketBuffer& packetBuffer, unsigned int offset, const void* value, unsigned int valueSize);
 
 uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetId);
@@ -132,8 +128,6 @@
 
 std::string CentreAlignFormatting(const std::string& stringToPass, const int spacingWidth);
 
-void PrintCounterDirectory(ICounterDirectory& counterDirectory);
-
 uint64_t GetTimestamp();
 
 arm::pipe::Packet ReceivePacket(const unsigned char* buffer, uint32_t length);
diff --git a/src/profiling/RegisterBackendCounters.hpp b/src/profiling/RegisterBackendCounters.hpp
index e3045b2..3d3b11a 100644
--- a/src/profiling/RegisterBackendCounters.hpp
+++ b/src/profiling/RegisterBackendCounters.hpp
@@ -5,11 +5,13 @@
 
 #pragma once
 
-#include "armnn/backends/profiling/IBackendProfiling.hpp"
 #include "CounterIdMap.hpp"
-#include "CounterDirectory.hpp"
 #include "IProfilingService.hpp"
 
+#include "armnn/backends/profiling/IBackendProfiling.hpp"
+
+#include <common/include/CounterDirectory.hpp>
+
 namespace arm
 {
 
diff --git a/src/profiling/SendCounterPacket.hpp b/src/profiling/SendCounterPacket.hpp
index c33bdcc..047dd3c 100644
--- a/src/profiling/SendCounterPacket.hpp
+++ b/src/profiling/SendCounterPacket.hpp
@@ -6,7 +6,6 @@
 #pragma once
 
 #include "IBufferManager.hpp"
-#include "ICounterDirectory.hpp"
 #include "ISendCounterPacket.hpp"
 #include "ProfilingUtils.hpp"
 
diff --git a/src/profiling/SendThread.hpp b/src/profiling/SendThread.hpp
index 6512c8a..f68a74c 100644
--- a/src/profiling/SendThread.hpp
+++ b/src/profiling/SendThread.hpp
@@ -7,13 +7,14 @@
 
 #include "IBufferManager.hpp"
 #include "IConsumer.hpp"
-#include "ICounterDirectory.hpp"
 #include "ISendCounterPacket.hpp"
 #include "ISendThread.hpp"
 #include "IProfilingConnection.hpp"
 #include "ProfilingStateMachine.hpp"
 #include "ProfilingUtils.hpp"
 
+#include <common/include/ICounterDirectory.hpp>
+
 #include <atomic>
 #include <condition_variable>
 #include <mutex>
diff --git a/src/profiling/test/ProfilingMocks.hpp b/src/profiling/test/ProfilingMocks.hpp
index cfc1096..80ac1fe 100644
--- a/src/profiling/test/ProfilingMocks.hpp
+++ b/src/profiling/test/ProfilingMocks.hpp
@@ -17,6 +17,7 @@
 #include <armnn/profiling/ArmNNProfiling.hpp>
 
 #include <common/include/Assert.hpp>
+#include <common/include/CommonProfilingUtils.hpp>
 #include <common/include/IgnoreUnused.hpp>
 #include <common/include/NumericCast.hpp>
 #include <common/include/Optional.hpp>
diff --git a/src/profiling/test/ProfilingTests.cpp b/src/profiling/test/ProfilingTests.cpp
index 19e5f1b..22b2ae2 100644
--- a/src/profiling/test/ProfilingTests.cpp
+++ b/src/profiling/test/ProfilingTests.cpp
@@ -9,7 +9,6 @@
 #include <ArmNNProfilingServiceInitialiser.hpp>
 #include <CommandHandler.hpp>
 #include <ConnectionAcknowledgedCommandHandler.hpp>
-#include <CounterDirectory.hpp>
 #include <CounterIdMap.hpp>
 #include <Holder.hpp>
 #include <ICounterValues.hpp>
@@ -34,6 +33,7 @@
 
 #include <common/include/CommandHandlerKey.hpp>
 #include <common/include/CommandHandlerRegistry.hpp>
+#include <common/include/CounterDirectory.hpp>
 #include <common/include/EncodeVersion.hpp>
 #include <common/include/IgnoreUnused.hpp>
 #include <common/include/NumericCast.hpp>
diff --git a/src/profiling/test/RequestCountersPacketHandler.cpp b/src/profiling/test/RequestCountersPacketHandler.cpp
index 0a71d3c..6a757c2 100644
--- a/src/profiling/test/RequestCountersPacketHandler.cpp
+++ b/src/profiling/test/RequestCountersPacketHandler.cpp
@@ -5,12 +5,12 @@
 
 #include "RequestCountersPacketHandler.hpp"
 
-#include "DirectoryCaptureCommandHandler.hpp"
-
 #include <common/include/NumericCast.hpp>
 #include <common/include/PacketVersionResolver.hpp>
 #include <common/include/ProfilingException.hpp>
 
+#include <server/include/timelineDecoder/DirectoryCaptureCommandHandler.hpp>
+
 namespace arm
 {
 
diff --git a/src/profiling/test/SendCounterPacketTests.cpp b/src/profiling/test/SendCounterPacketTests.cpp
index 4f7886a..4ba5eed 100644
--- a/src/profiling/test/SendCounterPacketTests.cpp
+++ b/src/profiling/test/SendCounterPacketTests.cpp
@@ -8,7 +8,6 @@
 #include "SendCounterPacketTests.hpp"
 
 #include <BufferManager.hpp>
-#include <CounterDirectory.hpp>
 #include <ProfilingUtils.hpp>
 #include <SendCounterPacket.hpp>
 
@@ -17,6 +16,7 @@
 #include <common/include/Assert.hpp>
 #include <common/include/Conversion.hpp>
 #include <common/include/Constants.hpp>
+#include <common/include/CounterDirectory.hpp>
 #include <common/include/EncodeVersion.hpp>
 #include <common/include/NumericCast.hpp>
 #include <common/include/Processes.hpp>
diff --git a/tests/profiling/gatordmock/GatordMockService.hpp b/tests/profiling/gatordmock/GatordMockService.hpp
index cc9cdd1..fa483e0 100644
--- a/tests/profiling/gatordmock/GatordMockService.hpp
+++ b/tests/profiling/gatordmock/GatordMockService.hpp
@@ -16,13 +16,11 @@
 
 #include <server/include/basePipeServer/BasePipeServer.hpp>
 
+#include <server/include/timelineDecoder/DirectoryCaptureCommandHandler.hpp>
 #include <server/include/timelineDecoder/TimelineDecoder.hpp>
 #include <server/include/timelineDecoder/TimelineCaptureCommandHandler.hpp>
 #include <server/include/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp>
 
-// src/profiling
-#include <DirectoryCaptureCommandHandler.hpp>
-
 #include <atomic>
 #include <string>
 #include <thread>
