diff --git a/source/application/main/Main.cc b/source/application/main/Main.cc
index e27d5b5..4b1f8f4 100644
--- a/source/application/main/Main.cc
+++ b/source/application/main/Main.cc
@@ -25,7 +25,7 @@
 
 #include <cstdio>
 
-extern void main_loop(hal_platform& platform);
+extern void main_loop();
 
 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
 __ASM(" .global __ARM_use_no_argv\n");
@@ -41,13 +41,7 @@
 
 int main ()
 {
-    hal_platform    platform;
-    platform_timer  timer;
-
-    /* Initialise the HAL and platform. */
-    hal_init(&platform, &timer);
-
-    if (0 == hal_platform_init(&platform)) {
+    if (hal_platform_init()) {
         /* Application information, UART should have been initialised. */
         print_application_intro();
 
@@ -55,13 +49,13 @@
         PrintTensorFlowVersion();
 
         /* Run the application. */
-        main_loop(platform);
+        main_loop();
     }
 
     /* This is unreachable without errors. */
     info("program terminating...\n");
 
     /* Release platform. */
-    hal_platform_release(&platform);
+    hal_platform_release();
     return 0;
 }
diff --git a/source/hal/CMakeLists.txt b/source/hal/CMakeLists.txt
index 37bf267..74256bb 100644
--- a/source/hal/CMakeLists.txt
+++ b/source/hal/CMakeLists.txt
@@ -39,7 +39,7 @@
 target_sources(${HAL_TARGET}
     PRIVATE
     source/hal.c
-    source/hal_timer.c)
+    source/hal_pmu.c)
 
 if (DEFINED VERIFY_TEST_OUTPUT)
     message(STATUS "Test output verification flag is: ${VERIFY_TEST_OUTPUT}")
diff --git a/source/hal/include/hal.h b/source/hal/include/hal.h
index 25ea1e2..5d1964d 100644
--- a/source/hal/include/hal.h
+++ b/source/hal/include/hal.h
@@ -29,47 +29,25 @@
 #endif
 
 #include "platform_drivers.h"   /* Platform drivers */
-#include "timer.h"              /* Timer/profiler API */
+#include "hal_pmu.h"              /* Timer/profiler API */
 #include "hal_lcd.h"            /* LCD functions */
 
 #include <inttypes.h>
 #include <stdbool.h>
 
-/* Structure to define a platform context to be used by the application */
-typedef struct hal_platform_context {
-    int inited;                         /**< initialised */
-    char plat_name[64];                 /**< name of this platform */
-    platform_timer* timer;              /**< timer */
-    int (* platform_init)();            /**< pointer to platform initialisation function */
-    void (* platform_release)();        /**< pointer to platform release function */
-} hal_platform;
-
-/**
- * @brief           Initialise the HAL structure based on compile time config. This
- *                  should be called before any other function in this API.
- * @param[in,out]   platform    Pointer to a pre-allocated platform struct.
- * @param[in,out]   timer       Pointer to a pre-allocated timer module.
- * @return          0 if successful, error code otherwise.
- **/
-int hal_init(hal_platform* platform, platform_timer* timer);
-
-
 /**
  * @brief       Initialise the HAL platform. This will go and initialise all the
  *              modules on the platform the application requires to run.
- * @param[in]   platform    Pointer to a pre-allocated and initialised
- *                          platform structure.
- * @return      0 if successful, error code otherwise.
+ * @return      True if successful, false otherwise.
  **/
-int hal_platform_init(hal_platform* platform);
+bool hal_platform_init(void);
 
 
 /**
  * @brief       Release the HAL platform. This should release resources acquired.
- * @param[in]   platform    pointer to a pre-allocated and initialised
  *                          platform structure.
  **/
-void hal_platform_release(hal_platform* platform);
+void hal_platform_release(void);
 
 /**
  * @brief       Gets user input from the stdin interface.
diff --git a/source/hal/include/hal_pmu.h b/source/hal/include/hal_pmu.h
new file mode 100644
index 0000000..5bfe517
--- /dev/null
+++ b/source/hal/include/hal_pmu.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef HAL_PMU_H
+#define HAL_PMU_H
+
+#include "platform_pmu.h"
+
+/**
+ * @brief   Initialise the PMU available for the platform.
+ **/
+void hal_pmu_init(void);
+
+/**
+ * @brief   Resets the counters.
+ */
+void hal_pmu_reset(void);
+
+/**
+ * @brief       Gets the current counter values.
+ * @param[out]  Pointer to a pmu_counters object.
+ **/
+void hal_pmu_get_counters(pmu_counters* counters);
+
+#endif /* HAL_PMU_H */
diff --git a/source/hal/include/timer.h b/source/hal/include/timer.h
deleted file mode 100644
index 9910fcf..0000000
--- a/source/hal/include/timer.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2022 Arm Limited. All rights reserved.
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef HAL_TIMER_H
-#define HAL_TIMER_H
-
-#include "platform_drivers.h"  /* Platform package API */
-#include "user_input.h"        /* PMU structs and API */
-
-/* Structure to hold a platform specific timer implementation */
-typedef struct _platform_timer {
-    int inited;                           /**< Initialised or not. */
-    void (* reset)(void);                 /**< Reset the timer. */
-    pmu_counters (* get_counters)(void);  /**< Gets the current time counter. */
-
-} platform_timer;
-
-/**
- * @brief   Initialise the timer available for the platform.
- **/
-void init_timer(platform_timer* timer);
-
-#endif /* HAL_TIMER_H */
diff --git a/source/hal/source/components/npu/ethosu_profiler.c b/source/hal/source/components/npu/ethosu_profiler.c
index 3ac3497..5d50b09 100644
--- a/source/hal/source/components/npu/ethosu_profiler.c
+++ b/source/hal/source/components/npu/ethosu_profiler.c
@@ -22,6 +22,8 @@
 
 extern struct ethosu_driver ethosu_drv;     /* Default Arm Ethos-U NPU device driver object */
 static ethosu_pmu_counters npu_counters;    /* NPU counter local instance */
