diff --git a/applications/inference_process/src/inference_process.cpp b/applications/inference_process/src/inference_process.cpp
index fa38290..009706e 100644
--- a/applications/inference_process/src/inference_process.cpp
+++ b/applications/inference_process/src/inference_process.cpp
@@ -112,11 +112,7 @@
     name(_name),
     networkModel(_networkModel), input(_input), output(_output), expectedOutput(_expectedOutput),
     numBytesToPrint(_numBytesToPrint), pmuEventConfig(_pmuEventConfig), pmuCycleCounterEnable(_pmuCycleCounterEnable),
-    pmuEventCount(), pmuCycleCounterCount(0) {
-#if defined(INFERENCE_PROC_TFLU_PROFILER) && defined(ETHOSU)
-    pmuEventCount = vector<uint32_t>(ETHOSU_PMU_NCOUNTERS, 0);
-#endif
-}
+    pmuEventCount(), pmuCycleCounterCount(0) {}
 
 void InferenceJob::invalidate() {
     networkModel.invalidate();
@@ -206,15 +202,11 @@
     // Create the TFL micro interpreter
     tflite::AllOpsResolver resolver;
 #ifdef ETHOSU
-    vector<ethosu_pmu_event_type> pmu_events(ETHOSU_PMU_NCOUNTERS, ETHOSU_PMU_NO_EVENT);
-
-    for (size_t i = 0; i < job.pmuEventConfig.size(); i++) {
-        pmu_events[i] = ethosu_pmu_event_type(job.pmuEventConfig[i]);
-    }
-    tflite::EthosUProfiler profiler(pmu_events[0], pmu_events[1], pmu_events[2], pmu_events[3]);
+    tflite::EthosUProfiler profiler;
 #else
     tflite::ArmProfiler profiler;
 #endif
+
     tflite::MicroInterpreter interpreter(model, resolver, tensorArena, tensorArenaSize, reporter, &profiler);
 
     // Allocate tensors
@@ -273,11 +265,6 @@
         job.pmuCycleCounterCount = profiler.GetTotalTicks();
     }
 
-#ifdef ETHOSU
-    for (uint32_t i = 0; i < ETHOSU_PMU_NCOUNTERS; i++) {
-        job.pmuEventCount[i] = profiler.GetEthosuPMUCounter(i);
-    }
-#endif
 #endif
 
     // Copy output data
diff --git a/lib/ethosu_profiler/include/ethosu_profiler.hpp b/lib/ethosu_profiler/include/ethosu_profiler.hpp
index 745c670..503ebba 100644
--- a/lib/ethosu_profiler/include/ethosu_profiler.hpp
+++ b/lib/ethosu_profiler/include/ethosu_profiler.hpp
@@ -28,23 +28,13 @@
 namespace tflite {
 class EthosUProfiler : public MicroProfiler {
 public:
-    EthosUProfiler(ethosu_pmu_event_type event0 = ETHOSU_PMU_NO_EVENT,
-                   ethosu_pmu_event_type event1 = ETHOSU_PMU_NO_EVENT,
-                   ethosu_pmu_event_type event2 = ETHOSU_PMU_NO_EVENT,
-                   ethosu_pmu_event_type event3 = ETHOSU_PMU_NO_EVENT,
-                   size_t max_events            = 200);
+    EthosUProfiler(size_t max_events = 200);
     uint32_t BeginEvent(const char *tag);
     void EndEvent(uint32_t event_handle);
     uint64_t GetTotalTicks() const;
     void Log() const;
-    uint32_t GetEthosuPMUCounter(int counter);
 
 private:
-    void MonitorEthosuPMUEvents(ethosu_pmu_event_type event0,
-                                ethosu_pmu_event_type event1,
-                                ethosu_pmu_event_type event2,
-                                ethosu_pmu_event_type event3);
-
     size_t max_events_;
     std::unique_ptr<const char *[]> tags_;
     std::unique_ptr<uint64_t[]> start_ticks_;
@@ -52,10 +42,6 @@
 
     int num_events_ = 0;
 
-    ethosu_pmu_event_type ethosu_pmu_cntrs[ETHOSU_PMU_NCOUNTERS];
-
-    uint32_t event_counters[ETHOSU_PMU_NCOUNTERS];
-
     TF_LITE_REMOVE_VIRTUAL_DELETE;
 };
 
diff --git a/lib/ethosu_profiler/src/ethosu_profiler.cpp b/lib/ethosu_profiler/src/ethosu_profiler.cpp
index c69e6f8..9ddea13 100644
--- a/lib/ethosu_profiler/src/ethosu_profiler.cpp
+++ b/lib/ethosu_profiler/src/ethosu_profiler.cpp
@@ -34,42 +34,19 @@
     return ETHOSU_PMU_Get_CCNTR_v2(drv);
 }
 
