diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java b/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java
index a30c047..ac1a8bb 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java
@@ -62,9 +62,9 @@
         InputStream indexTemplate = classLoader.getResourceAsStream(INDEX);
         String index = new String(toByteArray(indexTemplate));
 
-        int p1s = split(index, 0, INJECT_JS_START);
+        int p1s = split(index, 0, INJECT_JS_START) - INJECT_JS_START.length();
         int p1e = split(index, p1s, INJECT_JS_END);
-        int p2s = split(index, p1e, INJECT_CSS_START);
+        int p2s = split(index, p1e, INJECT_CSS_START) - INJECT_CSS_START.length();
         int p2e = split(index, p2s, INJECT_CSS_END);
         int p3s = split(index, p2e, null);
 
@@ -78,17 +78,23 @@
         return Response.ok(new SequenceInputStream(streams)).build();
     }
 
-    // Produces an input stream including CSS injections from all extensions.
-    private InputStream includeCss(UiExtensionService service) {
-        Builder<InputStream> builder = ImmutableList.builder();
-        service.getExtensions().forEach(ext -> add(builder, ext.css()));
-        return new SequenceInputStream(new StreamEnumeration(builder.build()));
-    }
-
     // Produces an input stream including JS injections from all extensions.
     private InputStream includeJs(UiExtensionService service) {
         Builder<InputStream> builder = ImmutableList.builder();
-        service.getExtensions().forEach(ext -> add(builder, ext.js()));
+        service.getExtensions().forEach(ext -> {
+            add(builder, ext.js());
+            add(builder, new NewlineInputStream());
+        });
+        return new SequenceInputStream(new StreamEnumeration(builder.build()));
+    }
+
+    // Produces an input stream including CSS injections from all extensions.
+    private InputStream includeCss(UiExtensionService service) {
+        Builder<InputStream> builder = ImmutableList.builder();
+        service.getExtensions().forEach(ext -> {
+            add(builder, ext.css());
+            add(builder, new NewlineInputStream());
+        });
         return new SequenceInputStream(new StreamEnumeration(builder.build()));
     }
 
@@ -99,4 +105,19 @@
         }
     }
 
+    private static final String NL = String.format("%n");
+    private static final byte[] NL_BYTES = NL.getBytes();
+
+    private static class NewlineInputStream extends InputStream {
+        private int index = 0;
+
+        @Override
+        public int read() throws IOException {
+            if (index == NL_BYTES.length) {
+                return -1;
+            }
+            return NL_BYTES[index++];
+        }
+    }
+
 }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java b/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
index 42d1dff..92725d9 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
@@ -43,6 +43,8 @@
 
     private static final String INJECT_VIEW_IDS_START = "// {INJECTED-VIEW-IDS-START}";
     private static final String INJECT_VIEW_IDS_END = "// {INJECTED-VIEW-IDS-END}";
+    private static final String PREFIX = "        '";
+    private static final String SUFFIX = String.format("',%n");
 
     @GET
     @Produces(SCRIPT)
@@ -51,7 +53,7 @@
         InputStream jsTemplate = getClass().getClassLoader().getResourceAsStream(MAIN_JS);
         String js = new String(toByteArray(jsTemplate));
 
-        int p1s = split(js, 0, INJECT_VIEW_IDS_START);
+        int p1s = split(js, 0, INJECT_VIEW_IDS_START) - INJECT_VIEW_IDS_START.length();
         int p1e = split(js, 0, INJECT_VIEW_IDS_END);
         int p2s = split(js, p1e, null);
 
@@ -68,7 +70,7 @@
         StringBuilder sb = new StringBuilder("\n");
         for (UiExtension extension : service.getExtensions()) {
             for (UiView view : extension.views()) {
-                sb.append("        '").append(view.id()).append("',");
+                sb.append(PREFIX).append(view.id()).append(SUFFIX);
             }
         }
         return new ByteArrayInputStream(sb.toString().getBytes());
diff --git a/web/gui/src/main/resources/core/css.html b/web/gui/src/main/resources/core/css.html
index 97bee6b..49f4ff6 100644
--- a/web/gui/src/main/resources/core/css.html
+++ b/web/gui/src/main/resources/core/css.html
@@ -1 +1 @@
-<!-- Builtin view stylesheets are in the main index.html -->
+<!-- Builtin view stylesheets defined in index.html template -->
diff --git a/web/gui/src/main/resources/core/js.html b/web/gui/src/main/resources/core/js.html
index 8e2269b..01fb039 100644
--- a/web/gui/src/main/resources/core/js.html
+++ b/web/gui/src/main/resources/core/js.html
@@ -1 +1 @@
-<!-- Builtin view javascript is in the main index.html -->
\ No newline at end of file
+<!-- Builtin view javascript defined in index.html template -->
diff --git a/web/gui/src/main/webapp/app/fw/util/fn.js b/web/gui/src/main/webapp/app/fw/util/fn.js
index defb845..14060b9 100644
--- a/web/gui/src/main/webapp/app/fw/util/fn.js
+++ b/web/gui/src/main/webapp/app/fw/util/fn.js
@@ -223,9 +223,7 @@
 
     // return the given string with the first character capitalized.
     function cap(s) {
-        return s.toLowerCase().replace(/^[a-z]/, function (m) {
-            return m.toUpperCase();
-        });
+        return s ? s[0].toUpperCase() + s.slice(1) : s;
     }
 
     // return the parameter without a px suffix