+static const char* unit_beats = "beats";
+static const char* unit_cycles = "cycles";
 
 /**
  * @brief Gets the npu counter instance to be used.
@@ -59,29 +61,29 @@
     counters->npu_evt_counters[0].event_type = ETHOSU_PMU_NPU_IDLE;
     counters->npu_evt_counters[0].event_mask = ETHOSU_PMU_CNT1_Msk;
     counters->npu_evt_counters[0].name = "NPU IDLE";
-    counters->npu_evt_counters[0].unit = "cycles";
+    counters->npu_evt_counters[0].unit = unit_cycles;
 
     counters->npu_evt_counters[1].event_type = ETHOSU_PMU_AXI0_RD_DATA_BEAT_RECEIVED;
     counters->npu_evt_counters[1].event_mask = ETHOSU_PMU_CNT2_Msk;
     counters->npu_evt_counters[1].name = "NPU AXI0_RD_DATA_BEAT_RECEIVED";
-    counters->npu_evt_counters[1].unit = "beats";
+    counters->npu_evt_counters[1].unit = unit_beats;
 
     counters->npu_evt_counters[2].event_type = ETHOSU_PMU_AXI0_WR_DATA_BEAT_WRITTEN;
     counters->npu_evt_counters[2].event_mask = ETHOSU_PMU_CNT3_Msk;
     counters->npu_evt_counters[2].name = "NPU AXI0_WR_DATA_BEAT_WRITTEN";
-    counters->npu_evt_counters[2].unit = "beats";
+    counters->npu_evt_counters[2].unit = unit_beats;
 
     counters->npu_evt_counters[3].event_type = ETHOSU_PMU_AXI1_RD_DATA_BEAT_RECEIVED;
     counters->npu_evt_counters[3].event_mask = ETHOSU_PMU_CNT4_Msk;
     counters->npu_evt_counters[3].name = "NPU AXI1_RD_DATA_BEAT_RECEIVED";
-    counters->npu_evt_counters[3].unit = "beats";
+    counters->npu_evt_counters[3].unit = unit_beats;
 #else /* ETHOSU_PMU_NCOUNTERS >= 4 */
     #error "NPU PMU expects a minimum of 4 available event triggered counters!"
 #endif /* ETHOSU_PMU_NCOUNTERS >= 4 */
 
 #if ETHOSU_DERIVED_NCOUNTERS >= 1
     counters->npu_derived_counters[0].name = "NPU ACTIVE";
-    counters->npu_derived_counters[0].unit = "cycles";
+    counters->npu_derived_counters[0].unit = unit_cycles;
 #endif /* ETHOSU_DERIVED_NCOUNTERS >= 1 */
 
     for (i = 0; i < ETHOSU_PMU_NCOUNTERS; ++i) {
diff --git a/source/hal/source/components/npu/include/ethosu_profiler.h b/source/hal/source/components/npu/include/ethosu_profiler.h
index ca95b19..093c07f 100644
--- a/source/hal/source/components/npu/include/ethosu_profiler.h
+++ b/source/hal/source/components/npu/include/ethosu_profiler.h
@@ -29,14 +29,14 @@
     enum ethosu_pmu_event_type event_type;
     uint32_t event_mask;
     uint32_t counter_value;
-    char* unit;
-    char* name;
+    const char* unit;
+    const char* name;
 } npu_evt_counter;
 
 typedef struct npu_derived_counter_ {
     uint32_t counter_value;
-    char* unit;
-    char* name;
+    const char* unit;
+    const char* name;
 } npu_derived_counter;
 
 typedef struct ethosu_pmu_counters_ {
diff --git a/source/hal/source/components/platform_pmu/include/platform_pmu.h b/source/hal/source/components/platform_pmu/include/platform_pmu.h
index 3724e57..b3fd8e8 100644
--- a/source/hal/source/components/platform_pmu/include/platform_pmu.h
+++ b/source/hal/source/components/platform_pmu/include/platform_pmu.h
@@ -50,10 +50,10 @@
 void platform_reset_counters(void);
 
 /**
- * @brief   Gets the current counter values.
- * @returns A populated instance of pmu_counters struct.
+ * @brief       Gets the current counter values.
+ * @param[out]  Pointer to a pmu_counters object.
  **/
-pmu_counters platform_get_counters(void);
+void platform_get_counters(pmu_counters* counters);
 
 #ifdef __cplusplus
 }
