diff --git a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
index 5b73b29..d0633e6 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
@@ -169,7 +169,7 @@
         // Check for a bandwidth specification
         if (!isNullOrEmpty(bandwidthString)) {
             final double bandwidthValue = Double.parseDouble(bandwidthString);
-            constraints.add(new BandwidthConstraint(Bandwidth.valueOf(bandwidthValue)));
+            constraints.add(new BandwidthConstraint(Bandwidth.bps(bandwidthValue)));
         }
 
         // Check for a lambda specification
diff --git a/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java b/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java
index 6ccb519..8b55fa3 100644
--- a/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java
+++ b/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java
@@ -61,6 +61,7 @@
 
     /**
      * Annotation key for bandwidth.
+     * The value for this key is interpreted as Mbps.
      */
     public static final String BANDWIDTH = "bandwidth";
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/Bandwidth.java b/core/api/src/main/java/org/onosproject/net/resource/Bandwidth.java
index 19ceff4..dd6000e 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/Bandwidth.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/Bandwidth.java
@@ -17,9 +17,8 @@
 
 import java.util.Objects;
 
-// FIXME: Document what is the unit? Mbps?
 /**
- * Representation of bandwidth resource.
+ * Representation of bandwidth resource in bps.
  */
 public final class Bandwidth extends LinkResource {
 
@@ -40,16 +39,57 @@
     }
 
     /**
-     * Creates a new instance with given bandwidth.
+     * Creates a new instance with given bandwidth in bps.
      *
      * @param bandwidth bandwidth value to be assigned
      * @return {@link Bandwidth} instance with given bandwidth
      */
+    @Deprecated
     public static Bandwidth valueOf(double bandwidth) {
+        return bps(bandwidth);
+    }
+
+    /**
+     * Creates a new instance with given bandwidth in bps.
+     *
+     * @param bandwidth bandwidth value to be assigned
+     * @return {@link Bandwidth} instance with given bandwidth
+     */
+    public static Bandwidth bps(double bandwidth) {
         return new Bandwidth(bandwidth);
     }
 
     /**
+     * Creates a new instance with given bandwidth in Kbps.
+     *
+     * @param bandwidth bandwidth value to be assigned
+     * @return {@link Bandwidth} instance with given bandwidth
+     */
+    public static Bandwidth kbps(double bandwidth) {
+        return new Bandwidth(bandwidth * 1_000L);
+    }
+
+    /**
+     * Creates a new instance with given bandwidth in Mbps.
+     *
+     * @param bandwidth bandwidth value to be assigned
+     * @return {@link Bandwidth} instance with given bandwidth
+     */
+    public static Bandwidth mbps(double bandwidth) {
+        return new Bandwidth(bandwidth * 1_000_000L);
+    }
+
+    /**
+     * Creates a new instance with given bandwidth in Gbps.
+     *
+     * @param bandwidth bandwidth value to be assigned
+     * @return {@link Bandwidth} instance with given bandwidth
+     */
+    public static Bandwidth gbps(double bandwidth) {
+        return new Bandwidth(bandwidth * 1_000_000_000L);
+    }
+
+    /**
      * Returns bandwidth as a double value.
      *
      * @return bandwidth as a double value
diff --git a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceRequest.java
index 9acd200..20dc9ae 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceRequest.java
@@ -38,6 +38,7 @@
      *
      * @param bandwidth bandwidth value to be requested
      */
+    @Deprecated
     public BandwidthResourceRequest(double bandwidth) {
         this.bandwidth = Bandwidth.valueOf(bandwidth);
     }
diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
index cc7f2dc..0a380a1 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
@@ -35,11 +35,11 @@
     // Bandwidth Constraint
 
     final BandwidthConstraint bandwidthConstraint1 =
-            new BandwidthConstraint(Bandwidth.valueOf(100.0));
+            new BandwidthConstraint(Bandwidth.bps(100.0));
     final BandwidthConstraint bandwidthConstraintSameAs1 =
-            new BandwidthConstraint(Bandwidth.valueOf(100.0));
+            new BandwidthConstraint(Bandwidth.bps(100.0));
     final BandwidthConstraint bandwidthConstraint2 =
