diff --git a/htrace-core/src/web/app/setup.js b/htrace-core/src/web/app/setup.js
index adb100c..beb06db 100644
--- a/htrace-core/src/web/app/setup.js
+++ b/htrace-core/src/web/app/setup.js
@@ -28,7 +28,7 @@
 var Router = Backbone.Marionette.AppRouter.extend({
   "routes": {
     "": "init",
-    "!/search(/:query)": "search",
+    "!/search(?:query)": "search",
     "!/spans/:id": "span",
     "!/swimlane/:id": "swimlane",
     "!/swimlane/:id:?:lim": "swimlane"
@@ -37,7 +37,6 @@
   "initialize": function() {
     // Collection
     this.spansCollection = new app.Spans();
-    this.spansCollection.fetch();
   },
 
   "init": function() {
@@ -46,9 +45,37 @@
 
   "search": function(query) {
     app.root.app.show(new app.SearchView());
+
+    var predicates;
+
+    this.spansCollection.switchMode("infinite", {
+      fetch: false,
+      resetState: true
+    });
+
+    if (query) {
+      predicates = _(query.split(";"))
+      .map(function(predicate) {
+        return _(predicate.split('&'))
+          .reduce(function(mem, op) {
+            var op = op.split('=');
+            mem[op[0]] = op[1];
+            return mem;
+          }, {});
+      });
+      this.spansCollection.fullCollection.reset();
+      this.spansCollection.setPredicates(predicates);
+    }
+    else {
+      this.spansCollection.fullCollection.reset();
+      this.spansCollection.setPredicates([{"op":"cn","field":"description","val":""}]);
+    }
+    this.spansCollection.fetch();
+
     app.root.app.currentView.controls.show(
       new app.SearchControlsView({
-        "collection": this.spansCollection
+        "collection": this.spansCollection,
+        "predicates": predicates
       }));
     app.root.app.currentView.main.show(
       new Backgrid.Grid({
diff --git a/htrace-core/src/web/app/views/search/field.js b/htrace-core/src/web/app/views/search/field.js
index 34b0110..c9f048a 100644
--- a/htrace-core/src/web/app/views/search/field.js
+++ b/htrace-core/src/web/app/views/search/field.js
@@ -35,6 +35,7 @@
   'render': function() {
     this.$el.html(this.template({ field: this.field }));
     this.showSearchField();
+    if (this.options.value) this.setValue();
     return this;
   },
 
@@ -106,5 +107,18 @@
       default:
         return '';
     }
+  },
+
+  'setValue': function() {
+    switch (this.field) {
+      case 'begin':
+      case 'end':
+        this.$('select.op').val(this.options.op);
+        this.$('input.start-end-date-time').val(moment.unix(this.options.value).format('YYYY-MM-DD HH:mm'));
+      case 'duration':
+        this.$("input.duration").val(this.options.value);
+      case 'description':
+        this.$('input.description').val(this.options.value);
+    }
   }
 });
diff --git a/htrace-core/src/web/app/views/search/search.js b/htrace-core/src/web/app/views/search/search.js
index 3b74b01..b9acee5 100644
--- a/htrace-core/src/web/app/views/search/search.js
+++ b/htrace-core/src/web/app/views/search/search.js
@@ -33,7 +33,8 @@
     "click button.search": "search",
   },
 
-  "initialize": function() {
+  "initialize": function(options) {
+    this.options = options;
     this.predicates = [];
     this.searchFields = [];
     this.searchFields.push(new app.SearchFieldView({
@@ -47,17 +48,29 @@
   "render": function() {
     this.$el.html(this.template());
     this.$el.find('.search-fields').append(this.searchFields[0].render().$el);
+
+    _(this.options.predicates).each(function(pred) {
+      if (pred.field === 'description') {
+        this.$el.find('input.description').val(pred.val);
+      } else {
+        this.addSearchField(pred);
+      }
+    }.bind(this));
+
     return this;
   },
 
   "addSearchField": function(e) {
-    var target = $(e.target);
-    $('button.field').text(target.text());
-    var newSearchField = new app.SearchFieldView({
+    var target = e.target ? $(e.target) : e;
+    if (e.target) $('button.field').text(target.text());
+    var searchOptions = {
       predicates: this.predicates,
       manager: this,
-      field: target.data('field')
-    });
+      field: target.data ? target.data('field') : target.field,
+    };
+    if (!e.target) _.extend(searchOptions, { value: target.val, op: target.op})
+
+    var newSearchField = new app.SearchFieldView(searchOptions);
     this.$el.find('.search-fields').append(newSearchField.render().$el);
     this.searchFields.push(newSearchField);
   },
@@ -74,6 +87,11 @@
       return predicate.val;
     });
 
+    this.searchParams = _(this.predicates).map(function(predicate) {
+      return $.param(predicate);
+    }).join(';');
+    Backbone.history.navigate('!/search?' + this.searchParams, { trigger: false });
+
     this.collection.switchMode("infinite", {
       fetch: false,
       resetState: true