diff --git a/source/hal/source/hal.c b/source/hal/source/hal.c
index d6028e7..4651bfd 100644
--- a/source/hal/source/hal.c
+++ b/source/hal/source/hal.c
@@ -19,62 +19,29 @@
 #include "platform_drivers.h"   /* Platform drivers */
 #include "log_macros.h"         /* Logging macros */
 
-#include <stdio.h>
-#include <assert.h>
-#include <string.h>
-
-int hal_init(hal_platform* platform, platform_timer* timer)
+bool hal_platform_init(void)
 {
-    platform->timer     = timer;
-    platform->platform_init     = platform_init;
-    platform->platform_release  = platform_release;
-    platform_name(platform->plat_name, sizeof(platform->plat_name));
-
-    return 0;
-}
-
-/**
- * @brief  Local helper function to clean the slate for current platform.
- **/
-static void hal_platform_clear(hal_platform* platform)
-{
-    assert(platform);
-    platform->inited = 0;
-}
-
-int hal_platform_init(hal_platform* platform)
-{
-    int state;
-    assert(platform && platform->platform_init);
-    hal_platform_clear(platform);
-
     /* Initialise platform */
-    if (0 != (state = platform->platform_init())) {
-        printf_err("Failed to initialise platform %s\n", platform->plat_name);
-        return state;
+    if (0 != platform_init()) {
+        printf_err("Failed to initialise platform %s\n", platform_name());
+        return false;
     }
 
     /* Initialise LCD */
-    if (0 != (state = hal_lcd_init())) {
+    if (0 != hal_lcd_init()) {
         printf_err("hal_lcd_init failed\n");
-        return state;
+        return false;
     }
 
-    /* Initialise the timer module */
-    init_timer(platform->timer);
+    /* Initialise PMU */
+    hal_pmu_init();
 
-    info("%s platform initialised\n", platform->plat_name);
-    platform->inited = !state;
-    return state;
+    return true;
 }
 
-void hal_platform_release(hal_platform *platform)
+void hal_platform_release(void)
 {
-    assert(platform && platform->platform_release);
-
-    hal_platform_clear(platform);
-    info("Releasing platform %s\n", platform->plat_name);
-    platform->platform_release();
+    platform_release();
 }
 
 bool hal_get_user_input(char* user_input, int size)
diff --git a/source/hal/source/hal_timer.c b/source/hal/source/hal_pmu.c
similarity index 61%
rename from source/hal/source/hal_timer.c
rename to source/hal/source/hal_pmu.c
index 0488afa..c89128d 100644
--- a/source/hal/source/hal_timer.c
+++ b/source/hal/source/hal_pmu.c
@@ -14,26 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "timer.h"
-#include "log_macros.h"
+#include "hal_pmu.h"
 #include "platform_drivers.h"
 
-#include <assert.h>
-#include <string.h>
-#include <inttypes.h>
-
-/**
- * @brief       Initialiser for HAL timer.
- * @param[in]   timer  Platform timer to initialize.
- **/
-void init_timer(platform_timer* timer)
+void hal_pmu_init(void)
 {
-    assert(timer);
-    memset(timer, 0, sizeof(*timer));
+    platform_reset_counters();
+}
 
-    timer->reset = platform_reset_counters;
-    timer->get_counters = platform_get_counters;
+void hal_pmu_reset(void)
+{
+    platform_reset_counters();
+}
 
-    timer->reset();
-    timer->inited = 1;
+void hal_pmu_get_counters(pmu_counters* counters)
+{
+    platform_get_counters(counters);
 }
diff --git a/source/hal/source/platform/mps3/include/platform_drivers.h b/source/hal/source/platform/mps3/include/platform_drivers.h
index 8b699d5..de03bcd 100644
--- a/source/hal/source/platform/mps3/include/platform_drivers.h
+++ b/source/hal/source/platform/mps3/include/platform_drivers.h
@@ -38,10 +38,9 @@
 void platform_release(void);
 
 /**
- * @brief   Sets the platform name.
- * @param[out] name     Name of the platform to be set
- * @param[in]  size     Size of the input buffer
+ * @brief   Gets the platform name.
+ * @return  Pointer to the name
  */
-void platform_name(char* name, size_t size);
+const char* platform_name(void);
 
 #endif /* PLATFORM_DRIVERS_H */
diff --git a/source/hal/source/platform/mps3/include/timer_mps3.h b/source/hal/source/platform/mps3/include/timer_mps3.h
index b370e89..dcec980 100644
--- a/source/hal/source/platform/mps3/include/timer_mps3.h
+++ b/source/hal/source/platform/mps3/include/timer_mps3.h
@@ -44,10 +44,10 @@
 void platform_reset_counters(void);
 
 /**
- * @brief   Gets the current counter values.
- * @returns A populated instance of pmu_counters struct.
+ * @brief       Gets the current counter values.
+ * @param[out]  Pointer to a pmu_counters object.
  **/
-pmu_counters platform_get_counters(void);
+void platform_get_counters(pmu_counters* counters);
 
 /**
  * @brief  Gets the MPS3 core clock
diff --git a/source/hal/source/platform/mps3/source/platform_drivers.c b/source/hal/source/platform/mps3/source/platform_drivers.c
index 17ccdf2..d1c3da2 100644
--- a/source/hal/source/platform/mps3/source/platform_drivers.c
+++ b/source/hal/source/platform/mps3/source/platform_drivers.c
@@ -48,6 +48,9 @@
  */
 static int verify_platform(void);
 
+/** Platform name */
+static const char* s_platform_name = DESIGN_NAME;
+
 int platform_init(void)
 {
     int err = 0;
@@ -82,8 +85,7 @@
 #endif /* ARM_NPU */
 
     /* Print target design info */
-    info("Target system design: %s\n", DESIGN_NAME);
-
+    info("Target system design: %s\n", s_platform_name);
     return 0;
 }
 
@@ -92,9 +94,9 @@
     __disable_irq();
 }
 
-void platform_name(char* name, size_t size)
+const char* platform_name(void)
 {
-    strncpy(name, DESIGN_NAME, size);
+    return s_platform_name;
 }
 
 #define CREATE_MASK(msb, lsb)           (int)(((1U << ((msb) - (lsb) + 1)) - 1) << (lsb))
diff --git a/source/hal/source/platform/mps3/source/timer_mps3.c b/source/hal/source/platform/mps3/source/timer_mps3.c
index 6330269..7ce3002 100644
--- a/source/hal/source/platform/mps3/source/timer_mps3.c
+++ b/source/hal/source/platform/mps3/source/timer_mps3.c
@@ -20,6 +20,8 @@
 #include "smm_mps3.h"   /* Memory map for MPS3. */
 
 static uint64_t cpu_cycle_count = 0;    /* 64-bit cpu cycle counter */
+static const char* unit_cycles = "cycles";
+static const char* unit_ms = "milliseconds";
 
 /**
  * @brief   Gets the system tick triggered cycle counter for the CPU.
@@ -69,12 +71,10 @@
 #endif /* defined (ARM_NPU) */
 }
 
