diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index c99f874..e8cccf4 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -15,17 +15,6 @@
  */
 package org.onosproject.net.device.impl;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.net.MastershipRole.*;
-import static org.onlab.util.Tools.namedThreads;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.List;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-
 import com.google.common.collect.Lists;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -65,6 +54,18 @@
 import org.onosproject.net.provider.AbstractProviderService;
 import org.slf4j.Logger;
 
+import java.util.List;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.namedThreads;
+import static org.onosproject.net.MastershipRole.MASTER;
+import static org.onosproject.net.MastershipRole.NONE;
+import static org.onosproject.net.MastershipRole.STANDBY;
+import static org.slf4j.LoggerFactory.getLogger;
+
 /**
  * Provides implementation of the device SB &amp; NB APIs.
  */
@@ -234,7 +235,7 @@
         log.debug("Checking mastership");
         for (Device device : getDevices()) {
             final DeviceId deviceId = device.id();
-            log.debug("Checking device {}", deviceId);
+            log.trace("Checking device {}", deviceId);
 
             if (!isReachable(deviceId)) {
                 continue;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/impl/MultiValuedTimestamp.java b/core/store/dist/src/main/java/org/onosproject/store/impl/MultiValuedTimestamp.java
index 46c416e..f460dbd 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/impl/MultiValuedTimestamp.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/impl/MultiValuedTimestamp.java
@@ -22,26 +22,28 @@
 import java.util.Objects;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * A logical timestamp that derives its value from two input values. Value1
- * always takes precedence over value2 when comparing timestamps.
+ * A logical timestamp that derives its value from two input values. The first
+ * value always takes precedence over the second value when comparing timestamps.
  */
-public class MultiValuedTimestamp implements Timestamp {
+public class MultiValuedTimestamp<T extends Comparable<T>, U extends Comparable<U>>
+        implements Timestamp {
 
-    private final Timestamp timestamp;
-    private final long value2;
+    private final T value1;
+    private final U value2;
 
     /**
      * Creates a new timestamp based on two values. The first value has higher
      * precedence than the second when comparing timestamps.
      *
-     * @param timestamp first value
+     * @param value1 first value
      * @param value2 second value
      */
-    public MultiValuedTimestamp(Timestamp timestamp, long value2) {
-        this.timestamp = timestamp;
-        this.value2 = value2;
+    public MultiValuedTimestamp(T value1, U value2) {
+        this.value1 = checkNotNull(value1);
+        this.value2 = checkNotNull(value2);
     }
 
     @Override
@@ -51,14 +53,14 @@
         MultiValuedTimestamp that = (MultiValuedTimestamp) o;
 
         return ComparisonChain.start()
-                .compare(this.timestamp, that.timestamp)
+                .compare(this.value1, that.value1)
                 .compare(this.value2, that.value2)
                 .result();
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(timestamp, value2);
+        return Objects.hash(value1, value2);
     }
 
     @Override
@@ -70,14 +72,14 @@
             return false;
         }
         MultiValuedTimestamp that = (MultiValuedTimestamp) obj;
-        return Objects.equals(this.timestamp, that.timestamp) &&
+        return Objects.equals(this.value1, that.value1) &&
                 Objects.equals(this.value2, that.value2);
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("timestamp", timestamp)
+                .add("value1", value1)
                 .add("value2", value2)
                 .toString();
     }
@@ -87,8 +89,8 @@
      *
      * @return first value
      */
-    public Timestamp timestamp() {
-        return timestamp;
+    public T value1() {
+        return value1;
     }
 
     /**
@@ -96,14 +98,14 @@
      *
      * @return second value
      */
-    public long sequenceNumber() {
+    public U value2() {
         return value2;
     }
 
     // Default constructor for serialization
     @SuppressWarnings("unused")
     private MultiValuedTimestamp() {
-        this.timestamp = null;
-        this.value2 = -1;
+        this.value1 = null;
+        this.value2 = null;
     }
 }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java
index 950cfde..4636cd7 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java
@@ -31,6 +31,7 @@
 
     @Override
     public Timestamp getTimestamp(K key, IntentData intentData) {
-        return new MultiValuedTimestamp(intentData.version(), sequenceNumber.getAndIncrement());
+        return new MultiValuedTimestamp<>(intentData.version(),
+                                          sequenceNumber.getAndIncrement());
     }
 }
