diff --git a/client/catalog-dev/css/style.css b/client/catalog-dev/css/style.css
index 484ba3e..31c86b8 100644
--- a/client/catalog-dev/css/style.css
+++ b/client/catalog-dev/css/style.css
@@ -143,7 +143,6 @@
 
 .treeExplorer .treeExplorerNode .nodeContent {
   display: inline-block;
-  min-height: 24px;
 }
 
 .treeExplorer .treeExplorerNode > .nodeChildren {
@@ -154,32 +153,24 @@
   display: block;
 }
 
-.treeExplorer .treeExplorerNode::before {
+.treeExplorer .treeExplorerExpander::before {
   font-family: "Glyphicons Halflings";
   content: "\e080";
   color: gray;
 }
 
-.treeExplorer .treeExplorerNode.open::before {
+.treeExplorer .open > .nodeContent > .treeExplorerExpander::before {
   content: "\e114";
 }
 
-.treeExplorer .treeExplorerNode.file {
+.treeExplorer .file > .nodeContent > .treeExplorerExpander {
   cursor: default;
 }
 
-.treeExplorer .treeExplorerNode.file::before {
+.treeExplorer .file > .nodeContent > .treeExplorerExpander::before {
   content: "\e022"
 }
 
-.treeExplorer .treeSearch{
-  display: none;
-}
-
-.treeExplorer .nodeContent:hover > .treeSearch {
-  display: inline-block;
-}
-
 #popup {
   top: 0;
   left: 0;
diff --git a/client/catalog-dev/index.html b/client/catalog-dev/index.html
index b618e07..52e7c6e 100644
--- a/client/catalog-dev/index.html
+++ b/client/catalog-dev/index.html
@@ -103,9 +103,10 @@
           <div class="panel-body">
             <nav class="navbar navbar-inverse col-md-12 resultMenu">
               <ul class="nav navbar-nav navbar-left">
-                <li class="previous disabled">
-                  <a href="#">&larr; Previous</a>
-                </li>
+                <li><a href="#" class="requestSelectedButton">Request Selected</a></li>
+                <li><a href="#" class="clearResults">Clear</a></li>
+              </ul>
+              <ul class="nav navbar-nav navbar-right">
                 <li class="dropdown">
                   <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Results Per Page <span class="caret"></span></a>
                   <ul class="dropdown-menu">
@@ -115,15 +116,14 @@
                     <li><a href="#" class="resultsPerPageSelector">200</a></li>
                   </ul>
                 </li>
-                <li><a href="#" class="requestSelectedButton">Request Selected</a></li>
-                <li><a href="#" class="clearResults">Clear</a></li>
-              </ul>
-              <div class="navbar-text">(Page <span class="pageNumber">0</span>) <span class="pageLength">0</span>/<span class="totalResults">0</span> Results</div>
-              <ul class="nav navbar-nav navbar-right">
+                <li class="previous disabled">
+                  <a href="#">&larr; Previous</a>
+                </li>
                 <li class="next disabled">
                   <a href="#">Next &rarr;</a>
                 </li>
               </ul>
+              <div class="navbar-text navbar-right">(Page <span class="pageNumber">0</span>) <span class="pageLength">0</span>/<span class="totalResults">0</span> Results</div>
             </nav>
             <table id="resultTable" class="table"></table>
             <div class="sk-cube-grid">
@@ -139,10 +139,11 @@
             </div>
             <nav class="navbar navbar-inverse col-md-12 resultMenu">
               <ul class="nav navbar-nav navbar-left">
-                <li class="previous disabled">
-                  <a href="#">&larr; Previous</a>
-                </li>
-                <li class="dropup">
+                <li><a href="#" class="requestSelectedButton">Request Selected</a></li>
+                <li><a href="#" class="clearResults">Clear</a></li>
+              </ul>
+              <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown">
                   <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Results Per Page <span class="caret"></span></a>
                   <ul class="dropdown-menu">
                     <li class="active"><a href="#" class="resultsPerPageSelector">25</a></li>
@@ -151,15 +152,14 @@
                     <li><a href="#" class="resultsPerPageSelector">200</a></li>
                   </ul>
                 </li>
-                <li><a href="#" class="requestSelectedButton">Request Selected</a></li>
-                <li><a href="#" class="clearResults">Clear</a></li>
-              </ul>
-              <div class="navbar-text">(Page <span class="pageNumber">0</span>) <span class="pageLength">0</span>/<span class="totalResults">0</span> Results</div>
-              <ul class="nav navbar-nav navbar-right">
+                <li class="previous disabled">
+                  <a href="#">&larr; Previous</a>
+                </li>
                 <li class="next disabled">
                   <a href="#">Next &rarr;</a>
                 </li>
               </ul>
+              <div class="navbar-text navbar-right">(Page <span class="pageNumber">0</span>) <span class="pageLength">0</span>/<span class="totalResults">0</span> Results</div>
             </nav>
           </div>
         </div>
diff --git a/client/catalog-dev/js/catalog.js b/client/catalog-dev/js/catalog.js
index 5b953d8..1e4866c 100644
--- a/client/catalog-dev/js/catalog.js
+++ b/client/catalog-dev/js/catalog.js
@@ -170,9 +170,25 @@
       scope.autoComplete(path, function(data){
         var list = data.next;
         var last = (data.lastComponent === true);
+
+        if (last) {
+          console.log("Redirecting last element request to a search.");
+          scope.clearResults();
+          scope.query(scope.catalog, {'??': path},
+          function(interest, data){
+            console.log("Search response", interest, data);
+            scope.name = data.getContent().toString().replace(/[\n\0]+/g, '');
+            scope.getResults(0);
+          }, function(interest){
+            console.warn("Failed to retrieve final component.", interest, path);
+            scope.createAlert("Failed to request final component. " + path + " See console for details.");
+          });
+          return; //Don't call the callback
+        }
+
         console.log("Autocomplete response", list);
         callback(list.map(function(element){
-          return (path == "/"?"/":"") + element + (!last?"/":"");
+          return (path == "/"?"/":"") + element + "/";
         }));
       })
     });
@@ -184,7 +200,7 @@
 
       var path = t.parent().parent().attr('id');
 
-      console.log("Stringing tree search:", path);
+      console.log("Tree search:", path);
 
       scope.query(scope.catalog, {'??': path},
       function(interest, data){ //Success
diff --git a/client/catalog-dev/js/treeExplorer.js b/client/catalog-dev/js/treeExplorer.js
index c4bee42..58a6a69 100644
--- a/client/catalog-dev/js/treeExplorer.js
+++ b/client/catalog-dev/js/treeExplorer.js
@@ -38,8 +38,8 @@
           var el = $('<div class="treeExplorerNode"></div>');
           if (current.match(/\/$/)){
             el.attr('id', path + current);
-            el.append(['<div class="nodeContent"><a href="#', path, current, '">', current,
-              '</a>&nbsp;<button class="treeSearch btn btn-success btn-xs">Search from here</button></div>'].join(""));
+            el.append(['<div class="nodeContent"><a class="treeExplorerExpander"></a><a class="treeSearch" href="#', path, current, '">', current,
+              '</a></div>'].join(""));
           } else {
             el.addClass('file');
             el.text(current);
@@ -50,7 +50,7 @@
 
       var scope = this;
 
-      tree.on('click', '.treeExplorerNode > .nodeContent > a', function(e){
+      tree.on('click', '.treeExplorerExpander', function(e){
         if (!scope.settings.autoScroll){
           e.preventDefault();
         }
