diff --git a/web/gui/src/main/webapp/app/fw/widget/button.css b/web/gui/src/main/webapp/app/fw/widget/button.css
new file mode 100644
index 0000000..e4439b6e0
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/widget/button.css
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Button Service -- CSS file
+ */
+
+.btn svg.embeddedIcon,
+.tog svg.embeddedIcon,
+.rad svg.embeddedIcon {
+    cursor: pointer;
+}
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 0cc3ddd..1a906c3 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,7 @@
 
     var $log, fs, is;
 
-    var btnSize = 30;
+    var btnSize = 25;
 
     function noop() {}
 
@@ -41,7 +41,7 @@
         var btnDiv = createDiv(div, 'btn', id),
             cbFnc = fs.isF(cb) || noop;
 
-        is.loadIcon(btnDiv, gid, btnSize);
+        is.loadIcon(btnDiv, gid, btnSize, true);
 
         btnDiv.on('click', cbFnc);
 
@@ -62,7 +62,7 @@
             togDiv = createDiv(div, 'tog', id),
             cbFnc = fs.isF(cb) || noop;
 
-        is.loadIcon(togDiv, gid, btnSize);
+        is.loadIcon(togDiv, gid, btnSize, true);
 
         function _toggle(b) {
             if (b === undefined) {
diff --git a/web/gui/src/main/webapp/app/fw/widget/toolbar.css b/web/gui/src/main/webapp/app/fw/widget/toolbar.css
new file mode 100644
index 0000000..d25279d
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/widget/toolbar.css
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Toolbar Service -- CSS file
+ */
+
+.floatpanel.toolbar {
+    position: absolute;
+    z-index: 100;
+    display: block;
+    top: 75px; /* TODO: change this to proper height*/
+    width: 200px;
+    right: -220px;
+    opacity: 0;
+
+    padding: 10px;
+    font-size: 10pt;
+
+    -moz-border-radius: 6px;
+    border-radius: 6px;
+}
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 9518239..d80dbf8 100644
--- a/web/gui/src/main/webapp/app/fw/widget/toolbar.js
+++ b/web/gui/src/main/webapp/app/fw/widget/toolbar.js
@@ -20,18 +20,27 @@
 (function () {
     'use strict';
 
-    var $log, fs, ps, bns;
+    var $log, fs, ps, bns, is;
 
     var ids = [],
+        defaultSettings = {
+            edge: 'left',
+            width: 400
+        },
+        settings,
+        arrowSize = 10,
         tbarId,
         tbarPanel,
         tbarDiv,
         tbarArrowDiv;
 
+    // this function is only used in testing
     function init() {
         ids = [];
     }
 
+    // === Helper functions --------------------------------------
+
     function validId(id, caller) {
         if (fs.inArray(id, ids) !== -1) {
             $log.warn(caller + ': ID already exists');
@@ -40,6 +49,34 @@
         return true;
     }
 
+    // translate(0 50) looks good with arrowSize of 10
+    function rotateArrowLeft() {
+        tbarArrowDiv.select('g')
+            .attr('transform', 'translate(0 50) rotate(-90)');
+    }
+
+    function rotateArrowRight() {
+        tbarArrowDiv.select('g')
+            .attr('transform', 'translate(0 50) rotate(90)');
+    }
+
+    function createArrow() {
+        tbarArrowDiv = tbarDiv.append('div')
+            .classed('tbarArrow', true)
+            .style({'position': 'absolute',
+                'top': '50%',
+                'left': '98%',
+                'margin-right': '-2%',
+                'transform': 'translate(-50%, -50%)',
+                'cursor': 'pointer'});
+        is.loadEmbeddedIcon(tbarArrowDiv, 'tableColSortAsc', arrowSize);
+        rotateArrowLeft();
+
+        tbarArrowDiv.on('click', toggleTools);
+    }
+
+    // === Adding to toolbar functions ----------------------------
+
     function addButton(id, gid, cb, tooltip) {
         var btnId = tbarId + '-' + id;
         if (!validId(btnId, 'addButton')) { return null; }
@@ -66,46 +103,72 @@
             $log.warn('Separator cannot append to div');
             return null;
         }
-        tbarArrowDiv = tbarDiv.append('div')
+        return tbarDiv.append('div')
             .classed('sep', true)
             .style('width', '2px');
     }
 
-    function createToolbar(id, settings) {
+    // === Main toolbar API functions ----------------------------
+
+    function createToolbar(id, opts) {
         if (!id) {
             $log.warn('createToolbar: no ID given');
             return null;
         }
         tbarId = 'tbar-' + id;
-        var opts = fs.isO(settings) || {}; // default settings should be put here
+        settings = angular.extend({}, defaultSettings, fs.isO(opts));
 
         if (!validId(tbarId, 'createToolbar')) { return null; }
         ids.push(tbarId);
 
-        tbarPanel = ps.createPanel(tbarId, opts);
-        tbarDiv = tbarPanel.classed('toolbar', true);
+        tbarPanel = ps.createPanel(tbarId, settings);
+        tbarDiv = tbarPanel.classed('toolbar', true)
+            .style('position', 'relative');
+
+        createArrow();
 
         return {
             addButton: addButton,
             addToggle: addToggle,
             addRadioSet: addRadioSet,
-            addSeparator: addSeparator
+            addSeparator: addSeparator,
+
+            show: show,
+            hide: hide,
+            toggleTools: toggleTools
         }
     }
 
-    //function currently not working
     function destroyToolbar(id) {
-        //ps.destroyPanel(id);
+        ps.destroyPanel(id);
+        tbarDiv = null;
+    }
+
+    function show(cb) {
+        tbarPanel.show(cb);
+        rotateArrowLeft();
+    }
+
+    function hide(cb) {
+        tbarPanel.hide(cb);
+        //tbarPanel.style(opts.edge, (arrowSize + 4 + 'px'));
+        rotateArrowRight();
+    }
+
+    function toggleTools(cb) {
+        if (tbarPanel.isVisible()) { hide(cb); }
+        else { show(cb) }
     }
 
     angular.module('onosWidget')
         .factory('ToolbarService', ['$log', 'FnService',
-            'PanelService', 'ButtonService',
-            function (_$log_, _fs_, _ps_, _bns_) {
+            'PanelService', 'ButtonService', 'IconService',
+            function (_$log_, _fs_, _ps_, _bns_, _is_) {
                 $log = _$log_;
                 fs = _fs_;
                 ps = _ps_;
                 bns = _bns_;
+                is = _is_;
 
                 return {
                     init: init,
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 116ff13..9a99291 100644
--- a/web/gui/src/main/webapp/app/view/sample/sample.js
+++ b/web/gui/src/main/webapp/app/view/sample/sample.js
@@ -20,13 +20,21 @@
 
 (function () {
     'use strict';
+    var tbs;
+
     angular.module('ovSample', ['onosUtil'])
-        .controller('OvSampleCtrl', ['$log', function (_$log_) {
-            var self = this,
-                $log = _$log_;
+        .controller('OvSampleCtrl', ['$log', 'ToolbarService',
+            function (_$log_, _tbs_) {
+                var self = this,
+                    $log = _$log_,
+                    tbs = _tbs_;
 
-            self.message = 'Hey there folks!';
+                self.message = 'Hey there folks!';
 
-         $log.log('OvSampleCtrl has been created');
+                var toolbar = tbs.createToolbar('sample');
+                toolbar.addButton('some-btn', 'crown', function () {});
+                toolbar.show();
+
+             $log.log('OvSampleCtrl has been created');
         }]);
 }());
diff --git a/web/gui/src/main/webapp/index.html b/web/gui/src/main/webapp/index.html
index 0e62297..083162a 100644
--- a/web/gui/src/main/webapp/index.html
+++ b/web/gui/src/main/webapp/index.html
@@ -79,6 +79,8 @@
     <link rel="stylesheet" href="app/fw/layer/quickhelp.css">
     <link rel="stylesheet" href="app/fw/layer/veil.css">
     <link rel="stylesheet" href="app/fw/nav/nav.css">
+    <link rel="stylesheet" href="app/fw/widget/button.css">
+    <link rel="stylesheet" href="app/fw/widget/toolbar.css">
 
     <!-- This is where contributed javascript will get injected -->
     <!-- {INJECTED-JAVASCRIPT-START} -->
diff --git a/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js b/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js
index d61be12..179c011 100644
--- a/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js
@@ -74,6 +74,16 @@
         expect($log.warn).not.toHaveBeenCalled();
     });
 
+    it('should verify the toolbar arrow div exists', function () {
+        tbs.createToolbar('test');
+
+        var arrow = d3Elem.select('.tbarArrow');
+        expect(arrow).toBeTruthy();
+        expect(arrow.select('svg')).toBeTruthy();
+        expect(arrow.select('svg').select('g')
+            .classed('tableColSortAsc')).toBeTruthy();
+    });
+
     it('should create a button', function () {
         spyOn($log, 'warn');
         var toolbar = tbs.createToolbar('test'),
@@ -140,13 +150,13 @@
         expect(d3Elem.select('.sep').style('width')).toBe('2px');
     });
 
-    //it('should not append to a destroyed toolbar', function () {
-    //    spyOn($log, 'warn');
-    //    var toolbar = tbs.createToolbar1('test');
-    //    expect(toolbar).not.toBeNull();
-    //    tbs.destroyToolbar('tbar-test');
-    //    expect(toolbar.addButton1('btn', 'gid', function () {})).toBeNull();
-    //    expect($log.warn).toHaveBeenCalledWith('Button cannot append to div');
-    //});
+    it('should not append to a destroyed toolbar', function () {
+        spyOn($log, 'warn');
+        var toolbar = tbs.createToolbar('test');
+        expect(toolbar).not.toBeNull();
+        tbs.destroyToolbar('tbar-test');
+        expect(toolbar.addButton('btn', 'gid', function () {})).toBeNull();
+        expect($log.warn).toHaveBeenCalledWith('Button cannot append to div');
+    });
 
 });
