diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java
index 681846f..f3e29fe 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java
@@ -23,6 +23,7 @@
 import org.onosproject.net.DeviceId;
 
 import java.util.Collection;
+import java.util.Optional;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
@@ -36,7 +37,7 @@
 
 
     private final MeterCellId cellId;
-    private final ApplicationId appId;
+    private final Optional<ApplicationId> appId;
     private final Unit unit;
     private final boolean burst;
     private final Collection<Band> bands;
@@ -48,8 +49,9 @@
     private long packets;
     private long bytes;
 
-    private DefaultMeter(DeviceId deviceId, MeterCellId cellId, ApplicationId appId,
-                         Unit unit, boolean burst, Collection<Band> bands,
+    private DefaultMeter(DeviceId deviceId, MeterCellId cellId,
+                         Optional<ApplicationId> appId, Unit unit,
+                         boolean burst, Collection<Band> bands,
                          Annotations... annotations) {
         super(annotations);
         this.deviceId = deviceId;
@@ -81,7 +83,8 @@
 
     @Override
     public ApplicationId appId() {
-        return appId;
+        return appId.orElse(null);
+        // TODO: Deprecate this API because AppId becomes optional in Meter
     }
 
     @Override
@@ -158,7 +161,7 @@
         return toStringHelper(this)
                 .add("device", deviceId)
                 .add("cellId", cellId)
-                .add("appId", appId.name())
+                .add("appId", appId.orElse(null))
                 .add("unit", unit)
                 .add("isBurst", burst)
                 .add("state", state)
@@ -190,7 +193,7 @@
     public static final class Builder implements Meter.Builder {
 
         private MeterCellId cellId;
-        private ApplicationId appId;
+        private Optional<ApplicationId> appId = Optional.empty();
         private Unit unit = Unit.KB_PER_SEC;
         private boolean burst = false;
         private Collection<Band> bands;
@@ -217,7 +220,7 @@
 
         @Override
         public Meter.Builder fromApp(ApplicationId appId) {
-            this.appId = appId;
+            this.appId = Optional.ofNullable(appId);
             return this;
         }
 
@@ -250,7 +253,6 @@
             checkNotNull(deviceId, "Must specify a device");
             checkNotNull(bands, "Must have bands.");
             checkArgument(!bands.isEmpty(), "Must have at least one band.");
-            checkNotNull(appId, "Must have an application id");
             checkArgument(cellId != null, "Must specify a cell id.");
             return new DefaultMeter(deviceId, cellId, appId, unit, burst, bands,
                                     annotations);
diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java
index e6e2d1b..0dbd4f7 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java
@@ -42,11 +42,14 @@
     private final DeviceId deviceId;
     private final Optional<MeterContext> context;
     private final Type op;
+    private final MeterScope scope;
+    private final Optional<Long> index;
 
     private DefaultMeterRequest(DeviceId deviceId, ApplicationId appId,
                                 Meter.Unit unit, boolean burst,
                                 Collection<Band> bands, MeterContext context,
-                                Type op, Annotations... annotations) {
+                                Type op, MeterScope scope, Optional<Long> index,
+                                Annotations... annotations) {
         super(annotations);
         this.deviceId = deviceId;
         this.appId = appId;
@@ -55,6 +58,8 @@
         this.bands = bands;
         this.context = Optional.ofNullable(context);
         this.op = op;
+        this.scope = scope;
+        this.index = index;
     }
 
     @Override
@@ -88,7 +93,15 @@
         return context;
     }
 
+    @Override
+    public MeterScope scope() {
+        return scope;
+    }
 
+    @Override
+    public Optional<Long> index() {
+        return index;
+    }
 
     public static Builder builder() {
         return new Builder();
@@ -102,6 +115,8 @@
                 .add("unit", unit)
                 .add("isBurst", burst)
                 .add("bands", bands)
+                .add("scope", scope)
+                .add("desired index", index.orElse(null))
                 .add("annotations", annotations())
                 .toString();
     }
@@ -114,9 +129,9 @@
         private Collection<Band> bands;
         private DeviceId deviceId;
         private MeterContext context;
-        private Optional<MeterId> desiredId = Optional.empty();
         private Annotations annotations;
-
+        private MeterScope scope = MeterScope.globalScope();
+        private Optional<Long> desiredIndex = Optional.empty();
 
         @Override
         public MeterRequest.Builder forDevice(DeviceId deviceId) {
@@ -131,19 +146,19 @@
         }
 
         @Override
-        public MeterRequest.Builder  withUnit(Meter.Unit unit) {
+        public MeterRequest.Builder withUnit(Meter.Unit unit) {
             this.unit = unit;
             return this;
         }
 
         @Override
-        public MeterRequest.Builder  burst() {
+        public MeterRequest.Builder burst() {
             this.burst = true;
             return this;
         }
 
         @Override
-        public MeterRequest.Builder  withBands(Collection<Band> bands) {
+        public MeterRequest.Builder withBands(Collection<Band> bands) {
             this.bands = ImmutableSet.copyOf(bands);
             return this;
         }
@@ -161,17 +176,29 @@
         }
 
         @Override
+        public MeterRequest.Builder withScope(MeterScope scope) {
+            this.scope = scope;
+            return this;
+        }
+
+        @Override
+        public MeterRequest.Builder withIndex(Long index) {
+            this.desiredIndex = Optional.ofNullable(index);
+            return this;
+        }
+
+        @Override
         public MeterRequest add() {
             validate();
-            return new DefaultMeterRequest(deviceId, appId, unit, burst, bands,
-                                           context, Type.ADD, annotations);
+            return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, context,
+                                           Type.ADD, scope, desiredIndex, annotations);
         }
 
         @Override
         public MeterRequest remove() {
             validate();
-            return new DefaultMeterRequest(deviceId, appId, unit, burst, bands,
-                                           context, Type.REMOVE, annotations);
+            return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, context,
+                                           Type.REMOVE, scope, desiredIndex, annotations);
         }
 
         private void validate() {
@@ -179,6 +206,9 @@
             checkNotNull(bands, "Must have bands.");
             checkArgument(!bands.isEmpty(), "Must have at least one band.");
             checkNotNull(appId, "Must have an application id");
+            if (desiredIndex.isPresent()) {
+                checkArgument(desiredIndex.get() >= 0, "Desired index cannot be negative");
+            }
         }
 
 
diff --git a/core/api/src/main/java/org/onosproject/net/meter/Meter.java b/core/api/src/main/java/org/onosproject/net/meter/Meter.java
index 63b6db3..64379d3 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/Meter.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/Meter.java
@@ -37,7 +37,12 @@
         /**
          * Kilo bits per second.
          */
-        KB_PER_SEC
+        KB_PER_SEC,
+
+        /**
+         * Bytes per second.
+         */
+        BYTES_PER_SEC
     }
 
     /**
@@ -65,10 +70,13 @@
 
     /**
      * The id of the application which created this meter.
+     * Could be null if the meter is read from the controller southbound.
      *
      * @return an application id
      */
     ApplicationId appId();
+    // TODO: Deprecate this and create a new method returns an Optional ApplicationId
+    // TODO: Or introduce MeterEntry on south and keep this method
 
     /**
      * The unit used within this meter.
diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java b/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java
index a2be1ce..e156fd4 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java
@@ -77,6 +77,20 @@
     Optional<MeterContext> context();
 
     /**
+     * Returns the scope of this meter request.
+     *
+     * @return a meter scope
+     */
+    MeterScope scope();
+
+    /**
+     * Returns the desired meter index of this meter request.
+     *
+     * @return an optional long index
+     */
+    Optional<Long> index();
+
+    /**
      * A meter builder.
      */
     interface Builder {
@@ -139,6 +153,22 @@
         Builder withAnnotations(Annotations annotations);
 
         /**
+         * Sets the scope.
+         *
+         * @param scope a meter scope
+         * @return this
+         */
+        Builder withScope(MeterScope scope);
+
+        /**
+         * Sets the index.
+         *
+         * @param index an optional index
+         * @return this
+         */
+        Builder withIndex(Long index);
+
+        /**
          * Requests the addition of a meter.
          *
          * @return a meter request
diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java
index 6339101..5b3ca3b 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java
@@ -42,19 +42,40 @@
      *
      * @param meter a meter to remove
      * @param meterId the meter id of the meter to remove.
+     * @deprecated in onos-2.5, replace MeterId with MeterCellId
      */
+    @Deprecated
     void withdraw(MeterRequest meter, MeterId meterId);
 
     /**
+     * Remove a meter from the system and the dataplane.
+     *
+     * @param meter a meter to remove
+     * @param meterCellId the meter cell id of the meter to remove.
+     */
+    void withdraw(MeterRequest meter, MeterCellId meterCellId);
+
+    /**
      * Fetch the meter by the meter id.
      *
      * @param deviceId a device id
      * @param id a meter id
      * @return a meter
+     * @deprecated in onos-2.5, Replace MeterId with MeterCellId
      */
+    @Deprecated
     Meter getMeter(DeviceId deviceId, MeterId id);
 
     /**
+     * Fetch the meter by the meter id.
+     *
+     * @param deviceId a device id
+     * @param id a meter cell id
+     * @return a meter
+     */
+    Meter getMeter(DeviceId deviceId, MeterCellId id);
+
+    /**
      * Fetches all the meters.
      *
      * @return a collection of meters
diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterState.java b/core/api/src/main/java/org/onosproject/net/meter/MeterState.java
index 78fdd90..c098d91 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/MeterState.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/MeterState.java
@@ -35,9 +35,4 @@
      */
     PENDING_REMOVE,
 
-    /**
-     * The meter has been removed.
-     */
-    REMOVED,
-
 }
diff --git a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java
index 7148c06..2a298b4 100644
--- a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java
@@ -36,11 +36,21 @@
     }
 
     @Override
+    public void withdraw(MeterRequest meter, MeterCellId meterCellId) {
+
+    }
+
+    @Override
     public Meter getMeter(DeviceId deviceId, MeterId id) {
         return null;
     }
 
     @Override
+    public Meter getMeter(DeviceId deviceId, MeterCellId meterCellId) {
+        return null;
+    }
+
+    @Override
     public Collection<Meter> getAllMeters() {
         return null;
     }
