diff --git a/src/profiling/SendCounterPacket.cpp b/src/profiling/SendCounterPacket.cpp
index 6a30c65..4586d9a 100644
--- a/src/profiling/SendCounterPacket.cpp
+++ b/src/profiling/SendCounterPacket.cpp
@@ -6,16 +6,14 @@
 #include "SendCounterPacket.hpp"
 
 #include <common/include/Assert.hpp>
+#include <common/include/Conversion.hpp>
 #include <common/include/Constants.hpp>
 #include <common/include/EncodeVersion.hpp>
 #include <common/include/ProfilingException.hpp>
 #include <common/include/SwTrace.hpp>
 
-#include <armnn/Conversion.hpp>
 #include <Processes.hpp>
 
-#include <armnn/utility/NumericCast.hpp>
-
 #include <fmt/format.h>
 
 #include <cstring>
@@ -275,7 +273,7 @@
     // Allocate the necessary space for the category record
     categoryRecord.resize(categoryRecordSize);
 
-    ARMNN_NO_CONVERSION_WARN_BEGIN
+    ARM_PIPE_NO_CONVERSION_WARN_BEGIN
     // Create the category record
     categoryRecord[0] = categoryRecordWord1; // event_count + reserved
     categoryRecord[1] = categoryRecordWord2; // event_pointer_table_offset
@@ -290,7 +288,7 @@
         std::copy(eventRecord.begin(), eventRecord.end(), offset); // event_record
         offset += eventRecord.size();
     }
-    ARMNN_NO_CONVERSION_WARN_END
+    ARM_PIPE_NO_CONVERSION_WARN_END
 
     return true;
 }
@@ -523,7 +521,7 @@
     // Allocate the space for the event record
     eventRecord.resize(eventRecordSize);
 
-    ARMNN_NO_CONVERSION_WARN_BEGIN
+    ARM_PIPE_NO_CONVERSION_WARN_BEGIN
     // Create the event record
     eventRecord[0] = eventRecordWord0; // max_counter_uid + counter_uid
     eventRecord[1] = eventRecordWord1; // device + counter_set
@@ -542,7 +540,7 @@
         offset += counterDescriptionBuffer.size();
         std::copy(counterUnitsBuffer.begin(), counterUnitsBuffer.end(), offset); // units
     }
-    ARMNN_NO_CONVERSION_WARN_END
+    ARM_PIPE_NO_CONVERSION_WARN_END
 
     return true;
 }
@@ -762,7 +760,7 @@
         bodyHeaderWord5  // categories_pointer_table_offset
     };
 
-    ARMNN_NO_CONVERSION_WARN_BEGIN
+    ARM_PIPE_NO_CONVERSION_WARN_BEGIN
     // Create the counter directory packet
     auto counterDirectoryPacketOffset = counterDirectoryPacket.begin();
     // packet_header
@@ -798,7 +796,7 @@
         std::copy(categoryRecord.begin(), categoryRecord.end(), counterDirectoryPacketOffset); // category_record
         counterDirectoryPacketOffset += categoryRecord.size();
     }
-    ARMNN_NO_CONVERSION_WARN_END
+    ARM_PIPE_NO_CONVERSION_WARN_END
 
     // Calculate the total size in bytes of the counter directory packet
     uint32_t totalSize = arm::pipe::numeric_cast<uint32_t>(counterDirectoryPacketSize * uint32_t_size);
diff --git a/src/profiling/SendThread.cpp b/src/profiling/SendThread.cpp
index c09a656..1459ae5 100644
--- a/src/profiling/SendThread.cpp
+++ b/src/profiling/SendThread.cpp
@@ -6,7 +6,6 @@
 #include "SendThread.hpp"
 #include "ProfilingUtils.hpp"
 
-#include <armnn/Conversion.hpp>
 #include <common/include/NumericCast.hpp>
 
 #include <common/include/ProfilingException.hpp>
diff --git a/src/profiling/test/ProfilingMocks.hpp b/src/profiling/test/ProfilingMocks.hpp
index 4af2b60..4da167a 100644
--- a/src/profiling/test/ProfilingMocks.hpp
+++ b/src/profiling/test/ProfilingMocks.hpp
@@ -14,7 +14,6 @@
 #include <SendThread.hpp>
 
 #include <armnn/Optional.hpp>
-#include <armnn/Conversion.hpp>
 
 #include <common/include/Assert.hpp>
 #include <common/include/IgnoreUnused.hpp>
diff --git a/src/profiling/test/ProfilingTests.cpp b/src/profiling/test/ProfilingTests.cpp
index 9c3007b..0851318 100644
--- a/src/profiling/test/ProfilingTests.cpp
+++ b/src/profiling/test/ProfilingTests.cpp
@@ -25,7 +25,6 @@
 #include <SendThread.hpp>
 #include <SendTimelinePacket.hpp>
 