-pmu_counters platform_get_counters(void)
+void platform_get_counters(pmu_counters* counters)
 {
-    pmu_counters platform_counters = {
-        .num_counters = 0,
-        .initialised = true
-    };
+    counters->num_counters = 0;
+    counters->initialised = true;
     uint32_t i = 0;
 
 #if defined (ARM_NPU)
@@ -84,20 +84,20 @@
             npu_counters.npu_evt_counters[i].counter_value,
             npu_counters.npu_evt_counters[i].name,
             npu_counters.npu_evt_counters[i].unit,
-            &platform_counters);
+            counters);
     }
     for (i = 0; i < ETHOSU_DERIVED_NCOUNTERS; ++i) {
         add_pmu_counter(
             npu_counters.npu_derived_counters[i].counter_value,
             npu_counters.npu_derived_counters[i].name,
             npu_counters.npu_derived_counters[i].unit,
-            &platform_counters);
+            counters);
     }
     add_pmu_counter(
         npu_counters.npu_total_ccnt,
         "NPU TOTAL",
-        "cycles",
-        &platform_counters);
+        unit_cycles,
+        counters);
 #endif /* defined (ARM_NPU) */
 
 #if defined(CPU_PROFILE_ENABLED)
@@ -111,14 +111,14 @@
     add_pmu_counter(
             mps3_counters.counter_systick,
             "CPU TOTAL",
-            "cycles",
-            &platform_counters);
+            unit_cycles,
+            counters);
 
     add_pmu_counter(
             get_tstamp_milliseconds(&mps3_counters),
             "DURATION",
-            "milliseconds",
-            &platform_counters);
+            unit_ms,
+            counters);
 #endif /* defined(CPU_PROFILE_ENABLED) */
 
 #if !defined(CPU_PROFILE_ENABLED)
@@ -129,8 +129,6 @@
     UNUSED(i);
 #endif /* !defined(ARM_NPU) */
 #endif /* !defined(CPU_PROFILE_ENABLED) */
-
-    return platform_counters;
 }
 
 uint32_t get_mps3_core_clock(void)
