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 16c1e72..7f620ae 100644
--- a/web/gui/src/main/webapp/app/view/app/app.js
+++ b/web/gui/src/main/webapp/app/view/app/app.js
@@ -22,7 +22,7 @@
     'use strict';
 
     // injected refs
-    var $log, $scope, $loc, fs, ps, wss, is, ns, ks, is;
+    var $log, $scope, wss, fs, ks, ps, is;
 
     // internal state
     var  detailsPanel,
@@ -31,7 +31,6 @@
          top,
          middle,
          bottom,
-         iconDiv,
          wSize = false;
 
     // constants
@@ -39,9 +38,7 @@
         ACTIVE = 'ACTIVE',
         appMgmtReq = 'appManagementRequest',
         topPdg = 50,
-        ctnrPdg = 24,
-        tbWidth = 470,
-        scrollSize = 17,
+        panelWidth = 500,
         pName = 'application-details-panel',
         detailsReq = 'appDetailsRequest',
         detailsResp = 'appDetailsResponse',
@@ -57,8 +54,9 @@
         },
         discouragement = 'Deactivating or uninstalling this component can' +
         ' have serious negative consequences! Do so at your own risk!!',
-        propOrder = ['id', 'state', 'category', 'version', 'origin', 'role', 'url'],
-        friendlyProps = ['App ID', 'State', 'Category', 'Version', 'Origin', 'Role', 'URL'];
+        propOrder = ['id', 'state', 'category', 'version', 'origin', 'role'],
+        friendlyProps = ['App ID', 'State', 'Category', 'Version', 'Origin', 'Role'];
+        // note: url is handled separately
 
     function createDetailsPane() {
         detailsPanel = ps.createPanel(pName, {
@@ -90,158 +88,113 @@
     }
 
     function setUpPanel() {
-        var container, closeBtn, tblDiv;
+        var container, closeBtn, div;
+
         detailsPanel.empty();
+        detailsPanel.width(panelWidth);
 
         container = detailsPanel.append('div').classed('container', true);
 
         top = container.append('div').classed('top', true);
         closeBtn = top.append('div').classed('close-btn', true);
         addCloseBtn(closeBtn);
-        iconDiv = top.append('div').classed('dev-icon', true);
 
-        tblDiv = top.append('div').classed('top-tables', true);
-        tblDiv.append('div').classed('left', true).append('table');
-        tblDiv.append('div').classed('right', true).append('table');
-        tblDiv.append('div').classed('description', true).append('table');
+        div = top.append('div').classed('top-content', true);
 
-        top.append('hr');
+        function ndiv(cls, tcls) {
+            var  d = div.append('div').classed(cls, true);
+            if (tcls) {
+                d.append('table').classed(tcls, true);
+            }
+        }
+
+        ndiv('left app-icon');
+        ndiv('right', 'app-props');
+        ndiv('app-url');
+
+        container.append('hr');
 
         middle = container.append('div').classed('middle', true);
-        tblDiv = middle.append('div').classed('middle-tables', true);
-        tblDiv.append('div').classed('readme', true).append('table');
+        middle.append('div').classed('app-readme', true);
 
-        middle.append('hr');
+        container.append('hr');
 
+        // TODO: make bottom container scrollable
         bottom = container.append('div').classed('bottom', true);
-        tblDiv = bottom.append('div').classed('bottom-tables', true).append('table');
-        tblDiv.append('h2').html('Features');
-        tblDiv.append('div').classed('features', true).append('table');
-        tblDiv.append('h2').html('Required Apps');
-        tblDiv.append('div').classed('required-apps', true).append('table');
-        tblDiv.append('h2').html('Permissions');
-        tblDiv.append('div').classed('permissions', true).append('table');
+
+        function nTable(hdr, cls) {
+            bottom.append('h2').html(hdr);
+            bottom.append('div').classed(cls, true).append('table');
+        }
+
+        nTable('Features', 'features');
+        nTable('Required Apps', 'required-apps');
+        nTable('Permissions', 'permissions');
     }
 
     function addProp(tbody, index, value) {
-        var tr = tbody.append('tr');
+        var tr = tbody.append('tr'),
+            vcls = index ? 'value' : 'value-bold';
 
         function addCell(cls, txt) {
             tr.append('td').attr('class', cls).html(txt);
         }
-        addCell('label', friendlyProps[index] + ' :');
-        addCell('value', value);
+
+        addCell('label', friendlyProps[index] + ':');
+        addCell(vcls, value);
     }
 
-    function addUrl(tbody, index, value) {
-        var href = '<a href="' + value + '" target="_blank">' + value + '</a>';
-        addProp(tbody, index, href);
+    function urlize(u) {
+        return '<i>URL:</i> <a href="' + u + '" target="_blank">' + u + '</a>';
     }
 
-    function addIcon(tbody, value) {
-        var tr = tbody.append('tr');
-        var td = tr.append('td');
-        td.append('img').attr('src', iconUrlPrefix + value + iconUrlSuffix);
+    function addIcon(elem, value) {
+        elem.append('img').attr('src', iconUrlPrefix + value + iconUrlSuffix);
     }
 
-    function addContent(tbody, value) {
-        var tr = tbody.append('tr');
-        tr.append('td').html(value);
-    }
+    function populateTop(details) {
+        var propsBody = top.select('.app-props').append('tbody'),
+            url = details.url;
 
-    function populateTop(tblDiv, details) {
-        var leftTbl = tblDiv.select('.left')
-                        .select('table')
-                        .append('tbody'),
-            rightTbl = tblDiv.select('.right')
-                        .select('table')
-                        .append('tbody'),
-            descriptionTbl = tblDiv.select('.description')
-                        .select('table')
-                        .append('tbody');
+        addIcon(top.select('.app-icon'), details.id);
 
-        top.select('h2').html(details.name);
-
-        // place application icon to the left table
-        addIcon(leftTbl, details.id);
-
-        // place rest of the fields to the right table
         propOrder.forEach(function (prop, i) {
-            var fn = prop === 'url' ? addUrl : addProp;
-            fn(rightTbl, i, details[prop]);
+            addProp(propsBody, i, details[prop]);
         });
 
-        // place description field to the description table
-        addContent(descriptionTbl, details.desc);
+        if (url) {
+            top.select('.app-url').html(urlize(url));
+        }
     }
 
-    function populateMiddle(tblDiv, details) {
-        var readmeTbl = tblDiv.select('.readme')
-                        .select('table')
-                        .append('tbody');
-
-        // place readme field to the readme table
-        addContent(readmeTbl, details.readme);
+    function populateMiddle(details) {
+        middle.select('.app-readme').text(details.readme);
     }
 
-    function populateName(div, name) {
-        var lab = div.select('.label'),
-            val = div.select('.value');
-        lab.html('Friendly Name:');
-        val.html(name);
+    function populateBottom(details) {
+
+        function addItems(cls, items) {
+            var table = bottom.select('.' + cls).select('table'),
+                tbody = table.append('tbody');
+
+            items.forEach(function (item) {
+                tbody.append('tr').append('td').html(item);
+            });
+        }
+
+        addItems('features', details.features);
+        addItems('required-apps', details.required_apps);
+        addItems('permissions', details.permissions);
     }
 
     function populateDetails(details) {
-        var nameDiv, topTbs, middleTbs, bottomTbs;
         setUpPanel();
-
-        nameDiv = top.select('.name-div');
-        topTbs = top.select('.top-tables');
-        middleTbs = middle.select('.middle-tables');
-        bottomTbs = bottom.select('.bottom-tables');
-
-        populateName(nameDiv, details.name);
-        populateTop(topTbs, details);
-        populateMiddle(middleTbs, details);
-        populateBottom(bottomTbs, details);
-
+        populateTop(details);
+        populateMiddle(details);
+        populateBottom(details);
         detailsPanel.height(pHeight);
     }
 
-    function addItem(tbody, item) {
-        var tr = tbody.append('tr').attr('width', tbWidth + 'px');
-        tr.append('td').attr('width', tbWidth + 'px')
-                       .attr('style', 'text-align:left').html(item);
-    }
-
-    function addItems(table, items) {
-        var tbody = table.append('tbody');
-        items.forEach(function (item) {
-            addItem(tbody, item);
-        });
-    }
-
-    function populateBottom(tblDiv, details) {
-        var featuresTbl = tblDiv.select('.features')
-                                    .select('table'),
-            permissionsTbl = tblDiv.select('.permissions')
-                                    .select('table'),
-            requiredAppsTbl = tblDiv.select('.required-apps')
-                                    .select('table');
-
-        addItems(featuresTbl, details.features);
-        addItems(requiredAppsTbl, details._required_apps);
-        addItems(permissionsTbl, details.permissions);
-
-        featuresTbl.style({
-            width: tbWidth + 'px',
-            overflow: 'auto',
-            display: 'block'
-        });
-
-        detailsPanel.width(tbWidth + ctnrPdg);
-    }
-
     function respDetailsCb(data) {
         $scope.panelData = data.details;
         $scope.$apply();
@@ -250,15 +203,15 @@
     angular.module('ovApp', [])
     .controller('OvAppCtrl',
         ['$log', '$scope', '$http',
-        'FnService', 'TableBuilderService', 'PanelService', 'WebSocketService',
-        'IconService', 'UrlFnService', 'KeyService', 'DialogService',
+         'WebSocketService', 'FnService', 'KeyService', 'PanelService',
+         'IconService', 'UrlFnService', 'DialogService', 'TableBuilderService',
 
-    function (_$log_, _$scope_, $http, _fs_, tbs, _ps_, _wss_, _is_, ufs, _ks_, ds) {
+    function (_$log_, _$scope_, $http, _wss_, _fs_, _ks_, _ps_, _is_, ufs, ds, tbs) {
         $log = _$log_;
         $scope = _$scope_;
         wss = _wss_;
-        ks = _ks_;
         fs = _fs_;
+        ks = _ks_;
         ps = _ps_;
         is = _is_;
         $scope.panelData = {};
@@ -285,7 +238,6 @@
             } else {
                 $scope.hidePanel();
             }
-            $log.debug('Got a click on:', row);
         }
 
         function refreshCtrls() {
@@ -318,12 +270,12 @@
 
         // TODO: reexamine where keybindings should be - directive or controller?
         ks.keyBindings({
-            esc: [$scope.selectCallback, 'Deselect app'],
+            esc: [$scope.selectCallback, 'Deselect application'],
             _helpFormat: ['esc']
         });
         ks.gestureNotes([
-            ['click row', 'Select / deselect app'],
-            ['scroll down', 'See more apps']
+            ['click row', 'Select / deselect application'],
+            ['scroll down', 'See more applications']
         ]);
 
         function createConfirmationText(action, itemId) {
