diff --git a/web/gui/src/main/webapp/app/view/topo/topoInst.js b/web/gui/src/main/webapp/app/view/topo/topoInst.js
index 0d3a2ac..12e47c6 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoInst.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoInst.js
@@ -145,7 +145,7 @@
     function instColor(id, online) {
         // TODO: fix this..
         //return cat7.get(id, !online, network.view.getTheme());
-        return 'blue';
+        return '#3E5780';
     }
 
     // ==============================
diff --git a/web/gui/src/test/_karma/ev/migrate/ev_1_onos.json b/web/gui/src/test/_karma/ev/migrate/ev_1_showSummary.json
similarity index 100%
rename from web/gui/src/test/_karma/ev/migrate/ev_1_onos.json
rename to web/gui/src/test/_karma/ev/migrate/ev_1_showSummary.json
diff --git a/web/gui/src/test/_karma/ev/migrate/ev_2_onos.json b/web/gui/src/test/_karma/ev/migrate/ev_2_addInstance.json
similarity index 100%
rename from web/gui/src/test/_karma/ev/migrate/ev_2_onos.json
rename to web/gui/src/test/_karma/ev/migrate/ev_2_addInstance.json
diff --git a/web/gui/src/test/_karma/mockserver.js b/web/gui/src/test/_karma/mockserver.js
index 319c4c8..a89bcd5 100644
--- a/web/gui/src/test/_karma/mockserver.js
+++ b/web/gui/src/test/_karma/mockserver.js
@@ -6,7 +6,8 @@
     readline = require('readline'),
     http = require('http'),
     WebSocketServer = require('websocket').server,
-    port = 8123;
+    port = 8123,
+    scenarioRoot = 'ev/';
 
 var lastcmd,        // last command executed
     lastargs,       // arguments to last command
@@ -15,10 +16,19 @@
     scid,           // scenario ID
     scdata,         // scenario data
     scdone,         // shows when scenario is over
+    eventsById,     // map of event file names
+    maxEvno,        // highest loaded event number
     evno,           // next event number
     evdata;         // event data
 
 
+var scFiles = fs.readdirSync(scenarioRoot);
+console.log('Mock Server v1.0');
+console.log('================');
+console.log('Scenarios ...');
+console.log(scFiles.join(', '));
+console.log();
+
 
 var rl = readline.createInterface(process.stdin, process.stdout);
 rl.setPrompt('ws> ');
@@ -175,8 +185,8 @@
 }
 
 function scenarioPath(evno) {
-    var file = evno ? ('/ev_' + evno + '_onos.json') : '/scenario.json';
-    return 'ev/' + scid + file;
+    var file = evno ? ('/' + eventsById[evno].fname) : '/scenario.json';
+    return scenarioRoot + scid + file;
 }
 
 
@@ -189,6 +199,35 @@
     });
     evno = 1;
     scdone = false;
+    readEventFilenames();
+}
+
+function readEventFilenames() {
+    var files = fs.readdirSync(scenarioRoot + scid),
+        eventCount = 0,
+        match, id, tag;
+
+    maxEvno = 0;
+
+    eventsById = {};
+    files.forEach(function (f) {
+        match = /^ev_(\d+)_(.*)\.json$/.exec(f);
+        if (match) {
+            eventCount++;
+            id = match[1];
+            tag = match[2];
+            eventsById[id] = {
+                fname: f,
+                num: id,
+                tag: tag
+            };
+            if (Number(id) > Number(maxEvno)) {
+                maxEvno = id;
+            }
+        }
+
+    });
+    console.log('[' + eventCount + ' events loaded, (max=' + maxEvno + ')]');
 }
 
 function setScenario(id) {
@@ -229,20 +268,25 @@
         console.warn('No current connection.');
         rl.prompt();
     } else {
-        path = scenarioPath(evno);
-        fs.readFile(path, 'utf8', function (err, data) {
-            if (err) {
-                console.log('No event #' + evno);
-                scdone = true;
-                console.log('Scenario DONE');
-            } else {
-                evdata = JSON.parse(data);
-                console.log(); // get past prompt
-                console.log('Sending event #' + evno + ' [' + evdata.event + ']');
-                connection.sendUTF(data);
-                evno++;
-            }
-            rl.prompt();
-        });
+        if (Number(evno) > Number(maxEvno)) {
+            // done
+            scdone = true;
+            console.log('Scenario DONE.');
+        } else {
+            // fire next event
+            path = scenarioPath(evno);
+            fs.readFile(path, 'utf8', function (err, data) {
+                if (err) {
+                    console.log('Oops error: ' + err);
+                } else {
+                    evdata = JSON.parse(data);
+                    console.log(); // get past prompt
+                    console.log('Sending event #' + evno + ' [' + evdata.event + ']');
+                    connection.sendUTF(data);
+                    evno++;
+                }
+                rl.prompt();
+            });
+        }
     }
 }