diff --git a/source/hal/source/platform/native/include/platform_drivers.h b/source/hal/source/platform/native/include/platform_drivers.h
index a203618..50164db 100644
--- a/source/hal/source/platform/native/include/platform_drivers.h
+++ b/source/hal/source/platform/native/include/platform_drivers.h
@@ -35,10 +35,9 @@
 void platform_release(void);
 
 /**
- * @brief   Sets the platform name.
- * @param[out] name     Name of the platform to be set
- * @param[in]  size     Size of the input buffer
+ * @brief   Gets the platform name.
+ * @return  Pointer to the name
  */
-void platform_name(char* name, size_t size);
+const char* platform_name(void);
 
 #endif /* PLATFORM_DRIVERS_H */
diff --git a/source/hal/source/platform/native/include/timer_native.h b/source/hal/source/platform/native/include/timer_native.h
index c8eeda2..da34b30 100644
--- a/source/hal/source/platform/native/include/timer_native.h
+++ b/source/hal/source/platform/native/include/timer_native.h
@@ -28,9 +28,9 @@
 void platform_reset_counters(void);
 
 /**
- * @brief   Gets the current counter values.
- * @returns A populated instance of pmu_counters struct.
+ * @brief       Gets the current counter values.
+ * @param[out]  Pointer to a pmu_counters object.
  **/
-pmu_counters platform_get_counters(void);
+void platform_get_counters(pmu_counters* counters);
 
 #endif /* NATIVE_TIMER_H */
diff --git a/source/hal/source/platform/native/source/platform_drivers.c b/source/hal/source/platform/native/source/platform_drivers.c
index 10db99a..d5b3727 100644
--- a/source/hal/source/platform/native/source/platform_drivers.c
+++ b/source/hal/source/platform/native/source/platform_drivers.c
@@ -19,6 +19,8 @@
 
 #include <string.h>
 
+static const char* s_platform_name = "native";
+
 int platform_init(void)
 {
     return 0;
@@ -27,7 +29,7 @@
 void platform_release(void)
 {}
 
-void platform_name(char* name, size_t size)
+const char* platform_name(void)
 {
-    strncpy(name, "native", size);
+    return s_platform_name;
 }
\ No newline at end of file
diff --git a/source/hal/source/platform/native/source/timer_native.c b/source/hal/source/platform/native/source/timer_native.c
index 590975f..7cd832c 100644
--- a/source/hal/source/platform/native/source/timer_native.c
+++ b/source/hal/source/platform/native/source/timer_native.c
@@ -32,25 +32,21 @@
 
 void platform_reset_counters() { /* Nothing to do */ }
 
-pmu_counters platform_get_counters(void)
+void platform_get_counters(pmu_counters* counters)
 {
     struct timespec current_time;
-    pmu_counters platform_counters = {
-        .num_counters = 0,
-        .initialised = true
-    };
+    counters->num_counters = 0;
+    counters->initialised = true;
     clock_gettime(1, &current_time);
     uint64_t microseconds = (current_time.tv_sec * MICROSECONDS_IN_SECOND) +
                             (current_time.tv_nsec / NANOSECONDS_IN_MICROSECOND);
 
 #if NUM_PMU_COUNTERS > 0
-    platform_counters.counters[0].value = microseconds;
-    platform_counters.counters[0].name = "Duration";
-    platform_counters.counters[0].unit = "microseconds";
-    ++platform_counters.num_counters;
+    counters->counters[0].value = microseconds;
+    counters->counters[0].name = "Duration";
+    counters->counters[0].unit = "microseconds";
+    ++counters->num_counters;
 #endif /* NUM_PMU_COUNTERS > 0 */
-
-    return platform_counters;
 }
 
 #ifdef __cplusplus
diff --git a/source/hal/source/platform/simple/include/platform_drivers.h b/source/hal/source/platform/simple/include/platform_drivers.h
index 31bb682..7d075e7 100644
--- a/source/hal/source/platform/simple/include/platform_drivers.h
+++ b/source/hal/source/platform/simple/include/platform_drivers.h
@@ -39,10 +39,9 @@
 void platform_release(void);
 
 /**
- * @brief   Sets the platform name.
- * @param[out] name     Name of the platform to be set
- * @param[in]  size     Size of the input buffer
+ * @brief   Gets the platform name.
+ * @return  Pointer to the name
  */
-void platform_name(char* name, size_t size);
+const char* platform_name(void);
 
 #endif /* PLATFORM_DRIVERS_H */
diff --git a/source/hal/source/platform/simple/include/timer_simple_platform.h b/source/hal/source/platform/simple/include/timer_simple_platform.h
index 40acd03..20006cc 100644
--- a/source/hal/source/platform/simple/include/timer_simple_platform.h
+++ b/source/hal/source/platform/simple/include/timer_simple_platform.h
@@ -31,10 +31,10 @@
 void platform_reset_counters(void);
 
 /**
- * @brief   Gets the current counter values.
- * @returns A populated instance of pmu_counters struct.
+ * @brief       Gets the current counter values.
+ * @param[out]  Pointer to a pmu_counters object.
  **/
-pmu_counters platform_get_counters(void);
+void platform_get_counters(pmu_counters* counters);
 
 /**
  * @brief   System tick interrupt handler.
diff --git a/source/hal/source/platform/simple/source/platform_drivers.c b/source/hal/source/platform/simple/source/platform_drivers.c
index 177ba70..3e04323 100644
--- a/source/hal/source/platform/simple/source/platform_drivers.c
+++ b/source/hal/source/platform/simple/source/platform_drivers.c
@@ -40,6 +40,9 @@
 
 #endif /* ARM_NPU */
 
+/* Platform name */
+static const char* s_platform_name = DESIGN_NAME;
+
 int platform_init(void)
 {
     SystemCoreClockUpdate();    /* From start up code */
@@ -72,7 +75,7 @@
 #endif /* ARM_NPU */
 
     /* Print target design info */
-    info("Target system design: %s\n", DESIGN_NAME);
+    info("Target system design: %s\n", s_platform_name);
 
     return 0;
 }
@@ -82,7 +85,7 @@
     __disable_irq();
 }
 
