diff --git a/web/gui/src/main/webapp/app/view/topo/topo.css b/web/gui/src/main/webapp/app/view/topo/topo.css
index 540b480..74fe0c6 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.css
+++ b/web/gui/src/main/webapp/app/view/topo/topo.css
@@ -124,8 +124,8 @@
     padding: 0;
 }
 
-#topo-p-summary  td.label {
-    width: 50%;
+#topo-p-summary td.label {
+    width: 65%;
 }
 
 #topo-p-detail  div.actionBtns {
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js
index 3e9a0cc..ba0bc7d 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -728,6 +728,7 @@
                     tfs.setLionBundle(topoLion);
                     tis.setLionBundle(topoLion);
                     tms.setLionBundle(topoLion);
+                    tps.setLionBundle(topoLion);
 
                     // now we have the map projection, we are ready for
                     //  the server to send us device/host data...
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 4e89822..63d49fa 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoInst.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoInst.js
@@ -47,7 +47,7 @@
 
     // function to be replaced by the localization bundle function
     var topoLion = function (x) {
-        return '#tinst#' + x + '#';
+        return '#tis#' + x + '#';
     };
 
 
@@ -317,11 +317,6 @@
         return on;
     }
 
-    // invoked after the localization bundle has been received from the server
-    function setLionBundle(bundle) {
-        topoLion = bundle;
-    }
-
     // ==========================
 
     angular.module('ovTopo')
@@ -353,7 +348,7 @@
                 hide: hideInsts,
                 toggle: toggleInsts,
                 showMaster: function () { return oiShowMaster; },
-                setLionBundle: setLionBundle,
+                setLionBundle: function (bundle) { topoLion = bundle; },
             };
         }]);
 }());
diff --git a/web/gui/src/main/webapp/app/view/topo/topoPanel.js b/web/gui/src/main/webapp/app/view/topo/topoPanel.js
index b25f02e..eac6a89 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoPanel.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoPanel.js
@@ -25,6 +25,11 @@
     // injected refs
     var $log, $window, $rootScope, fs, ps, gs, flash, wss, bns, mast, ns;
 
+    // function to be replaced by the localization bundle function
+    var topoLion = function (x) {
+        return '#tps#' + x + '#';
+    };
+
     // constants
     var pCls = 'topo-p',
         idSum = 'topo-p-summary',
@@ -175,17 +180,26 @@
     function listProps(tbody, data) {
 
         // Suppress Lat Long in details panel if null
-        if (data.props.Latitude === null ||
-            data.props.Longitude === null) {
-            var idx = data.propOrder.indexOf('Latitude');
+        if (data.propLabels.latitude === null ||
+            data.propLabels.longitude === null) {
+            var idx = data.propOrder.indexOf('latitude');
             data.propOrder.splice(idx, 3);
         }
 
         data.propOrder.forEach(function (p) {
+            // TODO: remove after topo view fully i18n'd
+            var foo = data.props && data.props[p];
+
             if (p === '-') {
                 addSep(tbody);
+
             } else {
-                addProp(tbody, p, data.props[p]);
+                // TODO: remove this if/else once DETAILS panel fixed for i18n
+                if (foo !== undefined) {
+                    addProp(tbody, p, foo);
+                } else {
+                    addProp(tbody, data.propLabels[p], data.propValues[p]);
+                }
             }
         });
     }
@@ -392,7 +406,8 @@
     function toggleSummary(x) {
         var kev = (x === 'keyev'),
             on = kev ? !summary.panel().isVisible() : !!x,
-            verb = on ? 'Show' : 'Hide';
+            verb = on ? topoLion('show') : topoLion('hide'),
+            sumpan = topoLion('fl_panel_summary');
 
         if (on) {
             // ask server to start sending summary data.
@@ -401,7 +416,7 @@
         } else {
             hideSummaryPanel();
         }
-        flash.flash(verb + ' summary panel');
+        flash.flash(verb + ' ' + sumpan);
         return on;
     }
 
@@ -553,6 +568,8 @@
 
                 detailVisible: function () { return detail.panel().isVisible(); },
                 summaryVisible: function () { return summary.panel().isVisible(); },
+
+                setLionBundle: function (bundle) { topoLion = bundle; },
             };
         }]);
 }());
diff --git a/web/gui/src/main/webapp/app/view/topo/topoSelect.js b/web/gui/src/main/webapp/app/view/topo/topoSelect.js
index 1309a66..5d23f1e 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoSelect.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoSelect.js
@@ -256,7 +256,7 @@
     function showDetails(data) {
         var buttons = fs.isA(data.buttons) || [];
         tps.displaySingle(data);
-        tov.installButtons(buttons, data, data.props['URI']);
+        tov.installButtons(buttons, data, data.propValues['uri']);
         tov.hooks.singleSelect(data);
         tps.displaySomething();
     }
