diff --git a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResource.java b/core/api/src/main/java/org/onosproject/net/resource/BandwidthResource.java
index 2093e0b..0f39198 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResource.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/BandwidthResource.java
@@ -15,27 +15,31 @@
  */
 package org.onosproject.net.resource;
 
+import org.onlab.util.Bandwidth;
+
 import java.util.Objects;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * Representation of bandwidth resource in bps.
  */
 public final class BandwidthResource extends LinkResource {
 
-    private final double bandwidth;
+    private final Bandwidth bandwidth;
 
     /**
      * Creates a new instance with given bandwidth.
      *
      * @param bandwidth bandwidth value to be assigned
      */
-    private BandwidthResource(double bandwidth) {
-        this.bandwidth = bandwidth;
+    private BandwidthResource(Bandwidth bandwidth) {
+        this.bandwidth = checkNotNull(bandwidth);
     }
 
     // Constructor for serialization
     private BandwidthResource() {
-        this.bandwidth = 0;
+        this.bandwidth = null;
     }
 
     /**
@@ -49,6 +53,10 @@
         return bps(bandwidth);
     }
 
+    public static BandwidthResource from(Bandwidth bandwidth) {
+        return new BandwidthResource(bandwidth);
+    }
+
     /**
      * Creates a new instance with given bandwidth in bps.
      *
@@ -56,7 +64,7 @@
      * @return {@link BandwidthResource} instance with given bandwidth
      */
     public static BandwidthResource bps(double bps) {
-        return new BandwidthResource(bps);
+        return from(Bandwidth.bps(bps));
     }
 
     /**
@@ -66,7 +74,7 @@
      * @return {@link BandwidthResource} instance with given bandwidth
      */
     public static BandwidthResource kbps(double kbps) {
-        return new BandwidthResource(kbps * 1_000L);
+        return from(Bandwidth.kbps(kbps));
     }
 
     /**
@@ -76,7 +84,7 @@
      * @return {@link BandwidthResource} instance with given bandwidth
      */
     public static BandwidthResource mbps(double mbps) {
-        return new BandwidthResource(mbps * 1_000_000L);
+        return from(Bandwidth.mbps(mbps));
     }
 
     /**
@@ -86,7 +94,7 @@
      * @return {@link BandwidthResource} instance with given bandwidth
      */
     public static BandwidthResource gbps(double gbps) {
-        return new BandwidthResource(gbps * 1_000_000_000L);
+        return from(Bandwidth.gbps(gbps));
     }
 
     /**
@@ -95,7 +103,7 @@
      * @return bandwidth as a double value
      */
     public double toDouble() {
-        return bandwidth;
+        return bandwidth.bps();
     }
 
     @Override