-void platform_name(char* name, size_t size)
+const char* platform_name(void)
 {
-    strncpy(name, DESIGN_NAME, size);
+    return s_platform_name;
 }
diff --git a/source/hal/source/platform/simple/source/timer_simple_platform.c b/source/hal/source/platform/simple/source/timer_simple_platform.c
index 94af308..3bb91d0 100644
--- a/source/hal/source/platform/simple/source/timer_simple_platform.c
+++ b/source/hal/source/platform/simple/source/timer_simple_platform.c
@@ -63,12 +63,10 @@
     debug("system tick config ready\n");
 }
 
-pmu_counters platform_get_counters(void)
+void platform_get_counters(pmu_counters* counters)
 {
-    pmu_counters platform_counters = {
-        .num_counters = 0,
-        .initialised = true
-    };
+    counters->num_counters = 0;
+    counters->initialised = true;
     uint32_t i = 0;
 
 #if defined (ARM_NPU)
@@ -78,20 +76,20 @@
                 npu_counters.npu_evt_counters[i].counter_value,
                 npu_counters.npu_evt_counters[i].name,
                 npu_counters.npu_evt_counters[i].unit,
-                &platform_counters);
+                counters);
     }
     for (i = 0; i < ETHOSU_DERIVED_NCOUNTERS; ++i) {
         add_pmu_counter(
                 npu_counters.npu_derived_counters[i].counter_value,
                 npu_counters.npu_derived_counters[i].name,
                 npu_counters.npu_derived_counters[i].unit,
-                &platform_counters);
+                counters);
     }
     add_pmu_counter(
             npu_counters.npu_total_ccnt,
             "NPU TOTAL",
             "cycles",
-            &platform_counters);
+            counters);
 #endif /* defined (ARM_NPU) */
 
 #if defined(CPU_PROFILE_ENABLED)
@@ -99,7 +97,7 @@
             Get_SysTick_Cycle_Count(),
             "CPU TOTAL",
             "cycles",
-            &platform_counters);
+            counters);
 #endif /* defined(CPU_PROFILE_ENABLED) */
 
 #if !defined(CPU_PROFILE_ENABLED)
@@ -109,8 +107,6 @@
     UNUSED(i);
 #endif /* !defined(ARM_NPU) */
 #endif /* !defined(CPU_PROFILE_ENABLED) */
-
-    return platform_counters;
 }
 
 void SysTick_Handler(void)
