diff --git a/Android.mk b/Android.mk
index b7aec59..688a188 100644
--- a/Android.mk
+++ b/Android.mk
@@ -157,6 +157,7 @@
         src/armnnUtils/VerificationHelpers.cpp \
         src/armnnUtils/Filesystem.cpp \
         src/armnnUtils/Processes.cpp \
+        src/armnnUtils/ProfilingOptionsConverter.cpp \
         src/armnnUtils/Threads.cpp \
         src/armnnUtils/Transpose.cpp \
         src/armnn/layers/ActivationLayer.cpp \
@@ -266,7 +267,7 @@
 
 LOCAL_STATIC_LIBRARIES := \
         libflatbuffers-framework \
-        arm_compute_library 
+        arm_compute_library
 
 LOCAL_SHARED_LIBRARIES := \
         liblog
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3ba5985..9e11571 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -106,6 +106,8 @@
     src/armnnUtils/ParserPrototxtFixture.hpp
     src/armnnUtils/Processes.hpp
     src/armnnUtils/Processes.cpp
+    src/armnnUtils/ProfilingOptionsConverter.hpp
+    src/armnnUtils/ProfilingOptionsConverter.cpp
     src/armnnUtils/PrototxtConversions.hpp
     src/armnnUtils/PrototxtConversions.cpp
     src/armnnUtils/TensorIOUtils.hpp
@@ -178,6 +180,7 @@
     include/armnn/Utils.hpp
     include/armnn/Version.hpp
     include/armnn/profiling/ISendTimelinePacket.hpp
+    include/armnn/profiling/ProfilingOptions.hpp
     include/armnn/utility/Assert.hpp
     include/armnn/utility/IgnoreUnused.hpp
     include/armnn/utility/NumericCast.hpp
diff --git a/delegate/include/DelegateOptions.hpp b/delegate/include/DelegateOptions.hpp
index 5bc2e59..5aa7939 100644
--- a/delegate/include/DelegateOptions.hpp
+++ b/delegate/include/DelegateOptions.hpp
@@ -8,6 +8,7 @@
 #include <armnn/ArmNN.hpp>
 #include <armnn/Logging.hpp>
 #include <armnn/Optional.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
 
 #include <set>
 #include <string>
@@ -229,10 +230,10 @@
     const armnn::ProfilingDetailsMethod& GetInternalProfilingDetail() const { return m_InternalProfilingDetail; }
 
     void SetExternalProfilingParams(
-        const armnn::IRuntime::CreationOptions::ExternalProfilingOptions& externalProfilingParams)
+        const armnn::profiling::ProfilingOptions& externalProfilingParams)
         { m_ProfilingOptions = externalProfilingParams; }
 
-    const armnn::IRuntime::CreationOptions::ExternalProfilingOptions& GetExternalProfilingParams() const
+    const armnn::profiling::ProfilingOptions& GetExternalProfilingParams() const
         { return m_ProfilingOptions; }
 
     void SetSerializeToDot(const std::string& serializeToDotFile) { m_SerializeToDot = serializeToDotFile; }
@@ -264,7 +265,7 @@
     armnn::OptimizerOptions m_OptimizerOptions;
 
     /// External profiling options.
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions m_ProfilingOptions;
+    armnn::profiling::ProfilingOptions m_ProfilingOptions;
 
     /// Internal profiling options.
     /// Indicates whether internal profiling is enabled or not.
diff --git a/delegate/src/DelegateOptions.cpp b/delegate/src/DelegateOptions.cpp
index d477d98..5cfddad 100644
--- a/delegate/src/DelegateOptions.cpp
+++ b/delegate/src/DelegateOptions.cpp
@@ -59,7 +59,7 @@
     armnn::OptimizerOptions optimizerOptions;
     bool internalProfilingState = false;
     armnn::ProfilingDetailsMethod internalProfilingDetail = armnn::ProfilingDetailsMethod::DetailsWithEvents;
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions extProfilingParams;
+    armnn::profiling::ProfilingOptions extProfilingParams;
     for (size_t i = 0; i < num_options; ++i)
     {
         // Process backends
diff --git a/include/armnn/profiling/ProfilingOptions.hpp b/include/armnn/profiling/ProfilingOptions.hpp
new file mode 100644
index 0000000..50cd50e
--- /dev/null
+++ b/include/armnn/profiling/ProfilingOptions.hpp
@@ -0,0 +1,53 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/profiling/ILocalPacketHandler.hpp>
+
+#include <string>
+#include <vector>
+
+namespace arm
+{
+namespace pipe
+{
+/// The lowest performance data capture interval we support is 10 miliseconds.
+constexpr unsigned int LOWEST_CAPTURE_PERIOD = 10000u;
+} // namespace pipe
+} // namespace arm
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+struct ProfilingOptions {
+    ProfilingOptions()
+    : m_EnableProfiling(false), m_TimelineEnabled(false), m_OutgoingCaptureFile(""),
+      m_IncomingCaptureFile(""), m_FileOnly(false), m_CapturePeriod(arm::pipe::LOWEST_CAPTURE_PERIOD),
+      m_FileFormat("binary"), m_LocalPacketHandlers() {}
+
+    /// Indicates whether external profiling is enabled or not.
+    bool m_EnableProfiling;
+    /// Indicates whether external timeline profiling is enabled or not.
+    bool m_TimelineEnabled;
+    /// Path to a file in which outgoing timeline profiling messages will be stored.
+    std::string m_OutgoingCaptureFile;
+    /// Path to a file in which incoming timeline profiling messages will be stored.
+    std::string m_IncomingCaptureFile;
+    /// Enable profiling output to file only.
+    bool m_FileOnly;
+    /// The duration at which captured profiling messages will be flushed.
+    uint32_t m_CapturePeriod;
+    /// The format of the file used for outputting profiling data.
+    std::string m_FileFormat;
+    std::vector <armnn::profiling::ILocalPacketHandlerSharedPtr> m_LocalPacketHandlers;
+};
+
+} // namespace profiling
+
+} // namespace armnn
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index 1abe0f3..4b9d0ae 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -14,6 +14,7 @@
 #include <backendsCommon/DynamicBackendUtils.hpp>
 #include <backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp>
 #include <armnn/utility/PolymorphicDowncast.hpp>
