diff --git a/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java b/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
index 12d3b62..909bbbb 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.ui.topo;
 
+import com.google.common.base.Preconditions;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -34,6 +36,7 @@
     private static final String MIN = "min";
     private static final String MAX = "max";
 
+
     /**
      * A notion of amount.
      */
@@ -43,6 +46,7 @@
         MAXIMALLY(MAX);
 
         private final String s;
+
         Amount(String str) {
             s = str;
         }
@@ -58,7 +62,30 @@
     private final Map<String, LinkHighlight> links = new HashMap<>();
 
     private Amount subdueLevel = Amount.ZERO;
+    private int delayMs = 0;
 
+    //TODO: Think of a better solution for topology events race conditions
+    /**
+     * Sets the number of milliseconds to delay processing of highlights
+     * events on the client side.
+     *
+     * @param ms milliseconds to delay
+     * @return self, for chaining
+     */
+    public Highlights delay(int ms) {
+        Preconditions.checkArgument(ms >= 0, "Delay cannot be lower than 0");
+        delayMs = ms;
+        return this;
+    }
+
+    /**
+     * Return the delay for the highlight event.
+     *
+     * @return delay in milliseconds
+     */
+    public int delayMs() {
+        return delayMs;
+    }
 
     /**
      * Adds highlighting information for a device.
@@ -186,4 +213,5 @@
     public LinkHighlight getLink(String id) {
         return links.get(id);
     }
+
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
index efe69f5..bd07d6c 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
@@ -33,6 +33,7 @@
     static final String HOSTS = "hosts";
     static final String LINKS = "links";
     static final String SUBDUE = "subdue";
+    static final String DELAY = "delay";
 
     static final String ID = "id";
     static final String LABEL = "label";
@@ -99,6 +100,10 @@
         if (!toSubdue.equals(Highlights.Amount.ZERO)) {
             payload.put(SUBDUE, toSubdue.toString());
         }
+        int delay = highlights.delayMs();
+        if (delay > 0) {
+            payload.put(DELAY, delay);
+        }
         return payload;
     }
 