-void InitEthosuPMUCounters(struct ethosu_driver *drv, ethosu_pmu_event_type *ethosu_pmu_cntrs) {
-    ETHOSU_PMU_Enable_v2(drv);
-
-    ETHOSU_PMU_CNTR_Enable_v2(drv,
-                              ETHOSU_PMU_CNT1_Msk | ETHOSU_PMU_CNT2_Msk | ETHOSU_PMU_CNT3_Msk | ETHOSU_PMU_CNT4_Msk |
-                                  ETHOSU_PMU_CCNT_Msk);
-
-    for (int i = 0; i < ETHOSU_PMU_NCOUNTERS; i++) {
-        ETHOSU_PMU_Set_EVTYPER_v2(drv, i, ethosu_pmu_cntrs[i]);
-    }
-
-    ETHOSU_PMU_EVCNTR_ALL_Reset_v2(drv);
-}
-
-uint32_t GetEthosuPMUEventCounter(struct ethosu_driver *drv, int counter) {
-    return ETHOSU_PMU_Get_EVCNTR_v2(drv, counter);
-}
 } // namespace
 
 namespace tflite {
 
-EthosUProfiler::EthosUProfiler(ethosu_pmu_event_type event0,
-                               ethosu_pmu_event_type event1,
-                               ethosu_pmu_event_type event2,
-                               ethosu_pmu_event_type event3,
-                               size_t max_events) :
-    max_events_(max_events) {
+EthosUProfiler::EthosUProfiler(size_t max_events) : max_events_(max_events) {
     tags_        = std::make_unique<const char *[]>(max_events_);
     start_ticks_ = std::make_unique<uint64_t[]>(max_events_);
     end_ticks_   = std::make_unique<uint64_t[]>(max_events_);
 
-    for (size_t i = 0; i < ETHOSU_PMU_NCOUNTERS; i++) {
-        event_counters[i] = 0;
-    }
-
-    MonitorEthosuPMUEvents(event0, event1, event2, event3);
+    struct ethosu_driver *drv = ethosu_reserve_driver();
+    ETHOSU_PMU_CNTR_Enable_v2(drv, ETHOSU_PMU_CCNT_Msk);
+    ETHOSU_PMU_CYCCNT_Reset_v2(drv);
+    ethosu_release_driver(drv);
 }
 
 // NOTE: THIS PROFILER ONLY WORKS ON SYSTEMS WITH 1 NPU
@@ -87,7 +64,6 @@
         ETHOSU_PMU_PMCCNTR_CFG_Set_Start_Event_v2(ethosu_drv, ETHOSU_PMU_NPU_ACTIVE);
         ETHOSU_PMU_PMCCNTR_CFG_Set_Stop_Event_v2(ethosu_drv, ETHOSU_PMU_NPU_IDLE);
         start_ticks_[num_events_] = GetCurrentEthosuTicks(ethosu_drv);
-        InitEthosuPMUCounters(ethosu_drv, ethosu_pmu_cntrs);
         ethosu_release_driver(ethosu_drv);
     } else {
         start_ticks_[num_events_] = GetCurrentTimeTicks();
@@ -104,26 +80,14 @@
     if (strcmp("ethos-u", tags_[event_handle]) == 0) {
         struct ethosu_driver *ethosu_drv = ethosu_reserve_driver();
         end_ticks_[event_handle]         = GetCurrentEthosuTicks(ethosu_drv);
-        uint32_t ethosu_pmu_counter_end[ETHOSU_PMU_NCOUNTERS];
-        ETHOSU_PMU_Disable_v2(ethosu_drv);
-        for (size_t i = 0; i < ETHOSU_PMU_NCOUNTERS; i++) {
-            ethosu_pmu_counter_end[i] = GetEthosuPMUEventCounter(ethosu_drv, i);
-            tflite::GetMicroErrorReporter()->Report(
-                "%s : ethosu_pmu_cntr%d : %u", tags_[event_handle], i, ethosu_pmu_counter_end[i]);
-
-            event_counters[i] += ethosu_pmu_counter_end[i];
-        }
         ethosu_release_driver(ethosu_drv);
-        printf("%s : cycle_cnt : %" PRIu64 " cycles\n",
-               tags_[event_handle],
-               end_ticks_[event_handle] - start_ticks_[event_handle]);
-
     } else {
         end_ticks_[event_handle] = GetCurrentTimeTicks();
-        printf("%s : cycle_cnt : %" PRIu64 " cycles\n",
-               tags_[event_handle],
-               end_ticks_[event_handle] - start_ticks_[event_handle]);
     }
+
+    printf("%s : cycle_cnt : %" PRIu64 " cycles\n",
+           tags_[event_handle],
+           end_ticks_[event_handle] - start_ticks_[event_handle]);
 }
 
 uint64_t EthosUProfiler::GetTotalTicks() const {
@@ -144,18 +108,4 @@
 #endif
 }
 
-void EthosUProfiler::MonitorEthosuPMUEvents(ethosu_pmu_event_type event0,
-                                            ethosu_pmu_event_type event1,
-                                            ethosu_pmu_event_type event2,
-                                            ethosu_pmu_event_type event3) {
-    ethosu_pmu_cntrs[0] = event0;
-    ethosu_pmu_cntrs[1] = event1;
-    ethosu_pmu_cntrs[2] = event2;
-    ethosu_pmu_cntrs[3] = event3;
-}
-
-uint32_t EthosUProfiler::GetEthosuPMUCounter(int counter) {
-    return event_counters[counter];
-}
-
 } // namespace tflite