+#include <ProfilingOptionsConverter.hpp>
 
 #include <common/include/LabelsAndEventClasses.hpp>
 
@@ -474,7 +475,7 @@
 
             unique_ptr<armnn::profiling::IBackendProfiling> profilingIface =
                 std::make_unique<armnn::profiling::BackendProfiling>(armnn::profiling::BackendProfiling(
-                    options, m_ProfilingService, id));
+                    ConvertExternalProfilingOptions(options.m_ProfilingOptions), m_ProfilingService, id));
 
             // Backends may also provide a profiling context. Ask for it now.
             auto profilingContext = backend->CreateBackendProfilingContext(options, profilingIface);
@@ -493,7 +494,7 @@
 
     BackendRegistryInstance().SetProfilingService(m_ProfilingService);
     // pass configuration info to the profiling service
-    m_ProfilingService.ConfigureProfilingService(options.m_ProfilingOptions);
+    m_ProfilingService.ConfigureProfilingService(ConvertExternalProfilingOptions(options.m_ProfilingOptions));
     if (options.m_ProfilingOptions.m_EnableProfiling)
     {
         // try to wait for the profiling service to initialise
diff --git a/src/armnn/test/RuntimeTests.cpp b/src/armnn/test/RuntimeTests.cpp
index 045007b..e175c12 100644
--- a/src/armnn/test/RuntimeTests.cpp
+++ b/src/armnn/test/RuntimeTests.cpp
@@ -6,10 +6,12 @@
 #include <armnn/Descriptors.hpp>
 #include <armnn/IRuntime.hpp>
 #include <armnn/INetwork.hpp>
+#include <ProfilingOptionsConverter.hpp>
 #include <Processes.hpp>
 #include <Runtime.hpp>
 #include <armnn/TypesUtils.hpp>
 
+
 #include <common/include/LabelsAndEventClasses.hpp>
 #include <test/ProfilingTestUtils.hpp>
 
@@ -644,7 +646,8 @@
     options.m_ProfilingOptions.m_TimelineEnabled = true;
 
     armnn::RuntimeImpl runtime(options);
-    GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
+    GetProfilingService(&runtime).ResetExternalProfilingOptions(
+        ConvertExternalProfilingOptions(options.m_ProfilingOptions), false);
 
     profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
     profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
diff --git a/src/armnnUtils/ProfilingOptionsConverter.cpp b/src/armnnUtils/ProfilingOptionsConverter.cpp
new file mode 100644
index 0000000..6d5b351
--- /dev/null
+++ b/src/armnnUtils/ProfilingOptionsConverter.cpp
@@ -0,0 +1,30 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "ProfilingOptionsConverter.hpp"
+
+#include <algorithm>
+#include <iterator>
+
+namespace armnn
+{
+
+profiling::ProfilingOptions ConvertExternalProfilingOptions(
+    const IRuntime::CreationOptions::ExternalProfilingOptions& options)
+{
+    profiling::ProfilingOptions convertedOptions;
+    convertedOptions.m_EnableProfiling =     options.m_EnableProfiling;
+    convertedOptions.m_TimelineEnabled =     options.m_TimelineEnabled;
+    convertedOptions.m_OutgoingCaptureFile = options.m_OutgoingCaptureFile;
+    convertedOptions.m_IncomingCaptureFile = options.m_IncomingCaptureFile;
+    convertedOptions.m_FileOnly =            options.m_FileOnly;
+    convertedOptions.m_CapturePeriod =       options.m_CapturePeriod;
+    convertedOptions.m_FileFormat =          options.m_FileFormat;
+    std::copy(options.m_LocalPacketHandlers.begin(), options.m_LocalPacketHandlers.end(),
+        std::back_inserter(convertedOptions.m_LocalPacketHandlers));
+    return convertedOptions;
+}
+
+} // namespace armnn
diff --git a/src/armnnUtils/ProfilingOptionsConverter.hpp b/src/armnnUtils/ProfilingOptionsConverter.hpp
new file mode 100644
index 0000000..02be849
--- /dev/null
+++ b/src/armnnUtils/ProfilingOptionsConverter.hpp
@@ -0,0 +1,17 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/IRuntime.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
+
+namespace armnn
+{
+
+profiling::ProfilingOptions ConvertExternalProfilingOptions(
+    const IRuntime::CreationOptions::ExternalProfilingOptions& options);
+
+} // namespace armnn
diff --git a/src/backends/backendsCommon/test/BackendProfilingTests.cpp b/src/backends/backendsCommon/test/BackendProfilingTests.cpp
index b40964c..9769b4f 100644
--- a/src/backends/backendsCommon/test/BackendProfilingTests.cpp
+++ b/src/backends/backendsCommon/test/BackendProfilingTests.cpp
@@ -10,6 +10,7 @@
 #include "MockBackendId.hpp"
 #include "PeriodicCounterCapture.hpp"
 #include "PeriodicCounterSelectionCommandHandler.hpp"
+#include "ProfilingOptionsConverter.hpp"
 #include "ProfilingStateMachine.hpp"
 #include "ProfilingUtils.hpp"
 #include "RequestCounterDirectoryCommandHandler.hpp"
@@ -20,6 +21,7 @@
 #include <armnn/BackendId.hpp>
 #include <armnn/Logging.hpp>
 #include <armnn/profiling/ISendTimelinePacket.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
 
 #include <doctest/doctest.h>
 #include <vector>
@@ -140,7 +142,8 @@
     CHECK(counterMap.GetGlobalId(4, mockId) == 9 + shiftedId);
     CHECK(counterMap.GetGlobalId(5, mockId) == 10 + shiftedId);
     options.m_ProfilingOptions.m_EnableProfiling = false;
-    GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, true);
+    GetProfilingService(&runtime).ResetExternalProfilingOptions(
+        ConvertExternalProfilingOptions(options.m_ProfilingOptions), true);
 }
 
 TEST_CASE("TestBackendCounters")
