diff --git a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2FlowRuleProgrammable.java b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2FlowRuleProgrammable.java
index d8fed8a..5fc9908 100644
--- a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2FlowRuleProgrammable.java
+++ b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2FlowRuleProgrammable.java
@@ -47,7 +47,6 @@
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.locks.Lock;
@@ -152,7 +151,7 @@
                         log.debug("getFlowEntries(): inconsistent entry id! BUG? Updating it... remote={}, local={}",
                                  remoteEntryId, localEntryId);
                         frWrapper = new Bmv2FlowRuleWrapper(frWrapper.rule(), remoteEntryId,
-                                                            frWrapper.creationDate());
+                                                            frWrapper.installedOnMillis());
                         tableEntryService.bind(entryRef, frWrapper);
                     }
 
@@ -255,7 +254,7 @@
                         }
                         // Add entry.
                         entryId = doAddEntry(deviceAgent, bmv2Entry);
-                        frWrapper = new Bmv2FlowRuleWrapper(rule, entryId, new Date());
+                        frWrapper = new Bmv2FlowRuleWrapper(rule, entryId, System.currentTimeMillis());
                     } else {
                         // Remove entry
                         if (frWrapper == null) {
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java
index 31bab78..e23059d 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java
@@ -20,8 +20,6 @@
 import com.google.common.base.Objects;
 import org.onosproject.net.flow.FlowRule;
 
-import java.util.Date;
-
 /**
  * A wrapper for a ONOS flow rule installed on a BMv2 device.
  */
@@ -30,19 +28,20 @@
 
     private final FlowRule rule;
     private final long entryId;
-    private final Date creationDate;
+    private final long installedOnMillis;
 
     /**
      * Creates a new flow rule wrapper.
      *
-     * @param rule         a flow rule
-     * @param entryId      a BMv2 table entry ID
-     * @param creationDate the creation date of the flow rule
+     * @param rule              a flow rule
+     * @param entryId           a BMv2 table entry ID
+     * @param installedOnMillis the time (in milliseconds, since January 1, 1970 UTC) when the flow rule was installed
+     *                          on the device
      */
-    public Bmv2FlowRuleWrapper(FlowRule rule, long entryId, Date creationDate) {
+    public Bmv2FlowRuleWrapper(FlowRule rule, long entryId, long installedOnMillis) {
         this.rule = rule;
         this.entryId = entryId;
-        this.creationDate = new Date();
+        this.installedOnMillis = installedOnMillis;
     }
 
     /**
@@ -55,21 +54,22 @@
     }
 
     /**
-     * Return the seconds since when this flow rule was installed on the device.
+     * Return the number of seconds since when this flow rule was installed on the device.
      *
      * @return an integer value
      */
     public long lifeInSeconds() {
-        return (new Date().getTime() - creationDate.getTime()) / 1000;
+        return (System.currentTimeMillis() - installedOnMillis) / 1000;
     }
 
     /**
-     * Returns the creation date of this flow rule.
+     * Returns the the time (in milliseconds, since January 1, 1970 UTC) when the flow rule was installed on
+     * the device.
      *
-     * @return a date
+     * @return a long value
      */
-    public Date creationDate() {
-        return creationDate;
+    public long installedOnMillis() {
+        return installedOnMillis;
     }
 
     /**
@@ -83,7 +83,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(rule, entryId, creationDate);
+        return Objects.hashCode(rule, entryId, installedOnMillis);
     }
 
     @Override
@@ -97,11 +97,11 @@
         final Bmv2FlowRuleWrapper other = (Bmv2FlowRuleWrapper) obj;
         return Objects.equal(this.rule, other.rule)
                 && Objects.equal(this.entryId, other.entryId)
-                && Objects.equal(this.creationDate, other.creationDate);
+                && Objects.equal(this.installedOnMillis, other.installedOnMillis);
     }
 
     @Override
     public String toString() {
-        return creationDate + "-" + rule.hashCode();
+        return installedOnMillis + "-" + rule.hashCode();
     }
 }
