diff --git a/core/api/src/main/java/org/onosproject/net/meter/Band.java b/core/api/src/main/java/org/onosproject/net/meter/Band.java
index 1942876..35a816f 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/Band.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/Band.java
@@ -20,6 +20,10 @@
  */
 public interface Band {
 
+    short MIN_PRECEDENCE = 0;
+    short MAX_PRECEDENCE = 255;
+    String ERR_MSG = "Precedence out of range";
+
     /**
      * Specifies the type of band.
      */
diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java
index 236566cb..b0ce738 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java
@@ -34,6 +34,9 @@
     public DefaultBand(Type type, long rate,
                        Long burstSize, Short prec) {
         this.type = type;
+        if (type == Type.REMARK) {
+            checkArgument(prec <= MAX_PRECEDENCE && prec >= MIN_PRECEDENCE, ERR_MSG);
+        }
         this.rate = rate;
         this.burstSize = burstSize;
         this.prec = prec;
diff --git a/core/api/src/test/java/org/onosproject/net/meter/DefaultMeterTest.java b/core/api/src/test/java/org/onosproject/net/meter/DefaultMeterTest.java
index e66e5a6..3dcb62f 100644
--- a/core/api/src/test/java/org/onosproject/net/meter/DefaultMeterTest.java
+++ b/core/api/src/test/java/org/onosproject/net/meter/DefaultMeterTest.java
@@ -35,6 +35,7 @@
     private Meter m1;
     private Meter sameAsm1;
     private Meter m2;
+    private Meter m3;
 
     @Before
     public void setup() {
@@ -44,6 +45,12 @@
                 .withRate(500)
                 .build();
 
+        Band band1 = DefaultBand.builder()
+                .ofType(Band.Type.REMARK)
+                .withRate(500)
+                .dropPrecedence((short) 1)
+                .build();
+
         m1 = DefaultMeter.builder()
                 .forDevice(did("1"))
                 .fromApp(APP_ID)
@@ -68,13 +75,23 @@
                 .withBands(Collections.singletonList(band))
                 .build();
 
+        m3 = DefaultMeter.builder()
+                .forDevice(did("3"))
+                .fromApp(APP_ID)
+                .withId(MeterId.meterId(3))
+                .withUnit(Meter.Unit.KB_PER_SEC)
+                .withBands(Collections.singletonList(band1))
+                .build();
+
+
     }
 
     @Test
     public void testEquality() {
         new EqualsTester()
                 .addEqualityGroup(m1, sameAsm1)
-                .addEqualityGroup(m2).testEquals();
+                .addEqualityGroup(m2)
+                .addEqualityGroup(m3).testEquals();
     }
 
     @Test
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java
index 5b7df81..0f67dd9 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java
@@ -61,7 +61,7 @@
                 .put(DEVICE_ID, meter.deviceId().toString());
 
         if (meter.appId() != null) {
-            result.put(APP_ID, meter.appId().toString());
+            result.put(APP_ID, meter.appId().name());
         }
 
         if (meter.state() != null) {
diff --git a/web/api/src/main/resources/definitions/Meter.json b/web/api/src/main/resources/definitions/Meter.json
index e8fefe5..d34b7e0 100644
--- a/web/api/src/main/resources/definitions/Meter.json
+++ b/web/api/src/main/resources/definitions/Meter.json
@@ -21,7 +21,7 @@
     },
     "appId": {
       "type": "string",
-      "example": "1"
+      "example": "org.onosproject.rest"
     },
     "deviceId": {
       "type": "string",
@@ -110,4 +110,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/web/api/src/main/resources/definitions/Meters.json b/web/api/src/main/resources/definitions/Meters.json
index 46e8727..d5f6d70 100644
--- a/web/api/src/main/resources/definitions/Meters.json
+++ b/web/api/src/main/resources/definitions/Meters.json
@@ -34,7 +34,7 @@
           },
           "appId": {
             "type": "string",
-            "example": "1"
+            "example": "org.onosproject.rest"
           },
           "deviceId": {
             "type": "string",
@@ -126,4 +126,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java
index bcf5d17..a23ca8c 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java
@@ -263,9 +263,9 @@
 
             // check application id
             final String jsonAppId = jsonMeter.get("appId").asString();
-            final String appId = meter.appId().toString();
+            final String appId = meter.appId().name();
             if (!jsonAppId.equals(appId)) {
-                reason = "appId " + meter.appId().toString();
+                reason = "appId " + meter.appId().name();
                 return false;
             }
 