@@ -155,8 +158,8 @@
     const armnn::BackendId cpuAccId(armnn::Compute::CpuAcc);
     const armnn::BackendId gpuAccId(armnn::Compute::GpuAcc);
 
-    armnn::IRuntime::CreationOptions options;
-    options.m_ProfilingOptions.m_EnableProfiling = true;
+    ProfilingOptions options;
+    options.m_EnableProfiling = true;
 
     armnn::profiling::ProfilingService profilingService;
 
@@ -403,8 +406,8 @@
     const armnn::BackendId cpuAccId(armnn::Compute::CpuAcc);
     const armnn::BackendId gpuAccId(armnn::Compute::GpuAcc);
 
-    armnn::IRuntime::CreationOptions options;
-    options.m_ProfilingOptions.m_EnableProfiling = true;
+    ProfilingOptions options;
+    options.m_EnableProfiling = true;
 
     armnn::profiling::ProfilingService profilingService;
 
@@ -459,7 +462,8 @@
     armnn::IRuntime::CreationOptions options;
     options.m_ProfilingOptions.m_EnableProfiling = true;
     armnn::profiling::ProfilingService profilingService;
-    profilingService.ConfigureProfilingService(options.m_ProfilingOptions, true);
+    profilingService.ConfigureProfilingService(
+        ConvertExternalProfilingOptions(options.m_ProfilingOptions), true);
 
     armnn::MockBackendInitialiser initialiser;
     // Create a runtime. During this the mock backend will be registered and context returned.
@@ -483,7 +487,8 @@
 
     // Reset the profiling servie after the test.
     options.m_ProfilingOptions.m_EnableProfiling = false;
-    profilingService.ResetExternalProfilingOptions(options.m_ProfilingOptions, true);
+    profilingService.ResetExternalProfilingOptions(
+        ConvertExternalProfilingOptions(options.m_ProfilingOptions), true);
 }
 
 TEST_CASE("GetProfilingGuidGenerator")
diff --git a/src/profiling/FileOnlyProfilingConnection.hpp b/src/profiling/FileOnlyProfilingConnection.hpp
index 9ad2c94..6204f91 100644
--- a/src/profiling/FileOnlyProfilingConnection.hpp
+++ b/src/profiling/FileOnlyProfilingConnection.hpp
@@ -50,7 +50,7 @@
 class FileOnlyProfilingConnection : public IProfilingConnection, public IInternalProfilingConnection
 {
 public:
-    explicit FileOnlyProfilingConnection(const IRuntime::CreationOptions::ExternalProfilingOptions& options)
+    explicit FileOnlyProfilingConnection(const ProfilingOptions& options)
         : m_Options(options)
         , m_Endianness(TargetEndianness::LeWire)    // Set a sensible default.
                                                     // StreamMetaDataProcessor will set a real value.
@@ -103,7 +103,7 @@
     void ForwardPacketToHandlers(arm::pipe::Packet& packet);
     void ServiceLocalHandlers();
 
-    IRuntime::CreationOptions::ExternalProfilingOptions m_Options;
+    ProfilingOptions m_Options;
     std::queue<arm::pipe::Packet> m_PacketQueue;
     TargetEndianness m_Endianness;
 
@@ -130,4 +130,4 @@
 
 }    // namespace profiling
 
-}    // namespace armnn
\ No newline at end of file
+}    // namespace armnn
diff --git a/src/profiling/IProfilingConnectionFactory.hpp b/src/profiling/IProfilingConnectionFactory.hpp
index c2bbc70..9b0eda0 100644
--- a/src/profiling/IProfilingConnectionFactory.hpp
+++ b/src/profiling/IProfilingConnectionFactory.hpp
@@ -7,7 +7,7 @@
 
 #include "IProfilingConnection.hpp"
 
-#include <armnn/IRuntime.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
 
 #include <memory>
 
@@ -20,12 +20,12 @@
 class IProfilingConnectionFactory
 {
 public:
-    using ExternalProfilingOptions = IRuntime::CreationOptions::ExternalProfilingOptions;
+    using ExternalProfilingOptions = ProfilingOptions;
     using IProfilingConnectionPtr = std::unique_ptr<IProfilingConnection>;
 
     virtual ~IProfilingConnectionFactory() {}
 
-    virtual IProfilingConnectionPtr GetProfilingConnection(const ExternalProfilingOptions& options) const = 0;
+    virtual IProfilingConnectionPtr GetProfilingConnection(const ProfilingOptions& options) const = 0;
 };
 
 } // namespace profiling
