diff --git a/web/gui/src/main/webapp/app/fw/widget/button.css b/web/gui/src/main/webapp/app/fw/widget/button.css
index 4ae4954..9b4c519 100644
--- a/web/gui/src/main/webapp/app/fw/widget/button.css
+++ b/web/gui/src/main/webapp/app/fw/widget/button.css
@@ -18,6 +18,9 @@
  ONOS GUI -- Button Service -- CSS file
  */
 
+.tbarArrow {
+    padding: 0 10px 0 10px;
+}
 .light .tbarArrow svg.embeddedIcon .icon.tableColSortAsc .glyph {
     fill: #838383;
 }
@@ -27,18 +30,13 @@
 
 .button,
 .toggleButton,
-.radioSet,
-.radioButton,
-.separator {
-    display: inline-block;
-}
-.button,
-.toggleButton,
 .radioSet {
+    display: inline-block;
     padding: 0 4px 0 4px;
 }
 .radioButton {
-    padding: 0 4px 0 0;
+    display: inline-block;
+    padding: 0 2px 0 2px;
 }
 
 .button svg.embeddedIcon,
diff --git a/web/gui/src/main/webapp/app/fw/widget/button.js b/web/gui/src/main/webapp/app/fw/widget/button.js
index c735b64..d604851 100644
--- a/web/gui/src/main/webapp/app/fw/widget/button.js
+++ b/web/gui/src/main/webapp/app/fw/widget/button.js
@@ -22,7 +22,8 @@
 
     var $log, fs, is;
 
-    var btnSize = 25;
+    var btnSize = 25,
+        btnPadding = 4;
 
     function noop() {}
 
@@ -102,21 +103,30 @@
             rads = [],
             sel;
 
-        function _selected() {
+        function _selected(s) {
             var curr = d3.select(this),
-                currId = curr.attr('id');
+                currId = curr.attr('id'),
+                selIndex = _getIndex(),
+                currIndex = _getIndex(currId);
 
             // I have it going by id's because I couldn't think of a way
             // to get the radio button's index from the div element
                 // We could look at the end of the radio button id for its number
                 // but I didn't know how to get the end of the string's number
-            if (sel !== currId) {
-                var selIndex = _getIndex(),
-                    currIndex = _getIndex(currId);
-                rads[selIndex].el.classed('selected', false);
-                curr.classed('selected', true);
-                rads[currIndex].cb();
-                sel = currId;
+            if (!s) {
+                if (sel !== currId) {
+                    rads[selIndex].el.classed('selected', false);
+                    curr.classed('selected', true);
+                    rads[currIndex].cb();
+                    sel = currId;
+                }
+            } else {
+                if (!rads[s].el.classed('selected')) {
+                    rads[selIndex].el.classed('selected', false);
+                    rads[s].el.classed('selected', true);
+                    rads[s].cb();
+                    sel = rads[s].id;
+                }
             }
         }
 
@@ -154,13 +164,19 @@
 
         return {
             rads: rads,
+            width: (((btnSize + btnPadding) * rads.length) + btnPadding),
             selected: function (i) {
                 if (i === undefined) { _getIndex(); }
-                else { _selected(); }
+                else { _selected(i); }
             }
         }
     }
 
+    function width(s) {
+        if (s) { btnSize = s; }
+        return btnSize;
+    }
+
     angular.module('onosWidget')
         .factory('ButtonService', ['$log', 'FnService', 'IconService',
             function (_$log_, _fs_, _is_) {
@@ -171,7 +187,8 @@
                 return {
                     button: button,
                     toggle: toggle,
-                    radioSet: radioSet
+                    radioSet: radioSet,
+                    width: width
                 };
             }]);
 
diff --git a/web/gui/src/main/webapp/app/fw/widget/toolbar.css b/web/gui/src/main/webapp/app/fw/widget/toolbar.css
index 43f3124..5c3c750 100644
--- a/web/gui/src/main/webapp/app/fw/widget/toolbar.css
+++ b/web/gui/src/main/webapp/app/fw/widget/toolbar.css
@@ -21,6 +21,7 @@
 .separator {
     border: 1px solid;
     margin: 0 4px 0 4px;
+    display: inline-block;
 }
 .light .separator {
     border-color: #ddd;
diff --git a/web/gui/src/main/webapp/app/fw/widget/toolbar.js b/web/gui/src/main/webapp/app/fw/widget/toolbar.js
index edd1cdc..d9d02e4 100644
--- a/web/gui/src/main/webapp/app/fw/widget/toolbar.js
+++ b/web/gui/src/main/webapp/app/fw/widget/toolbar.js
@@ -25,14 +25,16 @@
     var ids = [],
         defaultSettings = {
             edge: 'left',
-            width: 400,
+            width: 20,
             margin: 0,
             hideMargin: -20,
             top: '80%',
-            fade: false
+            fade: false,
+            shown: false
         },
         settings,
         arrowSize = 10,
+        btnPadding = 4,
         tbarId,
         tbarPanel,
         tbarDiv,
@@ -53,24 +55,23 @@
         return true;
     }
 
+    // TODO: Allow toolbar to be on right edge of screen
     // translate uses 50 because the svg viewbox is 50
     function rotateArrowLeft() {
         tbarArrowDiv.select('g')
             .attr('transform', 'translate(0 50) rotate(-90)');
     }
-
     function rotateArrowRight() {
         tbarArrowDiv.select('g')
             .attr('transform', 'translate(50 0) rotate(90)');
     }
-
     function createArrow() {
         tbarArrowDiv = tbarDiv.append('div')
             .classed('tbarArrow', true)
             .style({'position': 'absolute',
                 'top': '53%',
-                'left': '98%',
-                'margin-right': '-2%',
+                'left': '96%',
+                'margin-right': '-4%',
                 'transform': 'translate(-50%, -50%)',
                 'cursor': 'pointer'});
         is.loadEmbeddedIcon(tbarArrowDiv, 'tableColSortAsc', arrowSize);
@@ -80,25 +81,38 @@
 
     // === Adding to toolbar functions ----------------------------
 
+    // TODO: these add functions look very similar -- combine them somehow?
     function addButton(id, gid, cb, tooltip) {
-        var btnId = tbarId + '-' + id;
+        var btnId = tbarId + '-' + id,
+            button;
         if (!validId(btnId, 'addButton')) { return null; }
         ids.push(btnId);
-        return bns.button(tbarDiv, btnId, gid, cb, tooltip);
+        button =  bns.button(tbarDiv, btnId, gid, cb, tooltip);
+        if (button) { addToWidth(bns.width()); }
+        displayTools();
+        return button;
     }
 
     function addToggle(id, gid, initState, cb, tooltip) {
-        var togId = tbarId + '-' + id;
+        var togId = tbarId + '-' + id,
+            toggle;
         if (!validId(togId, 'addToggle')) { return null; }
         ids.push(togId);
-        return bns.toggle(tbarDiv, togId, gid, initState, cb, tooltip);
+        toggle =  bns.toggle(tbarDiv, togId, gid, initState, cb, tooltip);
+        if (toggle) { addToWidth(bns.width()); }
+        displayTools();
+        return toggle;
     }
 
     function addRadioSet(id, rset) {
-        var radId = tbarId + '-' + id;
+        var radId = tbarId + '-' + id,
+            radios;
         if (!validId(radId, 'addRadioSet')) { return null; }
         ids.push(radId);
-        return bns.radioSet(tbarDiv, radId, rset);
+        radios = bns.radioSet(tbarDiv, radId, rset);
+        if (radios) { addToWidth(radios.width); }
+        displayTools();
+        return radios;
     }
 
     function addSeparator() {
@@ -106,9 +120,12 @@
             $log.warn('Separator cannot append to div');
             return null;
         }
+        addToWidth(2);
+        displayTools();
         return tbarDiv.append('div')
             .classed('separator', true)
-            .style('height', '23px');
+            .style({'height': '23px',
+                    'width': '0px'});
     }
 
     // === Main toolbar API functions ----------------------------
@@ -129,6 +146,7 @@
             .style('top', settings.top);
 
         createArrow();
+        displayTools();
 
         return {
             addButton: addButton,
@@ -138,10 +156,11 @@
 
             show: show,
             hide: hide,
-            toggleTools: toggleTools
+            toggleTools: toggleTools,
+
+            width: width
         }
     }
