diff --git a/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
index 23cd7d8..5e7ef4b 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
@@ -18,22 +18,38 @@
 package org.onosproject.ui.topo;
 
 /**
- * Partial implementation of the types of highlight to apply to topology
- * elements.
+ * Partial implementation of the highlighting to apply to topology
+ * view elements.
  */
 public abstract class AbstractHighlight {
     private final TopoElementType type;
     private final String elementId;
 
+    /**
+     * Constructs the highlight.
+     *
+     * @param type highlight element type
+     * @param elementId element identifier
+     */
     public AbstractHighlight(TopoElementType type, String elementId) {
         this.type = type;
         this.elementId = elementId;
     }
 
+    /**
+     * Returns the element type.
+     *
+     * @return element type
+     */
     public TopoElementType type() {
         return type;
     }
 
+    /**
+     * Returns the element identifier.
+     *
+     * @return element identifier
+     */
     public String elementId() {
         return elementId;
     }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
index 1b721b8..fe1ecb2 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
@@ -18,7 +18,7 @@
 package org.onosproject.ui.topo;
 
 /**
- * Denotes the types of highlight to apply to a link.
+ * Denotes the highlighting to apply to a device.
  */
 public class DeviceHighlight extends AbstractHighlight {
 
@@ -26,5 +26,8 @@
         super(TopoElementType.DEVICE, deviceId);
     }
 
+    // TODO: implement device highlighting:
+    //   - visual highlight
+    //   - badging
 
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
index ff8b3be..cb64e07 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
@@ -18,7 +18,7 @@
 package org.onosproject.ui.topo;
 
 /**
- * Denotes the types of highlight to apply to a link.
+ * Denotes the highlighting to apply to a host.
  */
 public class HostHighlight extends AbstractHighlight {
 
@@ -26,5 +26,8 @@
         super(TopoElementType.HOST, hostId);
     }
 
+    // TODO: implement host highlighting:
+    //   - visual highlight
+    //   - badging
 
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
index d8e4279..b4e4330 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
@@ -27,8 +27,8 @@
  * Denotes the highlighting to be applied to a link.
  * {@link Flavor} is a closed set of NO-, PRIMARY-, or SECONDARY- highlighting.
  * {@link Mod} is an open ended set of additional modifications (CSS classes)
- * to apply. Note that {@link #MOD_OPTICAL} and {@link #MOD_ANIMATED} are
- * pre-defined mods.
+ * that may also be applied.
+ * Note that {@link #MOD_OPTICAL} and {@link #MOD_ANIMATED} are pre-defined mods.
  * Label text may be set, which will also be displayed on the link.
  */
 public class LinkHighlight extends AbstractHighlight {
@@ -136,48 +136,6 @@
     }
 
     /**
-     * Link highlighting modification.
-     * <p>
-     * Note that this translates to a CSS class name that is applied to
-     * the link in the Topology UI.
-     */
-    public static final class Mod implements Comparable<Mod> {
-        private final String modId;
-
-        public Mod(String modId) {
-            this.modId = checkNotNull(modId);
-        }
-
-        @Override
-        public String toString() {
-            return modId;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass()) {
-                return false;
-            }
-            Mod mod = (Mod) o;
-            return modId.equals(mod.modId);
-        }
-
-        @Override
-        public int hashCode() {
-            return modId.hashCode();
-        }
-
-
-        @Override
-        public int compareTo(Mod o) {
-            return this.modId.compareTo(o.modId);
-        }
-    }
-
-    /**
      * Denotes a link to be tagged as an optical link.
      */
     public static final Mod MOD_OPTICAL = new Mod("optical");
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/Mod.java b/core/api/src/main/java/org/onosproject/ui/topo/Mod.java
new file mode 100644
index 0000000..d21a872
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/topo/Mod.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.onosproject.ui.topo;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Highlighting modification.
+ * <p>
+ * Note that (for link highlights) this translates to a CSS class name
+ * that is applied to the link in the Topology UI.
+ */
+public final class Mod implements Comparable<Mod> {
+    private final String modId;
+
+    /**
+     * Constructs a mod with the given identifier.
+     *
+     * @param modId modification identifier
+     */
+    public Mod(String modId) {
+        this.modId = checkNotNull(modId);
+    }
+
+    @Override
+    public String toString() {
+        return modId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Mod mod = (Mod) o;
+        return modId.equals(mod.modId);
+    }
+
+    @Override
+    public int hashCode() {
+        return modId.hashCode();
+    }
+
+    @Override
+    public int compareTo(Mod o) {
+        return this.modId.compareTo(o.modId);
+    }
+}