diff --git a/src/profiling/PeriodicCounterSelectionCommandHandler.cpp b/src/profiling/PeriodicCounterSelectionCommandHandler.cpp
index cb14ec0..f94cb31 100644
--- a/src/profiling/PeriodicCounterSelectionCommandHandler.cpp
+++ b/src/profiling/PeriodicCounterSelectionCommandHandler.cpp
@@ -6,7 +6,7 @@
 #include "PeriodicCounterSelectionCommandHandler.hpp"
 #include "ProfilingUtils.hpp"
 
-#include <armnn/Types.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
 #include <armnn/utility/NumericCast.hpp>
 
 #include <fmt/format.h>
@@ -86,9 +86,9 @@
         // Get the capture data
         uint32_t capturePeriod = captureData.GetCapturePeriod();
         // Validate that the capture period is within the acceptable range.
-        if (capturePeriod > 0  && capturePeriod < LOWEST_CAPTURE_PERIOD)
+        if (capturePeriod > 0  && capturePeriod < arm::pipe::LOWEST_CAPTURE_PERIOD)
         {
-            capturePeriod = LOWEST_CAPTURE_PERIOD;
+            capturePeriod = arm::pipe::LOWEST_CAPTURE_PERIOD;
         }
         const std::vector<uint16_t>& counterIds = captureData.GetCounterIds();
 
diff --git a/src/profiling/ProfilingConnectionDumpToFileDecorator.cpp b/src/profiling/ProfilingConnectionDumpToFileDecorator.cpp
index 9ac7cc0..f00d7fa 100644
--- a/src/profiling/ProfilingConnectionDumpToFileDecorator.cpp
+++ b/src/profiling/ProfilingConnectionDumpToFileDecorator.cpp
@@ -18,7 +18,7 @@
 
 ProfilingConnectionDumpToFileDecorator::ProfilingConnectionDumpToFileDecorator(
     std::unique_ptr<IProfilingConnection> connection,
-    const IRuntime::CreationOptions::ExternalProfilingOptions& options,
+    const ProfilingOptions& options,
     bool ignoreFailures)
       : m_Connection(std::move(connection))
       , m_Options(options)
diff --git a/src/profiling/ProfilingConnectionDumpToFileDecorator.hpp b/src/profiling/ProfilingConnectionDumpToFileDecorator.hpp
index f1b9324..bf79adc 100644
--- a/src/profiling/ProfilingConnectionDumpToFileDecorator.hpp
+++ b/src/profiling/ProfilingConnectionDumpToFileDecorator.hpp
@@ -27,7 +27,7 @@
 public:
 
     ProfilingConnectionDumpToFileDecorator(std::unique_ptr<IProfilingConnection> connection,
-                                           const IRuntime::CreationOptions::ExternalProfilingOptions& options,
+                                           const ProfilingOptions& options,
                                            bool ignoreFailures = false);
 
     ~ProfilingConnectionDumpToFileDecorator();
@@ -51,11 +51,11 @@
 
     void Fail(const std::string& errorMessage);
 
-    std::unique_ptr<IProfilingConnection>               m_Connection;
-    IRuntime::CreationOptions::ExternalProfilingOptions m_Options;
-    std::ofstream                                       m_IncomingDumpFileStream;
-    std::ofstream                                       m_OutgoingDumpFileStream;
-    bool                                                m_IgnoreFileErrors;
+    std::unique_ptr<IProfilingConnection> m_Connection;
+    ProfilingOptions                      m_Options;
+    std::ofstream                         m_IncomingDumpFileStream;
+    std::ofstream                         m_OutgoingDumpFileStream;
+    bool                                  m_IgnoreFileErrors;
 };
 
 } // namespace profiling
diff --git a/src/profiling/ProfilingConnectionFactory.cpp b/src/profiling/ProfilingConnectionFactory.cpp
index b5af5a7..fe42de4 100644
--- a/src/profiling/ProfilingConnectionFactory.cpp
+++ b/src/profiling/ProfilingConnectionFactory.cpp
@@ -16,7 +16,7 @@
 {
 
 std::unique_ptr<IProfilingConnection> ProfilingConnectionFactory::GetProfilingConnection(
-    const IRuntime::CreationOptions::ExternalProfilingOptions& options) const
+    const ProfilingOptions& options) const
 {
     // Before proceed to create the IProfilingConnection, check if the file format is supported
     if (!(options.m_FileFormat == "binary"))
diff --git a/src/profiling/ProfilingConnectionFactory.hpp b/src/profiling/ProfilingConnectionFactory.hpp
index fa8b32f..f767ed0 100644
--- a/src/profiling/ProfilingConnectionFactory.hpp
+++ b/src/profiling/ProfilingConnectionFactory.hpp
@@ -19,7 +19,7 @@
     ProfilingConnectionFactory()  = default;
     ~ProfilingConnectionFactory() = default;
 
-    IProfilingConnectionPtr GetProfilingConnection(const ExternalProfilingOptions& options) const override;
+    IProfilingConnectionPtr GetProfilingConnection(const ProfilingOptions& options) const override;
 };
 
 }    // namespace profiling
diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp
index fe407e4..c7ebee2 100644
--- a/src/profiling/ProfilingService.cpp
+++ b/src/profiling/ProfilingService.cpp
@@ -38,7 +38,7 @@
     m_GuidGenerator.Reset();
 }
 