-            new BandwidthConstraint(Bandwidth.valueOf(200.0));
+            new BandwidthConstraint(Bandwidth.bps(200.0));
 
     /**
      * Checks that the objects were created properly.
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java
index cb654c3..d54789a 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java
@@ -116,7 +116,7 @@
 
         final LinkResourceService resourceService =
                 IntentTestsMocks.MockResourceService.makeBandwidthResourceService(1000.0);
-        final Constraint constraint = new BandwidthConstraint(Bandwidth.valueOf(100.0));
+        final Constraint constraint = new BandwidthConstraint(Bandwidth.bps(100.0));
 
         final List<Intent> compiledIntents = compileIntent(constraint, resourceService);
         assertThat(compiledIntents, notNullValue());
@@ -131,7 +131,7 @@
 
         final LinkResourceService resourceService =
                 IntentTestsMocks.MockResourceService.makeBandwidthResourceService(10.0);
-        final Constraint constraint = new BandwidthConstraint(Bandwidth.valueOf(100.0));
+        final Constraint constraint = new BandwidthConstraint(Bandwidth.bps(100.0));
 
         try {
             compileIntent(constraint, resourceService);
@@ -186,7 +186,7 @@
 
         final IntentTestsMocks.MockResourceService resourceService =
                 IntentTestsMocks.MockResourceService.makeBandwidthResourceService(1000.0);
-        final Constraint constraint = new BandwidthConstraint(Bandwidth.valueOf(100.0));
+        final Constraint constraint = new BandwidthConstraint(Bandwidth.bps(100.0));
 
         final List<Intent> compiledIntents = compileIntent(constraint, resourceService);
         assertThat(compiledIntents, notNullValue());
@@ -208,7 +208,7 @@
 
         final IntentTestsMocks.MockResourceService resourceService =
                 IntentTestsMocks.MockResourceService.makeBandwidthResourceService(1000.0);
-        final Constraint constraint = new BandwidthConstraint(Bandwidth.valueOf(100.0));
+        final Constraint constraint = new BandwidthConstraint(Bandwidth.bps(100.0));
 
         final List<Intent> compiledIntents = compileIntent(constraint, resourceService);
         assertThat(compiledIntents, notNullValue());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DistributedLinkResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DistributedLinkResourceStore.java
index 2835c15..0119e1f 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DistributedLinkResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DistributedLinkResourceStore.java
@@ -80,7 +80,7 @@
 
     private final Logger log = getLogger(getClass());
 
-    private static final Bandwidth DEFAULT_BANDWIDTH = Bandwidth.valueOf(1_000);
+    private static final Bandwidth DEFAULT_BANDWIDTH = Bandwidth.mbps(1_000);
 
     // table to store current allocations
     /** LinkKey -> List<LinkResourceAllocations>. */
@@ -89,7 +89,7 @@
     /** IntentId -> LinkResourceAllocations. */
     private static final String INTENT_ALLOCATIONS = "IntentAllocations";
 
-    private static final Bandwidth EMPTY_BW = Bandwidth.valueOf(0);
+    private static final Bandwidth EMPTY_BW = Bandwidth.bps(0);
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected DatabaseAdminService databaseAdminService;
@@ -100,7 +100,7 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected LinkService linkService;
 
-    // Link annotation key name to use as bandwidth
+    // Link annotation key name to use as bandwidth in Mbps
     private String bandwidthAnnotation = AnnotationKeys.BANDWIDTH;
     // Link annotation key name to use as max lambda
     private String wavesAnnotation = AnnotationKeys.OPTICAL_WAVES;
@@ -175,7 +175,7 @@
         String strBw = link.annotations().value(bandwidthAnnotation);
         if (strBw != null) {
             try {
-                bandwidth = Bandwidth.valueOf(Double.parseDouble(strBw));
+                bandwidth = Bandwidth.mbps(Double.parseDouble(strBw));
             } catch (NumberFormatException e) {
                 // do nothings
                 bandwidth = null;
@@ -242,7 +242,7 @@
                     }
                 }
 
-                free.put(type, Sets.newHashSet(new BandwidthResourceAllocation(Bandwidth.valueOf(freeBw))));
+                free.put(type, Sets.newHashSet(new BandwidthResourceAllocation(Bandwidth.bps(freeBw))));
                 break;
             }
 
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStore.java
index 5a2ce9a..7344862 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStore.java
@@ -78,9 +78,9 @@
 
     private final Logger log = getLogger(getClass());
 
-    private static final Bandwidth DEFAULT_BANDWIDTH = Bandwidth.valueOf(1_000);
+    private static final Bandwidth DEFAULT_BANDWIDTH = Bandwidth.mbps(1_000);
 
