diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java b/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java
index f3920b2..8313f3f 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java
@@ -18,6 +18,7 @@
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Objects;
+import org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
@@ -36,16 +37,18 @@
     private final long burstSize;
     private final Action action;
     private final short dscp;
+    private final Type type;
 
     // Mutable parameters
     private long processedPackets;
     private long processedBytes;
 
-    private DefaultTokenBucket(long r, long bS, Action a, short d) {
+    private DefaultTokenBucket(long r, long bS, Action a, short d, Type t) {
         rate = r;
         burstSize = bS;
         action = a;
         dscp = d;
+        type = t;
     }
 
     @Override
@@ -69,6 +72,11 @@
     }
 
     @Override
+    public Type type() {
+        return type;
+    }
+
+    @Override
     public long processedPackets() {
         return processedPackets;
     }
@@ -94,7 +102,8 @@
                 .add("rate", rate())
                 .add("burstSize", burstSize())
                 .add("action", action())
-                .add("dscp", dscp()).toString();
+                .add("dscp", dscp())
+                .add("type", type()).toString();
     }
 
     @Override
@@ -109,12 +118,13 @@
         return rate == that.rate &&
                 burstSize == that.burstSize &&
                 Objects.equal(action, that.action) &&
-                dscp == that.dscp;
+                dscp == that.dscp &&
+                Objects.equal(type, that.type);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(rate, burstSize, action, dscp);
+        return Objects.hashCode(rate, burstSize, action, dscp, type);
     }
 
     /**
@@ -136,6 +146,7 @@
         private long burstSize = 2 * 1500;
         private Action action;
         private short dscp;
+        private Type type;
 
         @Override
         public TokenBucket.Builder withRate(long r) {
@@ -162,9 +173,16 @@
         }
 
         @Override
+        public TokenBucket.Builder withType(Type t) {
+            type = t;
+            return this;
+        }
+
+        @Override
         public DefaultTokenBucket build() {
-            // Not null condition on the action
+            // Not null condition on the action and on the type
             checkNotNull(action, "Must specify an action");
+            checkNotNull(type, "Must specify a type");
 
             // If action is based on DSCP modification
             if (action == DSCP_CLASS || action == DSCP_PRECEDENCE) {
@@ -173,7 +191,7 @@
             }
 
             // Finally we build the token bucket
-            return new DefaultTokenBucket(rate, burstSize, action, dscp);
+            return new DefaultTokenBucket(rate, burstSize, action, dscp, type);
         }
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucket.java b/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucket.java
index a86466b..7e3a943 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucket.java
@@ -36,8 +36,26 @@
     short MIN_DSCP = 0;
 
     /**
+     * Token bucket type.
+     */
+    enum Type {
+        /**
+         * Committed rate.
+         */
+        COMMITTED,
+        /**
+         * Excess rate.
+         */
+        EXCESS,
+        /**
+         * Peak rate.
+         */
+        PEAK
+    }
+
+    /**
      * Action applied to the exceeding traffic.
-     * Action depends on the tocken bucket type
+     * Action in general depends on the token bucket type.
      */
     enum Action {
         /**
@@ -90,6 +108,13 @@
     short dscp();
 
     /**
+     * Token bucket type.
+     *
+     * @return the token bucket type
+     */
+    Type type();
+
+    /**
      * Stats which reports how many packets have been
      * processed so far.
      *
@@ -152,6 +177,16 @@
         Builder withDscp(short dscp);
 
         /**
+         * Assigns the type to this token bucket.
+         * <p>
+         * Note: mandatory setter for this builder
+         * </p>
+         * @param type the type
+         * @return this
+         */
+        Builder withType(Type type);
+
+        /**
          * Builds the token bucket based on the specified
          * parameters when possible.
          *
diff --git a/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/PolicerTest.java b/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/PolicerTest.java
index 142f962..ba5d7cd 100644
--- a/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/PolicerTest.java
+++ b/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/PolicerTest.java
@@ -31,6 +31,9 @@
 import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Action.DROP;
 import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Action.DSCP_CLASS;
 import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Action.DSCP_PRECEDENCE;
+import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type.COMMITTED;
+import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type.EXCESS;
+import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type.PEAK;
 
 /**
  * Test class for policer implementation.
@@ -73,6 +76,7 @@
         TokenBucket tokenBucket = DefaultTokenBucket.builder()
                 .withBurstSize(0)
                 .withAction(DROP)
+                .withType(COMMITTED)
                 .build();
         // Create a policer with above token bucket
         Policer policer = DefaultPolicer.builder()
@@ -106,6 +110,7 @@
         TokenBucket tokenBucket = DefaultTokenBucket.builder()
                 .withRate(1)
                 .withAction(DROP)
+                .withType(COMMITTED)
                 .build();
         // Create a policer with above token bucket
         Policer policer = DefaultPolicer.builder()
@@ -140,6 +145,7 @@
                 .withRate(1)
                 .withAction(DSCP_PRECEDENCE)
                 .withDscp((short) 2)
+                .withType(COMMITTED)
                 .build();
         // Create a policer with above token bucket
         Policer policer = DefaultPolicer.builder()
@@ -174,12 +180,14 @@
                 .withRate(1)
                 .withAction(DSCP_PRECEDENCE)
                 .withDscp((short) 2)
+                .withType(COMMITTED)
                 .build();
         // Create token bucket for excess rate
         TokenBucket erTokenBucket = DefaultTokenBucket.builder()
                 .withRate(1)
                 .withBurstSize(4 * 1500)
                 .withAction(DROP)
+                .withType(EXCESS)
                 .build();
         // Create a policer with above token buckets
         Policer policer = DefaultPolicer.builder()
@@ -218,6 +226,7 @@
                 .withRate(1250)
                 .withBurstSize(10 * 1500)
                 .withAction(DROP)
+                .withType(PEAK)
                 .build();
         // Create token bucket for committed rate at 1Mb/s
         TokenBucket crTokenBucket = DefaultTokenBucket.builder()
@@ -225,6 +234,7 @@
                 .withRate(125)
                 .withAction(DSCP_CLASS)
                 .withDscp((short) 10)
+                .withType(COMMITTED)
                 .build();
         // Create a policer with above token buckets
         Policer policer = DefaultPolicer.builder()
@@ -304,12 +314,14 @@
         TokenBucket blockTokenBucket = DefaultTokenBucket.builder()
                 .withBurstSize(0)
                 .withAction(DROP)
+                .withType(COMMITTED)
                 .build();
         // Create a mark traffic token bucket
         TokenBucket markTokenBucket = DefaultTokenBucket.builder()
                 .withBurstSize(0)
                 .withAction(DSCP_CLASS)
                 .withDscp((short) 10)
+                .withType(COMMITTED)
                 .build();
         // Create first policer
         Policer policerOne = DefaultPolicer.builder()
diff --git a/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucketTest.java b/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucketTest.java
index 7deedda..7f3d818 100644
--- a/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucketTest.java
+++ b/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/TokenBucketTest.java
@@ -26,6 +26,9 @@
 import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Action.DROP;
 import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Action.DSCP_CLASS;
 import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Action.DSCP_PRECEDENCE;
+import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type.COMMITTED;
+import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type.EXCESS;
+import static org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type.PEAK;
 
 /**
  * Test class for TokenBucket.
@@ -50,6 +53,7 @@
         TokenBucket drop = DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .withAction(DROP)
+                .withType(COMMITTED)
                 .build();
         // Not null
         assertThat(drop, notNullValue());
@@ -59,6 +63,8 @@
         assertThat(drop.burstSize(), is(2 * 1500L));
         // Action should be drop
         assertThat(drop.action(), is(DROP));
+        // For committed rate
+        assertThat(drop.type(), is(COMMITTED));
     }
 
     /**
@@ -67,22 +73,25 @@
     @Test
     public void testDscpPrecCreation() {
         // Create a dscp precedence token bucket
-        TokenBucket drop = DefaultTokenBucket.builder()
+        TokenBucket mark = DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .withAction(DSCP_PRECEDENCE)
                 .withBurstSize(6 * 1500)
                 .withDscp(DSCP_PREC)
+                .withType(EXCESS)
                 .build();
         // Not null
-        assertThat(drop, notNullValue());
+        assertThat(mark, notNullValue());
         // Rate should be equal to RATE
-        assertThat(drop.rate(), is(RATE));
+        assertThat(mark.rate(), is(RATE));
         // Burst size should be equal to 6xMTU
-        assertThat(drop.burstSize(), is(6 * 1500L));
+        assertThat(mark.burstSize(), is(6 * 1500L));
         // Action should increase dscp drop precedence
-        assertThat(drop.action(), is(DSCP_PRECEDENCE));
+        assertThat(mark.action(), is(DSCP_PRECEDENCE));
         // Dcsp drop precedence should be increased of 2
-        assertThat(drop.dscp(), is(DSCP_PREC));
+        assertThat(mark.dscp(), is(DSCP_PREC));
+        // For excess rate
+        assertThat(mark.type(), is(EXCESS));
     }
 
     /**
@@ -91,21 +100,24 @@
     @Test
     public void testDscpClassCreation() {
         // Create a dscp class token bucket
-        TokenBucket drop = DefaultTokenBucket.builder()
+        TokenBucket mark = DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .withAction(DSCP_CLASS)
                 .withDscp(DSCP_CL)
+                .withType(PEAK)
                 .build();
         // Not null
-        assertThat(drop, notNullValue());
+        assertThat(mark, notNullValue());
         // Rate should be equal to RATE
-        assertThat(drop.rate(), is(RATE));
+        assertThat(mark.rate(), is(RATE));
         // Burst size should be equal to 2xMTU
-        assertThat(drop.burstSize(), is(2 * 1500L));
+        assertThat(mark.burstSize(), is(2 * 1500L));
         // Action should be drop
-        assertThat(drop.action(), is(DSCP_CLASS));
+        assertThat(mark.action(), is(DSCP_CLASS));
         // Dcsp drop precedence should be increased of 2
-        assertThat(drop.dscp(), is(DSCP_CL));
+        assertThat(mark.dscp(), is(DSCP_CL));
+        // For peak rate
+        assertThat(mark.type(), is(PEAK));
     }
 
     /**
@@ -122,7 +134,7 @@
         // Define expected exception
         exceptionNullAction.expect(NullPointerException.class);
         // Create a token bucket without action
-        TokenBucket drop = DefaultTokenBucket.builder()
+        DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .build();
     }
@@ -141,10 +153,11 @@
         // Define expected exception
         exceptionWrongDscp.expect(IllegalArgumentException.class);
         // Create a token bucket with wrong dscp
-        TokenBucket drop = DefaultTokenBucket.builder()
+        DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .withAction(DSCP_PRECEDENCE)
                 .withDscp(WRONG_DSCP)
+                .withType(COMMITTED)
                 .build();
     }
 
@@ -157,17 +170,20 @@
         TokenBucket drop = DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .withAction(DROP)
+                .withType(COMMITTED)
                 .build();
         // Create a mark token bucket
         TokenBucket mark = DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .withAction(DSCP_PRECEDENCE)
                 .withDscp(DSCP_PREC)
+                .withType(COMMITTED)
                 .build();
         // Create a copy of the drop token bucket
         TokenBucket copyDrop = DefaultTokenBucket.builder()
                 .withRate(RATE)
                 .withAction(DROP)
+                .withType(COMMITTED)
                 .build();
         // Verify equality
         assertEquals(drop, copyDrop);