-#include <armnn/Conversion.hpp>
 #include <armnn/Utils.hpp>
 
 #include <armnn/profiling/ArmNNProfiling.hpp>
diff --git a/src/profiling/test/SendCounterPacketTests.cpp b/src/profiling/test/SendCounterPacketTests.cpp
index e946871..4ae2c55 100644
--- a/src/profiling/test/SendCounterPacketTests.cpp
+++ b/src/profiling/test/SendCounterPacketTests.cpp
@@ -13,10 +13,10 @@
 #include <SendCounterPacket.hpp>
 #include <Processes.hpp>
 
-#include <armnn/Conversion.hpp>
 #include <armnn/Utils.hpp>
 
 #include <common/include/Assert.hpp>
+#include <common/include/Conversion.hpp>
 #include <common/include/Constants.hpp>
 #include <common/include/EncodeVersion.hpp>
 #include <common/include/NumericCast.hpp>
@@ -605,7 +605,7 @@
     CHECK(eventRecordWord2[1] == counterInterpolation); // interpolation
     CHECK(std::memcmp(eventRecordWord34, &counterMultiplier, sizeof(counterMultiplier)) == 0); // multiplier
 
-    ARMNN_NO_CONVERSION_WARN_BEGIN
+    ARM_PIPE_NO_CONVERSION_WARN_BEGIN
     uint32_t eventRecordBlockSize = 8u * sizeof(uint32_t);
     uint32_t counterNameOffset = eventRecordBlockSize; // The name is the first item in pool
     uint32_t counterDescriptionOffset = counterNameOffset + // Counter name offset
@@ -620,7 +620,7 @@
                                 1u + // Null-terminator
                                 2u;  // Rounding to the next word
 
-    ARMNN_NO_CONVERSION_WARN_END
+    ARM_PIPE_NO_CONVERSION_WARN_END
 
     CHECK(eventRecord[5] == counterNameOffset); // name_offset
     CHECK(eventRecord[6] == counterDescriptionOffset); // description_offset
@@ -729,7 +729,7 @@
     CHECK(eventRecordWord2[1] == counterInterpolation); // interpolation
     CHECK(std::memcmp(eventRecordWord34, &counterMultiplier, sizeof(counterMultiplier)) == 0); // multiplier
 
-    ARMNN_NO_CONVERSION_WARN_BEGIN
+    ARM_PIPE_NO_CONVERSION_WARN_BEGIN
     uint32_t eventRecordBlockSize = 8u * sizeof(uint32_t);
     uint32_t counterNameOffset = eventRecordBlockSize; // The name is the first item in pool
     uint32_t counterDescriptionOffset = counterNameOffset + // Counter name offset
@@ -737,7 +737,7 @@
                                         counterName.size() + // 18u
                                         1u + // Null-terminator
                                         1u; // Rounding to the next word
-    ARMNN_NO_CONVERSION_WARN_END
+    ARM_PIPE_NO_CONVERSION_WARN_END
 
     CHECK(eventRecord[5] == counterNameOffset); // name_offset
     CHECK(eventRecord[6] == counterDescriptionOffset); // description_offset
@@ -964,12 +964,12 @@
 
     size_t uint32_t_size = sizeof(uint32_t);
 
-    ARMNN_NO_CONVERSION_WARN_BEGIN
+    ARM_PIPE_NO_CONVERSION_WARN_BEGIN
     uint32_t categoryRecordBlockSize = 3u * uint32_t_size;
     uint32_t eventPointerTableOffset = categoryRecordBlockSize; // The event pointer table is the first item in pool
     uint32_t categoryNameOffset = eventPointerTableOffset + // Event pointer table offset
                                   categoryEventCount * uint32_t_size; // The size of the event pointer table
-    ARMNN_NO_CONVERSION_WARN_END
+    ARM_PIPE_NO_CONVERSION_WARN_END
 
     CHECK(categoryRecord[1] == eventPointerTableOffset); // event_pointer_table_offset
     CHECK(categoryRecord[2] == categoryNameOffset); // name_offset
diff --git a/src/profiling/test/SendCounterPacketTests.hpp b/src/profiling/test/SendCounterPacketTests.hpp
index de731c8..1f1c3f0 100644
--- a/src/profiling/test/SendCounterPacketTests.hpp
+++ b/src/profiling/test/SendCounterPacketTests.hpp
@@ -11,7 +11,6 @@
 #include <IProfilingConnectionFactory.hpp>
 
 #include <armnn/Optional.hpp>
-#include <armnn/Conversion.hpp>
 
 #include <common/include/IgnoreUnused.hpp>
 #include <common/include/NumericCast.hpp>
