diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultMeter.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultMeter.java
index 138bb18..177688c 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultMeter.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultMeter.java
@@ -20,7 +20,6 @@
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Optional;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -37,7 +36,6 @@
     private final boolean burst;
     private final Collection<Band> bands;
     private final DeviceId deviceId;
-    private final Optional<MeterContext> context;
 
     private MeterState state;
     private long life;
@@ -47,14 +45,13 @@
 
     private DefaultMeter(DeviceId deviceId, MeterId id, ApplicationId appId,
                         Unit unit, boolean burst,
-                        Collection<Band> bands, Optional<MeterContext> context) {
+                        Collection<Band> bands) {
         this.deviceId = deviceId;
         this.id = id;
         this.appId = appId;
         this.unit = unit;
         this.burst = burst;
         this.bands = bands;
-        this.context = context;
     }
 
     @Override
@@ -88,11 +85,6 @@
     }
 
     @Override
-    public Optional<MeterContext> context() {
-        return null;
-    }
-
-    @Override
     public MeterState state() {
         return state;
     }
@@ -154,7 +146,6 @@
         private boolean burst = false;
         private Collection<Band> bands;
         private DeviceId deviceId;
-        private Optional<MeterContext> context;
 
 
         @Override
@@ -194,19 +185,13 @@
         }
 
         @Override
-        public Meter.Builder withContext(MeterContext context) {
-            this.context = Optional.<MeterContext>ofNullable(context);
-            return this;
-        }
-
-        @Override
         public DefaultMeter build() {
             checkNotNull(deviceId, "Must specify a device");
             checkNotNull(bands, "Must have bands.");
             checkArgument(bands.size() > 0, "Must have at least one band.");
             checkNotNull(appId, "Must have an application id");
             checkNotNull(id, "Must specify a meter id");
-            return new DefaultMeter(deviceId, id, appId, unit, burst, bands, context);
+            return new DefaultMeter(deviceId, id, appId, unit, burst, bands);
         }
 
 
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Meter.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Meter.java
index 14593df..37c1105 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Meter.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Meter.java
@@ -19,7 +19,6 @@
 import org.onosproject.net.DeviceId;
 
 import java.util.Collection;
-import java.util.Optional;
 
 /**
  * Represents a generalized meter to be deployed on a device.
@@ -81,14 +80,6 @@
     Collection<Band> bands();
 
     /**
-     * Obtains an optional context.
-     *
-     * @return optional; which will be empty if there is no context.
-     * Otherwise it will return the context.
-     */
-    Optional<MeterContext> context();
-
-    /**
      * Fetches the state of this meter.
      *
      * @return a meter state
@@ -177,8 +168,6 @@
          */
         Builder withBands(Collection<Band> bands);
 
