diff --git a/client/catalog-dev/css/style.css b/client/catalog-dev/css/style.css
index d30dfc9..f66938b 100644
--- a/client/catalog-dev/css/style.css
+++ b/client/catalog-dev/css/style.css
@@ -155,12 +155,12 @@
 
 .treeExplorer .treeExplorerExpander::before {
   font-family: "Glyphicons Halflings";
-  content: "\e080";
+  content: "+";
   color: gray;
 }
 
 .treeExplorer .open > .nodeContent > .treeExplorerExpander::before {
-  content: "\e114";
+  content: "\2212";
 }
 
 .treeExplorer .file > .nodeContent > .treeExplorerExpander {
diff --git a/client/catalog-dev/index.html b/client/catalog-dev/index.html
index d168723..085ba75 100644
--- a/client/catalog-dev/index.html
+++ b/client/catalog-dev/index.html
@@ -5,14 +5,23 @@
 <title>NDN Query and Retrieval Tool</title>
 
 <script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
 
-  ga('create', 'UA-64984905-1', 'auto');
-  ga('send', 'pageview');
+(function(i, s, o, g, r, a, m) {
+	i['GoogleAnalyticsObject'] = r;
+	i[r] = i[r] || function() {
+		(i[r].q = i[r].q || []).push(arguments)
+	}
+	,
+	i[r].l = 1 * new Date();
+	a = s.createElement(o),
+	m = s.getElementsByTagName(o)[0];
+	a.async = 1;
+	a.src = g;
+	m.parentNode.insertBefore(a, m)
+})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
 
+ga('create', 'UA-64984905-1', 'auto');
+ga('send', 'pageview');
 </script>
 
 <!-- Styles -->
@@ -21,6 +30,7 @@
 <link rel="stylesheet" href="css/theme.min.css">
 <link rel="stylesheet" href="css/style.css">
 
+<!-- Scripts -->
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js">
 </script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-scrollTo/2.1.2/jquery.scrollTo.min.js">
@@ -91,12 +101,11 @@
   <header>
     <div class="navbar navbar-inverse navbar-static-top container-fluid">
       <div class="navbar-header">
-        <div class="navbar-brand">NDN Query and Retrieval Tool</div>
+        <a class="navbar-brand" data-toggle="tab" href="#filterSearch" id="brand-title">NDN Query and Retrieval Tool</a>
       </div>
       <ul class="navbar-nav nav">
-        <li class="active"><a data-toggle="tab" href="#filterSearch">Filter Search</a></li>
-        <li><a data-toggle="tab" href="#pathSearch">Path Search</a></li>
-        <li><a data-toggle="tab" href="#treeSearchPane">Tree Search</a></li>
+        <li class="active" id="search-tab"><a data-toggle="tab" href="#filterSearch">Search</a></li>
+        <li id="explore-tab"><a data-toggle="tab" href="#explore">Explore</a></li>
       </ul>
     </div>
   </header>
@@ -110,7 +119,7 @@
         <div id="alerts"></div>
 
         <div class="panel panel-info tab-pane fade in active" id="filterSearch">
-          <div class="panel-heading">Filter Based Search</div>
+          <div class="panel-heading">Filter Search</div>
           <div class="panel-body">
             <div>
               <div id="filters"></div>
@@ -129,26 +138,27 @@
           </div>
         </div>
 
-        <div class="panel panel-info tab-pane fade" id="pathSearch">
-          <div class="panel-heading">Path Based Search</div>
-          <div class="panel-body">
-            <form class="form-inline" id="searchBar">
-              <div class="form-group">
-                <div class="input-group">
-                  <input id="search" placeholder="Enter a path (Ex: /CMIP5)" type="text" class="form-control">
-                  <div class="input-group-btn">
-                    <button id="autoCompleteSearch" type="submit" class="btn btn-primary">Search</button>
+        <div class="tab-pane fade" id="explore">
+          <div class="panel panel-info" id="pathSearch">
+            <div class="panel-heading">Path Search</div>
+            <div class="panel-body">
+              <form class="form-inline" id="searchBar">
+                <div class="form-group">
+                  <div class="input-group">
+                    <input id="search" placeholder="Enter a path (Ex: /CMIP5)" type="text" class="form-control">
+                    <div class="input-group-btn">
+                      <button id="autoCompleteSearch" type="submit" class="btn btn-primary">Search</button>
+                    </div>
                   </div>
                 </div>
-              </div>
-            </form>
+              </form>
+            </div>
           </div>
-        </div>
-
-        <div class="panel panel-info tab-pane fade" id="treeSearchPane">
-          <div class="panel-heading">Tree Based Search</div>
-          <div class="panel-body" id="treeSearch">
-            <div></div>
+          <div class="panel panel-info" id="treeSearchPane">
+            <div class="panel-heading">Tree Search</div>
+            <div class="panel-body" id="treeSearch">
+              <div></div>
+            </div>
           </div>
         </div>
 
diff --git a/client/catalog-dev/js/catalog.js b/client/catalog-dev/js/catalog.js
index 447afa2..c3c49cf 100644
--- a/client/catalog-dev/js/catalog.js
+++ b/client/catalog-dev/js/catalog.js
@@ -264,6 +264,7 @@
     this.resultTable.popover({
       selector: ".metaDataLink",
       content: function() {
+        $('.metaDataLink').not(this).popover('destroy');
         return scope.getMetaData(this);
       },
       title: "Metadata",
@@ -285,6 +286,13 @@
       scope.request(null , filename);
     });
 
+    //Allow the title to change the tab
+    $('#brand-title').click(function(){
+      //Correct active class on tabs.
+      $('#explore-tab').removeClass('active');
+      $('#search-tab').addClass('active');
+    });
+
   }
 
   Atmos.prototype.clearResults = function() {
@@ -846,7 +854,7 @@
       var n2 = new Name(name);
       n2.appendSegment(segment);
 
-      scope.expressInterest(n2, handleData, function() {});
+      scope.expressInterest(n2, handleData, function(err, interest){failure(interest)});
       //Forward to handleData and ignore error
     }
 