diff --git a/web/gui/src/main/webapp/app/view/app/app.js b/web/gui/src/main/webapp/app/view/app/app.js
index 2cca7c0..16c1e72 100644
--- a/web/gui/src/main/webapp/app/view/app/app.js
+++ b/web/gui/src/main/webapp/app/view/app/app.js
@@ -326,13 +326,9 @@
             ['scroll down', 'See more apps']
         ]);
 
-        function capitalize(s) {
-            return s ? s[0].toUpperCase() + s.slice(1) : s;
-        }
-
         function createConfirmationText(action, itemId) {
             var content = ds.createDiv();
-            content.append('p').text(capitalize(action) + ' ' + itemId);
+            content.append('p').text(fs.cap(action) + ' ' + itemId);
             if (strongWarning[itemId]) {
                 content.append('p').text(discouragement).classed('strong', true);
             }
diff --git a/web/gui/src/main/webapp/index.html b/web/gui/src/main/webapp/index.html
index adead69..3d22c9a 100644
--- a/web/gui/src/main/webapp/index.html
+++ b/web/gui/src/main/webapp/index.html
@@ -130,7 +130,7 @@
     <script src="app/view/processor/processor.js"></script>
     <script src="app/view/tunnel/tunnel.js"></script>
 
-    <!-- This is where contributed javascript will get injected -->
+    <!-- Contributed javascript injected here -->
     <!-- {INJECTED-JAVASCRIPT-START} -->
     <!-- {INJECTED-JAVASCRIPT-END} -->
 
@@ -150,7 +150,7 @@
     <link rel="stylesheet" href="app/view/processor/processor.css">
     <link rel="stylesheet" href="app/view/tunnel/tunnel.css">
 
-    <!-- This is where contributed stylesheets will get injected -->
+    <!-- Contributed stylesheets injected here -->
     <!-- {INJECTED-STYLESHEETS-START} -->
     <!-- {INJECTED-STYLESHEETS-END} -->
 
diff --git a/web/gui/src/main/webapp/onos.js b/web/gui/src/main/webapp/onos.js
index fcb9310..2fffb24 100644
--- a/web/gui/src/main/webapp/onos.js
+++ b/web/gui/src/main/webapp/onos.js
@@ -33,38 +33,27 @@
         'onosWidget'
     ];
 
-    // view IDs.. note the first view listed is loaded at startup
+    // view IDs.. injected via the servlet
     var viewIds = [
         // {INJECTED-VIEW-IDS-START}
-        'topo',
-        'device',
-        'flow',
-        'port',
-        'group',
-        'meter',
-        'host',
-        'app',
-        'intent',
-        'cluster',
-        'link',
         // {INJECTED-VIEW-IDS-END}
-
         // dummy entry
         ''
     ];
 
-    var viewDependencies = [];
+    var defaultView = 'topo',
+        viewDependencies = [];
 
     viewIds.forEach(function (id) {
         if (id) {
-            viewDependencies.push('ov' + capitalize(id));
+            viewDependencies.push('ov' + cap(id));
         }
     });
 
     var moduleDependencies = coreDependencies.concat(viewDependencies);
 
-    function capitalize(word) {
-        return word ? word[0].toUpperCase() + word.slice(1) : word;
+    function cap(s) {
+        return s ? s[0].toUpperCase() + s.slice(1) : s;
     }
 
     angular.module('onosApp', moduleDependencies)
@@ -97,8 +86,6 @@
                 flash.initFlash();
                 qhs.initQuickHelp();
 
-                // TODO: register handler for user settings, etc.
-
                 wss.createWebSocket({
                     wsport: $location.search().wsport
                 });
@@ -111,14 +98,14 @@
             }])
 
         .config(['$routeProvider', function ($routeProvider) {
-            // If view ID not provided, route to the first view in the list.
+            // If view ID not provided, route to the default view
             $routeProvider
                 .otherwise({
-                    redirectTo: '/topo'
+                    redirectTo: '/' + defaultView
                 });
 
             function viewCtrlName(vid) {
-                return 'Ov' + capitalize(vid) + 'Ctrl';
+                return 'Ov' + cap(vid) + 'Ctrl';
             }
 
             function viewTemplateUrl(vid) {