-    private static final Bandwidth EMPTY_BW = Bandwidth.valueOf(0);
+    private static final Bandwidth EMPTY_BW = Bandwidth.bps(0);
 
     // table to store current allocations
     /** LinkKey -> List<LinkResourceAllocations>. */
@@ -166,7 +166,7 @@
         String strBw = link.annotations().value(bandwidthAnnotation);
         if (strBw != null) {
             try {
-                bandwidth = Bandwidth.valueOf(Double.parseDouble(strBw));
+                bandwidth = Bandwidth.mbps(Double.parseDouble(strBw));
             } catch (NumberFormatException e) {
                 // do nothings
                 bandwidth = null;
@@ -243,7 +243,7 @@
                     }
                 }
 
-                free.put(type, Sets.newHashSet(new BandwidthResourceAllocation(Bandwidth.valueOf(freeBw))));
+                free.put(type, Sets.newHashSet(new BandwidthResourceAllocation(Bandwidth.bps(freeBw))));
                 break;
             }
 
diff --git a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
index c15018f..53bef7e 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
@@ -80,7 +80,7 @@
     private Link newLink(String dev1, int port1, String dev2, int port2) {
         Annotations annotations = DefaultAnnotations.builder()
                 .set(AnnotationKeys.OPTICAL_WAVES, "80")
-                .set(AnnotationKeys.BANDWIDTH, "1000000")
+                .set(AnnotationKeys.BANDWIDTH, "1000")
                 .build();
         return new DefaultLink(
                 new ProviderId("of", "foo"),
@@ -175,7 +175,7 @@
         final BandwidthResourceAllocation alloc = getBandwidthObj(freeRes);
         assertNotNull(alloc);
 
-        assertEquals(Bandwidth.valueOf(1000000.0), alloc.bandwidth());
+        assertEquals(Bandwidth.mbps(1000.0), alloc.bandwidth());
     }
 
     /**
@@ -212,7 +212,7 @@
                         ImmutableSet.of(link))
                 .build();
         final ResourceAllocation allocation =
-                new BandwidthResourceAllocation(Bandwidth.valueOf(900000.0));
+                new BandwidthResourceAllocation(Bandwidth.mbps(900.0));
         final Set<ResourceAllocation> allocationSet = ImmutableSet.of(allocation);
 
         final LinkResourceAllocations allocations =
@@ -233,7 +233,7 @@
                         ImmutableSet.of(link))
                         .build();
         final ResourceAllocation allocation =
-                new BandwidthResourceAllocation(Bandwidth.valueOf(9000000.0));
+                new BandwidthResourceAllocation(Bandwidth.mbps(9000.0));
         final Set<ResourceAllocation> allocationSet = ImmutableSet.of(allocation);
 
         final LinkResourceAllocations allocations =
@@ -261,7 +261,7 @@
                         ImmutableSet.of(link))
                         .build();
         final ResourceAllocation allocation =
-                new BandwidthResourceAllocation(Bandwidth.valueOf(900000.0));
+                new BandwidthResourceAllocation(Bandwidth.mbps(900.0));
         final Set<ResourceAllocation> allocationSet = ImmutableSet.of(allocation);
 
         final LinkResourceAllocations allocations =
diff --git a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
index 86ed13f..d32119c 100644
--- a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
+++ b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
@@ -312,7 +312,7 @@
                         .build();
         Map<Link, Set<ResourceAllocation>> allocations = new HashMap<>();
         allocations.put(new DefaultLink(PID, CP1, CP2, Type.DIRECT),
-                        ImmutableSet.of(new BandwidthResourceAllocation(Bandwidth.valueOf(10.0)),
+                        ImmutableSet.of(new BandwidthResourceAllocation(Bandwidth.bps(10.0)),
                                         new LambdaResourceAllocation(Lambda.valueOf(1))));
         testSerializable(new DefaultLinkResourceAllocations(request, allocations));
     }
@@ -324,7 +324,7 @@
 
     @Test
     public void testBandwidthConstraint() {
-        testSerializable(new BandwidthConstraint(Bandwidth.valueOf(1000.0)));
+        testSerializable(new BandwidthConstraint(Bandwidth.bps(1000.0)));
     }
 
     @Test
diff --git a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStore.java b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStore.java
index 64e18e2..b31face 100644
--- a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStore.java
+++ b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStore.java
@@ -55,7 +55,7 @@
 @Component(immediate = true)
 @Service
 public class SimpleLinkResourceStore implements LinkResourceStore {
-    private static final int DEFAULT_BANDWIDTH = 1_000;
+    private static final Bandwidth DEFAULT_BANDWIDTH = Bandwidth.mbps(1_000);
     private final Logger log = getLogger(getClass());
 
     private Map<IntentId, LinkResourceAllocations> linkResourceAllocationsMap;
@@ -96,14 +96,14 @@
             log.debug("No optical.wave annotation on link %s", link);
         }
 
-        int bandwidth = DEFAULT_BANDWIDTH;
+        Bandwidth bandwidth = DEFAULT_BANDWIDTH;
         try {
-            bandwidth = Integer.parseInt(annotations.value(AnnotationKeys.BANDWIDTH));
+            bandwidth = Bandwidth.mbps((Double.parseDouble(annotations.value(AnnotationKeys.BANDWIDTH))));
         } catch (NumberFormatException e) {
             log.debug("No bandwidth annotation on link %s", link);
         }
         allocations.add(
-                new BandwidthResourceAllocation(Bandwidth.valueOf(bandwidth)));
+                new BandwidthResourceAllocation(bandwidth));
         return allocations;
     }
 
@@ -123,7 +123,7 @@
                 return (BandwidthResourceAllocation) res;
             }
         }
-        return new BandwidthResourceAllocation(Bandwidth.valueOf(0));
+        return new BandwidthResourceAllocation(Bandwidth.bps(0));
     }
 
     /**
@@ -156,7 +156,7 @@
                 }
                 freeRes.remove(ba);
                 freeRes.add(new BandwidthResourceAllocation(
-                        Bandwidth.valueOf(newBandwidth)));
+                        Bandwidth.bps(newBandwidth)));
                 break;
             case LAMBDA:
                 final boolean lambdaAvailable = freeRes.remove(res);
@@ -198,7 +198,7 @@
                 double newBandwidth = ba.bandwidth().toDouble() + requestedBandwidth;
                 freeRes.remove(ba);
                 freeRes.add(new BandwidthResourceAllocation(
-                        Bandwidth.valueOf(newBandwidth)));
+                        Bandwidth.bps(newBandwidth)));
                 break;
             case LAMBDA:
                 checkState(freeRes.add(res));
diff --git a/core/store/trivial/src/test/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStoreTest.java b/core/store/trivial/src/test/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStoreTest.java
index 9638f3f..4f1bcab 100644
--- a/core/store/trivial/src/test/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStoreTest.java
+++ b/core/store/trivial/src/test/java/org/onosproject/store/trivial/impl/SimpleLinkResourceStoreTest.java
@@ -73,7 +73,7 @@
     private static Link newLink(String dev1, int port1, String dev2, int port2) {
         Annotations annotations = DefaultAnnotations.builder()
                 .set(AnnotationKeys.OPTICAL_WAVES, "80")
-                .set(AnnotationKeys.BANDWIDTH, "1000000")
+                .set(AnnotationKeys.BANDWIDTH, "1000")
                 .build();
         return new DefaultLink(
                 new ProviderId("of", "foo"),
@@ -159,7 +159,7 @@
         final BandwidthResourceAllocation alloc = getBandwidthObj(freeRes);
         assertNotNull(alloc);
 
-        assertEquals(Bandwidth.valueOf(1000000.0), alloc.bandwidth());
+        assertEquals(Bandwidth.mbps(1000.0), alloc.bandwidth());
     }
 
     /**
@@ -184,7 +184,7 @@
         @Override
         public Set<ResourceAllocation> getResourceAllocation(Link link) {
             final ResourceAllocation allocation =
-                    new BandwidthResourceAllocation(Bandwidth.valueOf(allocationAmount));
+                    new BandwidthResourceAllocation(Bandwidth.bps(allocationAmount));
             final Set<ResourceAllocation> allocations = new HashSet<>();
             allocations.add(allocation);
             return allocations;
diff --git a/web/api/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java b/web/api/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
index d96f481..8814add 100644
--- a/web/api/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
+++ b/web/api/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
@@ -138,7 +138,7 @@
 
         final List<Constraint> constraints =
                 ImmutableList.of(
-                    new BandwidthConstraint(Bandwidth.valueOf(1.0)),
+                    new BandwidthConstraint(Bandwidth.bps(1.0)),
                     new LambdaConstraint(Lambda.valueOf(3)),
                     new AnnotationConstraint("key", 33.0),
                     new AsymmetricPathConstraint(),