-void ProfilingService::ResetExternalProfilingOptions(const ExternalProfilingOptions& options,
+void ProfilingService::ResetExternalProfilingOptions(const armnn::profiling::ProfilingOptions& options,
                                                      bool resetProfilingService)
 {
     // Update the profiling options
@@ -60,7 +60,7 @@
 }
 
 ProfilingState ProfilingService::ConfigureProfilingService(
-        const ExternalProfilingOptions& options,
+        const armnn::profiling::ProfilingOptions& options,
         bool resetProfilingService)
 {
     ResetExternalProfilingOptions(options, resetProfilingService);
diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp
index c705a49..af480f3 100644
--- a/src/profiling/ProfilingService.hpp
+++ b/src/profiling/ProfilingService.hpp
@@ -15,6 +15,7 @@
 #include "ICounterRegistry.hpp"
 #include "ICounterValues.hpp"
 #include <armnn/profiling/ILocalPacketHandler.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
 #include "IProfilingService.hpp"
 #include "IReportStructure.hpp"
 #include "PeriodicCounterCapture.hpp"
@@ -50,7 +51,6 @@
 class ProfilingService : public IReadWriteCounterValues, public IProfilingService, public INotifyBackends
 {
 public:
-    using ExternalProfilingOptions = IRuntime::CreationOptions::ExternalProfilingOptions;
     using IProfilingConnectionFactoryPtr = std::unique_ptr<IProfilingConnectionFactory>;
     using IProfilingConnectionPtr = std::unique_ptr<IProfilingConnection>;
     using CounterIndices = std::vector<std::atomic<uint32_t>*>;
@@ -149,8 +149,9 @@
     ~ProfilingService();
 
     // Resets the profiling options, optionally clears the profiling service entirely
-    void ResetExternalProfilingOptions(const ExternalProfilingOptions& options, bool resetProfilingService = false);
-    ProfilingState ConfigureProfilingService(const ExternalProfilingOptions& options,
+    void ResetExternalProfilingOptions(const armnn::profiling::ProfilingOptions& options,
+                                       bool resetProfilingService = false);
+    ProfilingState ConfigureProfilingService(const armnn::profiling::ProfilingOptions& options,
                                              bool resetProfilingService = false);
 
 
@@ -239,7 +240,7 @@
     void CheckCounterUid(uint16_t counterUid) const;
 
     // Profiling service components
-    ExternalProfilingOptions           m_Options;
+    ProfilingOptions                   m_Options;
     std::atomic<bool>                  m_TimelineReporting;
     CounterDirectory                   m_CounterDirectory;
     CounterIdMap                       m_CounterIdMap;
diff --git a/src/profiling/backends/BackendProfiling.hpp b/src/profiling/backends/BackendProfiling.hpp
index 71d0af1..5bf4655 100644
--- a/src/profiling/backends/BackendProfiling.hpp
+++ b/src/profiling/backends/BackendProfiling.hpp
@@ -17,7 +17,7 @@
 class BackendProfiling : public IBackendProfiling
 {
 public:
-    BackendProfiling(const IRuntime::CreationOptions& options,
+    BackendProfiling(const ProfilingOptions& options,
                      ProfilingService& profilingService,
                      const BackendId& backendId)
             : m_Options(options),
@@ -43,9 +43,9 @@
     bool IsProfilingEnabled() const override;
 
 private:
-    IRuntime::CreationOptions m_Options;
+    ProfilingOptions m_Options;
     ProfilingService& m_ProfilingService;
     BackendId m_BackendId;
 };
 }    // namespace profiling
-}    // namespace armnn
\ No newline at end of file
+}    // namespace armnn
diff --git a/src/profiling/test/FileOnlyProfilingDecoratorTests.cpp b/src/profiling/test/FileOnlyProfilingDecoratorTests.cpp
index a96de66..03767c0 100644
--- a/src/profiling/test/FileOnlyProfilingDecoratorTests.cpp
+++ b/src/profiling/test/FileOnlyProfilingDecoratorTests.cpp
@@ -6,6 +6,7 @@
 #include <armnnUtils/Filesystem.hpp>
 #include <ProfilingService.hpp>
 #include "ProfilingTestUtils.hpp"
+#include "ProfilingOptionsConverter.hpp"
 #include "PrintPacketHeaderHandler.hpp"
 #include <Runtime.hpp>
 #include "TestTimelinePacketHandler.hpp"
@@ -233,7 +234,8 @@
 
         // In order to flush the files we need to gracefully close the profiling service.
         options.m_ProfilingOptions.m_EnableProfiling = false;
-        GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, true);
+        GetProfilingService(&runtime).ResetExternalProfilingOptions(
+            ConvertExternalProfilingOptions(options.m_ProfilingOptions), true);
 
         // The output file size should be greater than 0.
         CHECK(fs::file_size(tempPath) > 0);
diff --git a/src/profiling/test/ProfilingConnectionDumpToFileDecoratorTests.cpp b/src/profiling/test/ProfilingConnectionDumpToFileDecoratorTests.cpp
index 2da3f2d..a851e94 100644
--- a/src/profiling/test/ProfilingConnectionDumpToFileDecoratorTests.cpp
+++ b/src/profiling/test/ProfilingConnectionDumpToFileDecoratorTests.cpp
@@ -78,7 +78,7 @@
 {
 TEST_CASE("DumpIncomingInvalidFile")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_IncomingCaptureFile = "/";
     options.m_OutgoingCaptureFile =  "";
     ProfilingConnectionDumpToFileDecorator decorator(std::make_unique<DummyProfilingConnection>(), options, false);
@@ -87,7 +87,7 @@
 
 TEST_CASE("DumpIncomingInvalidFileIgnoreErrors")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_IncomingCaptureFile = "/";
     options.m_OutgoingCaptureFile =  "";
     ProfilingConnectionDumpToFileDecorator decorator(std::make_unique<DummyProfilingConnection>(), options, true);
@@ -98,7 +98,7 @@
 {
     fs::path fileName = armnnUtils::Filesystem::NamedTempFile("Armnn-DumpIncomingValidFileTest-TempFile");
 
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_IncomingCaptureFile = fileName.string();
     options.m_OutgoingCaptureFile =  "";
 
@@ -122,7 +122,7 @@
 
 TEST_CASE("DumpOutgoingInvalidFile")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_IncomingCaptureFile = "";
     options.m_OutgoingCaptureFile = "/";
     ProfilingConnectionDumpToFileDecorator decorator(std::make_unique<DummyProfilingConnection>(), options, false);
@@ -131,7 +131,7 @@
 
 TEST_CASE("DumpOutgoingInvalidFileIgnoreErrors")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_IncomingCaptureFile = "";
     options.m_OutgoingCaptureFile = "/";
 
@@ -146,7 +146,7 @@
 {
     fs::path fileName = armnnUtils::Filesystem::NamedTempFile("Armnn-DumpOutgoingValidFileTest-TempFile");
 
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_IncomingCaptureFile = "";
     options.m_OutgoingCaptureFile = fileName.string();
 
diff --git a/src/profiling/test/ProfilingMocks.hpp b/src/profiling/test/ProfilingMocks.hpp
index e0acfbd..491f057 100644
--- a/src/profiling/test/ProfilingMocks.hpp
+++ b/src/profiling/test/ProfilingMocks.hpp
@@ -163,7 +163,7 @@
 class MockProfilingConnectionFactory : public IProfilingConnectionFactory
 {
 public:
-    IProfilingConnectionPtr GetProfilingConnection(const ExternalProfilingOptions& options) const override
+    IProfilingConnectionPtr GetProfilingConnection(const ProfilingOptions& options) const override
     {
         IgnoreUnused(options);
         return std::make_unique<MockProfilingConnection>();
diff --git a/src/profiling/test/ProfilingTestUtils.cpp b/src/profiling/test/ProfilingTestUtils.cpp
index 51f27d4..a03a3ba 100644
--- a/src/profiling/test/ProfilingTestUtils.cpp
+++ b/src/profiling/test/ProfilingTestUtils.cpp
@@ -3,6 +3,7 @@
 // SPDX-License-Identifier: MIT
 //
 
+#include "ProfilingOptionsConverter.hpp"
 #include "ProfilingTestUtils.hpp"
 #include "ProfilingUtils.hpp"
 
@@ -369,7 +370,8 @@
     options.m_ProfilingOptions.m_EnableProfiling = true;
     options.m_ProfilingOptions.m_TimelineEnabled = true;
     armnn::RuntimeImpl runtime(options);
-    GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
+    GetProfilingService(&runtime).ResetExternalProfilingOptions(
+        ConvertExternalProfilingOptions(options.m_ProfilingOptions), false);
 
     profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
     profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
diff --git a/src/profiling/test/ProfilingTests.cpp b/src/profiling/test/ProfilingTests.cpp
index 5e9a5e7..12a0105 100644
--- a/src/profiling/test/ProfilingTests.cpp
+++ b/src/profiling/test/ProfilingTests.cpp
@@ -18,6 +18,7 @@
 #include <ICounterValues.hpp>
 #include <PeriodicCounterCapture.hpp>
 #include <PeriodicCounterSelectionCommandHandler.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
 #include <ProfilingStateMachine.hpp>
 #include <ProfilingUtils.hpp>
 #include <RegisterBackendCounters.hpp>
@@ -29,7 +30,6 @@
 #include <SendTimelinePacket.hpp>
 
 #include <armnn/Conversion.hpp>
-#include <armnn/Types.hpp>
 
 #include <armnn/Utils.hpp>
 #include <armnn/utility/IgnoreUnused.hpp>
@@ -656,7 +656,7 @@
 
 TEST_CASE("CheckProfilingServiceDisabled")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
     CHECK(profilingService.GetCurrentState() == ProfilingState::Uninitialised);
@@ -666,7 +666,7 @@
 
 TEST_CASE("CheckProfilingServiceCounterDirectory")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
 
@@ -689,7 +689,7 @@
 
 TEST_CASE("CheckProfilingServiceCounterValues")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -1800,7 +1800,7 @@
     uint32_t sizeOfUint16 = armnn::numeric_cast<uint32_t>(sizeof(uint16_t));
 
     // Data with period and counters
-    uint32_t period1     = armnn::LOWEST_CAPTURE_PERIOD;
+    uint32_t period1     = arm::pipe::LOWEST_CAPTURE_PERIOD;
     uint32_t dataLength1 = 8;
     uint32_t offset      = 0;
 
@@ -1848,7 +1848,7 @@
     CHECK(((headerWord0 >> 26) & 0x3F) == 0);             // packet family
     CHECK(((headerWord0 >> 16) & 0x3FF) == 4);            // packet id
     CHECK(headerWord1 == 8);                              // data length
-    CHECK(period ==  armnn::LOWEST_CAPTURE_PERIOD);       // capture period
+    CHECK(period ==  arm::pipe::LOWEST_CAPTURE_PERIOD);   // capture period
 
     uint16_t counterId = 0;
     offset += sizeOfUint32;
@@ -1875,7 +1875,7 @@
     const std::vector<uint16_t> counterIdsB = holder.GetCaptureData().GetCounterIds();
 
     // Value should have been pulled up from 9000 to LOWEST_CAPTURE_PERIOD.
-    CHECK(holder.GetCaptureData().GetCapturePeriod() ==  armnn::LOWEST_CAPTURE_PERIOD);
+    CHECK(holder.GetCaptureData().GetCapturePeriod() ==  arm::pipe::LOWEST_CAPTURE_PERIOD);
     CHECK(counterIdsB.size() == 0);
 
     readBuffer = mockBuffer.GetReadableBuffer();
@@ -1888,10 +1888,10 @@
     offset += sizeOfUint32;
     period = ReadUint32(readBuffer, offset);
 
-    CHECK(((headerWord0 >> 26) & 0x3F) == 0);         // packet family
-    CHECK(((headerWord0 >> 16) & 0x3FF) == 4);        // packet id
-    CHECK(headerWord1 == 4);                          // data length
-    CHECK(period == armnn::LOWEST_CAPTURE_PERIOD);    // capture period
+    CHECK(((headerWord0 >> 26) & 0x3F) == 0);          // packet family
+    CHECK(((headerWord0 >> 16) & 0x3FF) == 4);         // packet id
+    CHECK(headerWord1 == 4);                           // data length
+    CHECK(period == arm::pipe::LOWEST_CAPTURE_PERIOD); // capture period
 }
 
 TEST_CASE("CheckTimelineActivationAndDeactivation")
@@ -2549,7 +2549,7 @@
     unsigned int streamMetadataPacketsize = GetStreamMetaDataPacketSize();
 
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -2609,7 +2609,7 @@
 TEST_CASE("CheckProfilingServiceGoodRequestCounterDirectoryPacket")
 {
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -2667,7 +2667,7 @@
 TEST_CASE("CheckProfilingServiceBadPeriodicCounterSelectionPacketInvalidCounterUid")
 {
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -2746,7 +2746,7 @@
 TEST_CASE("CheckProfilingServiceGoodPeriodicCounterSelectionPacketNoCounters")
 {
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -2811,7 +2811,7 @@
 TEST_CASE("CheckProfilingServiceGoodPeriodicCounterSelectionPacketSingleCounter")
 {
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -2888,7 +2888,7 @@
 TEST_CASE("CheckProfilingServiceGoodPeriodicCounterSelectionPacketMultipleCounters")
 {
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -2967,7 +2967,7 @@
 TEST_CASE("CheckProfilingServiceDisconnect")
 {
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -3025,7 +3025,7 @@
 TEST_CASE("CheckProfilingServiceGoodPerJobCounterSelectionPacket")
 {
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -3092,7 +3092,7 @@
 
 TEST_CASE("CheckConfigureProfilingServiceOn")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     CHECK(profilingService.GetCurrentState() == ProfilingState::Uninitialised);
@@ -3106,7 +3106,7 @@
 
 TEST_CASE("CheckConfigureProfilingServiceOff")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     armnn::profiling::ProfilingService profilingService;
     CHECK(profilingService.GetCurrentState() == ProfilingState::Uninitialised);
     profilingService.ConfigureProfilingService(options);
@@ -3121,7 +3121,7 @@
 {
     // Locally reduce log level to "Warning", as this test needs to parse a warning message from the standard output
     LogLevelSwapper logLevelSwapper(armnn::LogSeverity::Warning);
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -3152,7 +3152,7 @@
 {
     // Locally reduce log level to "Warning", as this test needs to parse a warning message from the standard output
     LogLevelSwapper logLevelSwapper(armnn::LogSeverity::Warning);
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
     CHECK(profilingService.GetCurrentState() == ProfilingState::Uninitialised);
@@ -3194,7 +3194,7 @@
     StreamRedirector streamRedirector(std::cout, ss.rdbuf());
 
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -3256,7 +3256,7 @@
     StreamRedirector streamRedirector(std::cout, ss.rdbuf());
 
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -3320,7 +3320,7 @@
     StreamRedirector streamRedirector(std::cout, ss.rdbuf());
 
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -3421,7 +3421,7 @@
     armnn::BackendId cpuRefId(armnn::Compute::CpuRef);
 
     // Reset the profiling service to the uninitialized state
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling          = true;
     ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
@@ -3468,12 +3468,12 @@
 
 TEST_CASE("CheckCounterStatusQuery")
 {
-    armnn::IRuntime::CreationOptions options;
-    options.m_ProfilingOptions.m_EnableProfiling = true;
+    ProfilingOptions options;
+    options.m_EnableProfiling = true;
 
     // Reset the profiling service to the uninitialized state
     ProfilingService profilingService;
-    profilingService.ResetExternalProfilingOptions(options.m_ProfilingOptions, true);
+    profilingService.ResetExternalProfilingOptions(options, true);
 
     const armnn::BackendId cpuRefId(armnn::Compute::CpuRef);
     const armnn::BackendId cpuAccId(armnn::Compute::CpuAcc);
@@ -3599,18 +3599,18 @@
     CHECK_EQ(inactiveCpuRefCounter.m_Enabled, false);
 
     // Reset the profiling service to stop any running thread
-    options.m_ProfilingOptions.m_EnableProfiling = false;
-    profilingService.ResetExternalProfilingOptions(options.m_ProfilingOptions, true);
+    options.m_EnableProfiling = false;
+    profilingService.ResetExternalProfilingOptions(options, true);
 }
 
 TEST_CASE("CheckRegisterCounters")
 {
-    armnn::IRuntime::CreationOptions options;
-    options.m_ProfilingOptions.m_EnableProfiling = true;
+    ProfilingOptions options;
+    options.m_EnableProfiling = true;
     MockBufferManager mockBuffer(1024);
 
     CaptureData captureData;
-    MockProfilingService mockProfilingService(mockBuffer, options.m_ProfilingOptions.m_EnableProfiling, captureData);
+    MockProfilingService mockProfilingService(mockBuffer, options.m_EnableProfiling, captureData);
     armnn::BackendId cpuRefId(armnn::Compute::CpuRef);
 
     mockProfilingService.RegisterMapping(6, 0, cpuRefId);
@@ -3667,7 +3667,7 @@
     LogLevelSwapper logLevelSwapper(armnn::LogSeverity::Warning);
 
     // Create profiling options.
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling = true;
     // Check the default value set to binary
     CHECK(options.m_FileFormat == "binary");
diff --git a/src/profiling/test/RequestCountersPacketHandler.hpp b/src/profiling/test/RequestCountersPacketHandler.hpp
index b5e4862..82bd313 100644
--- a/src/profiling/test/RequestCountersPacketHandler.hpp
+++ b/src/profiling/test/RequestCountersPacketHandler.hpp
@@ -5,8 +5,8 @@
 
 #pragma once
 
-#include <armnn/Types.hpp>
 #include <armnn/profiling/ILocalPacketHandler.hpp>
+#include <armnn/profiling/ProfilingOptions.hpp>
 #include "ProfilingUtils.hpp"
 
 #include <common/include/Packet.hpp>
@@ -20,7 +20,7 @@
 class RequestCountersPacketHandler : public ILocalPacketHandler
 {
 public:
-    explicit RequestCountersPacketHandler(uint32_t capturePeriod = LOWEST_CAPTURE_PERIOD) :
+    explicit RequestCountersPacketHandler(uint32_t capturePeriod = arm::pipe::LOWEST_CAPTURE_PERIOD) :
         m_CapturePeriod(capturePeriod),
         m_Connection(nullptr),
         m_CounterDirectoryMessageHeader(ConstructHeader(0, 2)) {}
@@ -45,4 +45,4 @@
 
 } // namespace profiling
 
-} // namespace armnn
\ No newline at end of file
+} // namespace armnn
diff --git a/src/profiling/test/SendTimelinePacketTests.cpp b/src/profiling/test/SendTimelinePacketTests.cpp
index 02c92af..a2076b8 100644
--- a/src/profiling/test/SendTimelinePacketTests.cpp
+++ b/src/profiling/test/SendTimelinePacketTests.cpp
@@ -7,6 +7,7 @@
 
 #include <BufferManager.hpp>
 #include <ProfilingService.hpp>
+#include "ProfilingOptionsConverter.hpp"
 #include <ProfilingUtils.hpp>
 #include <SendTimelinePacket.hpp>
 #include <armnnUtils/Threads.hpp>
@@ -430,7 +431,8 @@
     armnn::RuntimeImpl runtime(options);
     armnn::profiling::ProfilingService profilingService(runtime);
 
-    profilingService.ResetExternalProfilingOptions(options.m_ProfilingOptions, true);
+    profilingService.ResetExternalProfilingOptions(
+        ConvertExternalProfilingOptions(options.m_ProfilingOptions), true);
     ProfilingStaticGuid staticGuid = profilingService.GetStaticId("dummy");
     std::hash<std::string> hasher;
     uint64_t hash = static_cast<uint64_t>(hasher("dummy"));
@@ -446,7 +448,7 @@
 
 TEST_CASE("GetTimelinePackerWriterFromProfilingService")
 {
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    ProfilingOptions options;
     options.m_EnableProfiling = true;
     armnn::profiling::ProfilingService profilingService;
     profilingService.ResetExternalProfilingOptions(options, true);
diff --git a/tests/ExecuteNetwork/ExecuteNetwork.cpp b/tests/ExecuteNetwork/ExecuteNetwork.cpp
index abcda40..1f19584 100644
--- a/tests/ExecuteNetwork/ExecuteNetwork.cpp
+++ b/tests/ExecuteNetwork/ExecuteNetwork.cpp
@@ -11,6 +11,7 @@
 #include <armnn/Logging.hpp>
 #include <armnnUtils/Filesystem.hpp>
 #include <armnnUtils/TContainer.hpp>
+#include <ProfilingOptionsConverter.hpp>
 #include <InferenceTest.hpp>
 
 #if defined(ARMNN_SERIALIZER)
@@ -90,7 +91,8 @@
         // Create the Armnn Delegate
         // Populate a DelegateOptions from the ExecuteNetworkParams.
         armnnDelegate::DelegateOptions delegateOptions = params.ToDelegateOptions();
-        delegateOptions.SetExternalProfilingParams(runtimeOptions.m_ProfilingOptions);
+        delegateOptions.SetExternalProfilingParams(
+            ConvertExternalProfilingOptions(runtimeOptions.m_ProfilingOptions));
 
         std::unique_ptr<TfLiteDelegate, decltype(&armnnDelegate::TfLiteArmnnDelegateDelete)>
                 theArmnnDelegate(armnnDelegate::TfLiteArmnnDelegateCreate(delegateOptions),
diff --git a/tests/profiling/gatordmock/tests/GatordMockTests.cpp b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
index 388de36..f76b293 100644
--- a/tests/profiling/gatordmock/tests/GatordMockTests.cpp
+++ b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
@@ -250,7 +250,7 @@
     arm::pipe::ConnectionHandler connectionHandler(udsNamespace, false);
 
     // Enable the profiling service.
-    armnn::IRuntime::CreationOptions::ExternalProfilingOptions options;
+    armnn::profiling::ProfilingOptions options;
     options.m_EnableProfiling = true;
     options.m_TimelineEnabled = true;
 
