diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java
index 8bb4fc7..2ebf7b2 100644
--- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java
+++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java
@@ -19,8 +19,6 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.Striped;
-import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMeterMirror;
-import org.onosproject.drivers.p4runtime.mirror.TimedEntry;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.meter.Band;
 import org.onosproject.net.meter.DefaultMeter;
@@ -63,7 +61,6 @@
     private static final Striped<Lock> WRITE_LOCKS = Striped.lock(30);
 
     private PiMeterTranslator translator;
-    private P4RuntimeMeterMirror meterMirror;
     private PiPipelineModel pipelineModel;
 
     @Override
@@ -73,7 +70,6 @@
         }
 
         translator = translationService.meterTranslator();
-        meterMirror = handler().get(P4RuntimeMeterMirror.class);
         pipelineModel = pipeconf.pipelineModel();
         return true;
     }
@@ -120,13 +116,10 @@
                     return false;
             }
 
-            WriteRequest request = client.write(p4DeviceId, pipeconf);
-            appendEntryToWriteRequestOrSkip(request, handle, piMeterCellConfig);
+            WriteRequest request = client.write(p4DeviceId, pipeconf)
+                    .entity(piMeterCellConfig, UpdateType.MODIFY);
             if (!request.pendingUpdates().isEmpty()) {
                 result = request.submitSync().isSuccess();
-                if (result) {
-                    meterMirror.applyWriteRequest(request);
-                }
             }
         } finally {
             WRITE_LOCKS.get(deviceId).unlock();
@@ -154,8 +147,6 @@
                 .filter(piMeterCellConfig -> !piMeterCellConfig.isDefaultConfig())
                 .collect(Collectors.toList());
 
-        meterMirror.sync(deviceId, piMeterCellConfigs);
-
         if (piMeterCellConfigs.isEmpty()) {
             return CompletableFuture.completedFuture(Collections.emptyList());
         }
@@ -179,11 +170,8 @@
         // Reset all inconsistent meter cells to the default config
         if (!inconsistentOrDefaultCells.isEmpty()) {
             WriteRequest request = client.write(p4DeviceId, pipeconf);
-            for (PiMeterCellId cellId : inconsistentOrDefaultCells) {
-                PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, cellId);
-                appendEntryToWriteRequestOrSkip(request, handle, PiMeterCellConfig.reset(cellId));
-            }
-
+            inconsistentOrDefaultCells.forEach(cellId ->
+                    request.entity(PiMeterCellConfig.reset(cellId), UpdateType.MODIFY));
             request.submit().whenComplete((response, ex) -> {
                 if (ex != null) {
                     log.error("Exception resetting inconsistent meter entries", ex);
@@ -191,7 +179,6 @@
                     log.debug("Successfully removed {} out of {} inconsistent meter entries",
                             response.success().size(), response.all().size());
                 }
-                response.success().forEach(entity -> meterMirror.remove((PiMeterCellHandle) entity.handle()));
             });
         }
 
@@ -215,7 +202,6 @@
     private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) {
         final Optional<PiTranslatedEntity<Meter, PiMeterCellConfig>>
             translatedEntity = translator.lookup(handle);
-        final TimedEntry<PiMeterCellConfig> timedEntry = meterMirror.get(handle);
 
         // A meter cell config might not be present in the translation store if it
         // is default configuration.
@@ -239,13 +225,6 @@
             return null;
         }
 
-        // Big problems in the mirror ? This could happen in case of issues with
-        // the eventual consistent maps used in the AbstractDistributedP4RuntimeMirror
-        if (timedEntry == null) {
-            log.warn("Meter entry handle not found in device mirror: {}", handle);
-            return null;
-        }
-
         Meter original = translatedEntity.get().original();
         // Forge a meter with MeterCellId, Bands and DeviceId using the original value.
         DefaultMeter meter = (DefaultMeter) DefaultMeter.builder()
@@ -257,23 +236,6 @@
         return meter;
     }
 
-    private boolean appendEntryToWriteRequestOrSkip(
-            final WriteRequest writeRequest,
-            final PiMeterCellHandle handle,
-            PiMeterCellConfig configToModify) {
-
-        final TimedEntry<PiMeterCellConfig> configOnDevice = meterMirror.get(handle);
-
-        if (configOnDevice != null && configOnDevice.entry().equals(configToModify)) {
-            log.debug("Ignoring re-apply of existing entry: {}", configToModify);
-            return true;
-        }
-
-        writeRequest.entity(configToModify, UpdateType.MODIFY);
-
-        return false;
-    }
-
     /**
      * Returns true if the given PiMeterCellConfigs are similar enough to be deemed equal
      * for reconciliation purposes. This is required to handle read/write asymmetry in devices
diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java
deleted file mode 100644
index 48546fc..0000000
--- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.
- */
-
-package org.onosproject.drivers.p4runtime.mirror;
-
-import org.onosproject.net.pi.runtime.PiEntityType;
-import org.onosproject.net.pi.runtime.PiMeterCellConfig;
-import org.onosproject.net.pi.runtime.PiMeterCellHandle;
-import org.osgi.service.component.annotations.Component;
-
-/**
- * Distributed implementation of a P4Runtime meter mirror.
- */
-@Component(immediate = true, service = P4RuntimeMeterMirror.class)
-public final class DistributedP4RuntimeMeterMirror
-        extends AbstractDistributedP4RuntimeMirror
-        <PiMeterCellHandle, PiMeterCellConfig>
-        implements P4RuntimeMeterMirror {
-
-    public DistributedP4RuntimeMeterMirror() {
-        super(PiEntityType.METER_CELL_CONFIG);
-    }
-
-    @Override
-    protected String mapSimpleName() {
-        return PiEntityType.METER_CELL_CONFIG.name().toLowerCase();
-    }
-}