-
     function destroyToolbar(id) {
         ps.destroyPanel(id);
         tbarDiv = null;
@@ -151,16 +170,29 @@
         tbarPanel.show(cb);
         rotateArrowLeft();
     }
-
     function hide(cb) {
         tbarPanel.hide(cb);
         rotateArrowRight();
     }
-
     function toggleTools(cb) {
         if (tbarPanel.isVisible()) { hide(cb); }
         else { show(cb) }
     }
+    function displayTools() {
+        if (settings.shown) { show(); }
+        else { hide(); }
+    }
+
+    function width(w) {
+        if (w) { tbarPanel.width(w); }
+        return tbarPanel.width();
+    }
+    function addToWidth(size) {
+        if (!(settings.width > (fs.windowSize(0, 500).width))) {
+            settings.width = width() + size + btnPadding;
+            tbarPanel.width(settings.width);
+        }
+    }
 
     angular.module('onosWidget')
         .factory('ToolbarService', ['$log', 'FnService',
diff --git a/web/gui/src/main/webapp/app/view/sample/sample.js b/web/gui/src/main/webapp/app/view/sample/sample.js
index 21985ee..37323d2 100644
--- a/web/gui/src/main/webapp/app/view/sample/sample.js
+++ b/web/gui/src/main/webapp/app/view/sample/sample.js
@@ -66,15 +66,16 @@
                     .style('font-size', '16pt');
 
                 var toolbar = tbs.createToolbar('sample'),
-                    rset = [{ gid: 'checkMark', cb: checkFn },
+                    rset = [
+                        { gid: 'checkMark', cb: checkFn },
                         { gid: 'xMark', cb: xMarkFn },
                         { gid: 'bird', cb: birdFn }
                     ];
-                toolbar.addButton('hello-button', 'crown', btnFn);
-                toolbar.addToggle('look-toggle', 'chain', false, togFn);
+                toolbar.addButton('demo-button', 'crown', btnFn);
+                toolbar.addToggle('demo-toggle', 'chain', false, togFn);
                 toolbar.addSeparator();
-                toolbar.addRadioSet('something-radio', rset);
-                toolbar.hide();
+                toolbar.addRadioSet('demo-radio', rset);
+                toolbar.addSeparator();
 
              $log.log('OvSampleCtrl has been created');
         }]);