diff --git a/source/profiler/Profiler.cc b/source/profiler/Profiler.cc
index 7e10097..64edcf2 100644
--- a/source/profiler/Profiler.cc
+++ b/source/profiler/Profiler.cc
@@ -21,28 +21,27 @@
 
 namespace arm {
 namespace app {
-    Profiler::Profiler(hal_platform* platform, const char* name = "Unknown")
-    : m_name(name)
-    {
-        if (platform && platform->inited) {
-            this->m_pPlatform = platform;
-            this->Reset();
-        } else {
-            printf_err("Profiler %s initialised with invalid platform\n",
-                this->m_name.c_str());
-        }
-    }
+    Profiler::Profiler()
+        : Profiler("Unknown")
+    {}
+
+    Profiler::Profiler(const char* name)
+        : m_name(name)
+    {}
 
     bool Profiler::StartProfiling(const char* name)
     {
         if (name) {
             this->SetName(name);
         }
-        if (this->m_pPlatform && !this->m_started) {
-            this->m_pPlatform->timer->reset();
-            this->m_tstampSt = this->m_pPlatform->timer->get_counters();
-            this->m_started = true;
-            return true;
+        if (!this->m_started) {
+            hal_pmu_reset();
+            this->m_tstampSt.initialised = false;
+            hal_pmu_get_counters(&this->m_tstampSt);
+            if (this->m_tstampSt.initialised) {
+                this->m_started = true;
+                return true;
+            }
         }
         printf_err("Failed to start profiler %s\n", this->m_name.c_str());
         return false;
@@ -50,13 +49,17 @@
 
     bool Profiler::StopProfiling()
     {
-        if (this->m_pPlatform && this->m_started) {
-            this->m_tstampEnd = this->m_pPlatform->timer->get_counters();
+        if (this->m_started) {
+            this->m_tstampEnd.initialised = false;
+            hal_pmu_get_counters(&this->m_tstampEnd);
             this->m_started = false;
-
-            this->AddProfilingUnit(this->m_tstampSt, this->m_tstampEnd, this->m_name);
-
-            return true;
+            if (this->m_tstampEnd.initialised) {
+                this->AddProfilingUnit(
+                    this->m_tstampSt,
+                    this->m_tstampEnd,
+                    this->m_name);
+                return true;
+            }
         }
         printf_err("Failed to stop profiler %s\n", this->m_name.c_str());
         return false;
@@ -160,11 +163,6 @@
     void Profiler::AddProfilingUnit(pmu_counters start, pmu_counters end,
                                     const std::string& name)
     {
-        if (!this->m_pPlatform) {
-            printf_err("Invalid platform\n");
-            return;
-        }
-
         struct ProfilingUnit unit = {
             .counters = end
         };
diff --git a/source/profiler/include/Profiler.hpp b/source/profiler/include/Profiler.hpp
index b8f9089..581e1e5 100644
--- a/source/profiler/include/Profiler.hpp
+++ b/source/profiler/include/Profiler.hpp
@@ -62,13 +62,12 @@
     public:
         /**
          * @brief       Constructor for profiler.
-         * @param[in]   platform   Pointer to a valid, initialised hal platform.
          * @param[in]   name       A friendly name for this profiler.
          **/
-        Profiler(hal_platform* platform, const char* name);
+        Profiler(const char* name);
 
-        /** Block the default constructor. */
-        Profiler() = delete;
+        /** Default constructor. */
+        Profiler();
 
         /** Default destructor. */
         ~Profiler() = default;
@@ -103,10 +102,7 @@
         ProfilingMap    m_series;                /* Profiling series map. */
         pmu_counters    m_tstampSt{};            /* Container for a current starting timestamp. */
         pmu_counters    m_tstampEnd{};           /* Container for a current ending timestamp. */
-        hal_platform *  m_pPlatform = nullptr;   /* Platform pointer - to get the timer. */
-
         bool            m_started = false;       /* Indicates profiler has been started. */
-
         std::string     m_name;                  /* Name given to this profiler. */
 
         /**
diff --git a/source/use_case/ad/src/MainLoop.cc b/source/use_case/ad/src/MainLoop.cc
index e858320..23d1e51 100644
--- a/source/use_case/ad/src/MainLoop.cc
+++ b/source/use_case/ad/src/MainLoop.cc
@@ -45,7 +45,7 @@
 }
 
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     arm::app::AdModel model;  /* Model wrapper object. */
 
@@ -59,9 +59,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "ad"};
+    arm::app::Profiler profiler{"ad"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("model", model);
     caseContext.Set<uint32_t>("clipIndex", 0);
     caseContext.Set<int>("frameLength", g_FrameLength);
diff --git a/source/use_case/asr/src/MainLoop.cc b/source/use_case/asr/src/MainLoop.cc
index 058211a..51b0b18 100644
--- a/source/use_case/asr/src/MainLoop.cc
+++ b/source/use_case/asr/src/MainLoop.cc
@@ -65,7 +65,7 @@
 static uint32_t GetOutputInnerLen(const arm::app::Model& model,
                                   uint32_t outputCtxLen);
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     arm::app::Wav2LetterModel model;  /* Model wrapper object. */
 
@@ -99,9 +99,8 @@
     GetLabelsVector(labels);
     arm::app::AsrClassifier classifier;  /* Classifier wrapper object. */
 
-    arm::app::Profiler profiler{&platform, "asr"};
+    arm::app::Profiler profiler{"asr"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("model", model);
     caseContext.Set<uint32_t>("clipIndex", 0);
     caseContext.Set<uint32_t>("frameLength", g_FrameLength);
diff --git a/source/use_case/img_class/src/MainLoop.cc b/source/use_case/img_class/src/MainLoop.cc
index 7b67a19..d9fb925 100644
--- a/source/use_case/img_class/src/MainLoop.cc
+++ b/source/use_case/img_class/src/MainLoop.cc
@@ -25,7 +25,7 @@
 
 using ImgClassClassifier = arm::app::Classifier;
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     arm::app::MobileNetModel model;  /* Model wrapper object. */
 
@@ -38,9 +38,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "img_class"};
+    arm::app::Profiler profiler{"img_class"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("model", model);
     caseContext.Set<uint32_t>("imgIndex", 0);
 
diff --git a/source/use_case/inference_runner/src/MainLoop.cc b/source/use_case/inference_runner/src/MainLoop.cc
index cfdc520..ddff40c 100644
--- a/source/use_case/inference_runner/src/MainLoop.cc
+++ b/source/use_case/inference_runner/src/MainLoop.cc
@@ -26,7 +26,7 @@
     MENU_OPT_SHOW_MODEL_INFO,        /* Show model info. */
 };
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     arm::app::TestModel model;  /* Model wrapper object. */
 
@@ -39,10 +39,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "inference_runner"};
+    arm::app::Profiler profiler{"inference_runner"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("model", model);
     caseContext.Set<uint32_t>("imgIndex", 0);
 
diff --git a/source/use_case/kws/src/MainLoop.cc b/source/use_case/kws/src/MainLoop.cc
index 76dff8c..e590c4a 100644
--- a/source/use_case/kws/src/MainLoop.cc
+++ b/source/use_case/kws/src/MainLoop.cc
@@ -48,7 +48,7 @@
     fflush(stdout);
 }
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     arm::app::MicroNetKwsModel model;  /* Model wrapper object. */
 
@@ -61,10 +61,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "kws"};
+    arm::app::Profiler profiler{"kws"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("model", model);
     caseContext.Set<uint32_t>("clipIndex", 0);
     caseContext.Set<int>("frameLength", g_FrameLength);
diff --git a/source/use_case/kws_asr/src/MainLoop.cc b/source/use_case/kws_asr/src/MainLoop.cc
index 096c966..5c1d0e0 100644
--- a/source/use_case/kws_asr/src/MainLoop.cc
+++ b/source/use_case/kws_asr/src/MainLoop.cc
@@ -67,7 +67,7 @@
 static uint32_t GetOutputInnerLen(const arm::app::Model& model,
                                   uint32_t outputCtxLen);
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     /* Model wrapper objects. */
     arm::app::MicroNetKwsModel kwsModel;
@@ -104,10 +104,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "kws_asr"};
+    arm::app::Profiler profiler{"kws_asr"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("kwsmodel", kwsModel);
     caseContext.Set<arm::app::Model&>("asrmodel", asrModel);
     caseContext.Set<uint32_t>("clipIndex", 0);
diff --git a/source/use_case/noise_reduction/src/MainLoop.cc b/source/use_case/noise_reduction/src/MainLoop.cc
index bcaff6d..5fd7823 100644
--- a/source/use_case/noise_reduction/src/MainLoop.cc
+++ b/source/use_case/noise_reduction/src/MainLoop.cc
@@ -56,7 +56,7 @@
     return true;
 }
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     arm::app::RNNoiseModel model;  /* Model wrapper object. */
 
@@ -71,10 +71,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "noise_reduction"};
+    arm::app::Profiler profiler{"noise_reduction"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<uint32_t>("numInputFeatures", g_NumInputFeatures);
     caseContext.Set<uint32_t>("frameLength", g_FrameLength);
     caseContext.Set<uint32_t>("frameStride", g_FrameStride);
diff --git a/source/use_case/object_detection/src/MainLoop.cc b/source/use_case/object_detection/src/MainLoop.cc
index 0f98c8a..acfc195 100644
--- a/source/use_case/object_detection/src/MainLoop.cc
+++ b/source/use_case/object_detection/src/MainLoop.cc
@@ -36,7 +36,7 @@
     fflush(stdout);
 }
 
-void main_loop(hal_platform& platform)
+void main_loop()
 {
     arm::app::YoloFastestModel model;  /* Model wrapper object. */
 
@@ -49,9 +49,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "object_detection"};
+    arm::app::Profiler profiler{"object_detection"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("model", model);
     caseContext.Set<uint32_t>("imgIndex", 0);
     arm::app::object_detection::DetectorPostprocessing postp;
diff --git a/source/use_case/vww/src/MainLoop.cc b/source/use_case/vww/src/MainLoop.cc
index 03d6196..041ea18 100644
--- a/source/use_case/vww/src/MainLoop.cc
+++ b/source/use_case/vww/src/MainLoop.cc
@@ -25,7 +25,7 @@
 
 using ViusalWakeWordClassifier = arm::app::Classifier;
 
-void main_loop(hal_platform &platform)
+void main_loop()
 {
     arm::app::VisualWakeWordModel model;  /* Model wrapper object. */
 
@@ -38,9 +38,8 @@
     /* Instantiate application context. */
     arm::app::ApplicationContext caseContext;
 
-    arm::app::Profiler profiler{&platform, "vww"};
+    arm::app::Profiler profiler{"vww"};
     caseContext.Set<arm::app::Profiler&>("profiler", profiler);
-    caseContext.Set<hal_platform&>("platform", platform);
     caseContext.Set<arm::app::Model&>("model", model);
     caseContext.Set<uint32_t>("imgIndex", 0);
 