-        Builder withContext(MeterContext context);
-
         /**
          * Builds the meter based on the specified parameters.
          *
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterContext.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterContext.java
index 919cf63..b112b9a 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterContext.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterContext.java
@@ -16,23 +16,23 @@
 package org.onosproject.incubator.net.meter;
 
 /**
- * Created by ash on 01/08/15.
+ * A context permitting the application to be notified when the
+ * meter installation has been successful.
  */
 public interface MeterContext {
 
     /**
      * Invoked on successful installation of the meter.
      *
-     * @param op a meter operation
+     * @param op a meter
      */
-    default void onSuccess(MeterOperation op) {
-    }
+    default void onSuccess(Meter op) {}
 
     /**
      * Invoked when error is encountered while installing a meter.
      *
-     * @param op a meter operation
+     * @param op a meter
      * @param reason the reason why it failed
      */
-    default void onError(MeterOperation op, MeterFailReason reason) {}
+    default void onError(Meter op, MeterFailReason reason) {}
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java
index 9439145..808a3e8 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java
@@ -20,28 +20,19 @@
 /**
  * Entity that represents Meter events.
  */
-public class MeterEvent extends AbstractEvent<MeterEvent.Type, MeterOperation> {
+public class MeterEvent extends AbstractEvent<MeterEvent.Type, Meter> {
 
 
-    private final MeterFailReason reason;
-
     public enum Type {
+        /**
+         * A meter addition was requested.
+         */
+        METER_ADD_REQ,
 
         /**
-         * Signals that a meter has been added.
+         * A meter removal was requested.
          */
-        METER_UPDATED,
-
-        /**
-         * Signals that a meter update failed.
-         */
-        METER_OP_FAILED,
-
-        /**
-         * A meter operation was requested.
-         */
-        METER_OP_REQ,
-
+        METER_REM_REQ
     }
 
 
@@ -50,32 +41,22 @@
      * current time.
      *
      * @param type  meter event type
-     * @param op event subject
+     * @param meter event subject
      */
-    public MeterEvent(Type type, MeterOperation op) {
-        super(type, op);
-        this.reason = null;
+    public MeterEvent(Type type, Meter meter) {
+        super(type, meter);
     }
 
     /**
      * Creates an event of a given type and for the specified meter and time.
      *
      * @param type  meter event type
-     * @param op event subject
+     * @param meter event subject
      * @param time  occurrence time
      */
-    public MeterEvent(Type type, MeterOperation op, long time) {
-        super(type, op, time);
-        this.reason = null;
+    public MeterEvent(Type type, Meter meter, long time) {
+        super(type, meter, time);
     }
 
-    public MeterEvent(Type type, MeterOperation op, MeterFailReason reason) {
-        super(type, op);
-        this.reason = reason;
-    }
-
-    public MeterFailReason reason() {
-        return reason;
-    }
 
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperation.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperation.java
index ff7e988..8354888 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperation.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperation.java
@@ -17,11 +17,15 @@
 
 import com.google.common.base.MoreObjects;
 
+import java.util.Optional;
+
 /**
  * Representation of an operation on the meter table.
  */
 public class MeterOperation {
 
+    private final Optional<MeterContext> context;
+
     /**
      * Tyoe of meter operation.
      */
@@ -35,9 +39,10 @@
     private final Type type;
 
 
-    public MeterOperation(Meter meter, Type type) {
+    public MeterOperation(Meter meter, Type type, MeterContext context) {
         this.meter = meter;
         this.type = type;
+        this.context = Optional.ofNullable(context);
     }
 
     /**
@@ -58,6 +63,16 @@
         return meter;
     }
 
+    /**
+     * Returns a context which allows application to
+     * be notified on the success value of this operation.
+     *
+     * @return a meter context
+     */
+    public Optional<MeterContext> context() {
+        return this.context;
+    }
+
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterService.java
index b8702dd..c7eb93a 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterService.java
@@ -30,28 +30,21 @@
      *
      * @param meter a meter.
      */
-    void addMeter(Meter meter);
+    void addMeter(MeterOperation meter);
 
     /**
      * Updates a meter by adding statistic information to the meter.
      *
      * @param meter an updated meter
      */
-    void updateMeter(Meter meter);
+    void updateMeter(MeterOperation meter);
 
     /**
      * Remove a meter from the system and the dataplane.
      *
      * @param meter a meter to remove
      */
-    void removeMeter(Meter meter);
-
-    /**
-     * Remove a meter from the system and the dataplane by meter id.
-     *
-     * @param id a meter id
-     */
-    void removeMeter(MeterId id);
+    void removeMeter(MeterOperation meter);
 
     /**
      * Fetch the meter by the meter id.
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStore.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStore.java
index 232eedd..54e5658 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStore.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStore.java
@@ -18,6 +18,7 @@
 import org.onosproject.store.Store;
 
 import java.util.Collection;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * Entity that stores and distributed meter objects.
@@ -28,25 +29,29 @@
      * Adds a meter to the store.
      *
      * @param meter a meter
+     * @return a future indicating the result of the store operation
      */
-    void storeMeter(Meter meter);
+    CompletableFuture<MeterStoreResult> storeMeter(Meter meter);
 
     /**
      * Deletes a meter from the store.
      *
      * @param meter a meter
+     * @return a future indicating the result of the store operation
      */
-    void deleteMeter(Meter meter);
+    CompletableFuture<MeterStoreResult> deleteMeter(Meter meter);
 
     /**
      * Updates a meter whose meter id is the same as the passed meter.
      *
      * @param meter a new meter
+     * @return a future indicating the result of the store operation
      */
-    void updateMeter(Meter meter);
+    CompletableFuture<MeterStoreResult> updateMeter(Meter meter);
 
     /**
      * Updates a given meter's state with the provided state.
+     *
      * @param meter a meter
      */
     void updateMeterState(Meter meter);
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreResult.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreResult.java
new file mode 100644
index 0000000..8ad5aa6
--- /dev/null
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreResult.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.incubator.net.meter;
+
+import java.util.Optional;
+
+/**
+ * An entity used to indicate whether the store operation passed.
+ */
+public final class MeterStoreResult {
+
+
+    private final Type type;
+    private final Optional<MeterFailReason> reason;
+
+    public enum Type {
+        SUCCESS,
+        FAIL
+    }
+
+    private MeterStoreResult(Type type, MeterFailReason reason) {
+        this.type = type;
+        this.reason = Optional.ofNullable(reason);
+    }
+
+    public Type type() {
+        return type;
+    }
+
+    public Optional<MeterFailReason> reason() {
+        return reason;
+    }
+
+    /**
+     * A successful store opertion.
+     *
+     * @return a meter store result
+     */
+    public static MeterStoreResult success() {
+        return new MeterStoreResult(Type.SUCCESS, null);
+    }
+
+    /**
+     * A failed store operation.
+     *
+     * @param reason a failure reason
+     * @return a meter store result
+     */
+    public static MeterStoreResult fail(MeterFailReason reason) {
+        return new MeterStoreResult(Type.FAIL, reason);
+    }
+
+}
