diff --git a/circle/dashboard/static/dashboard/dashboard.js b/circle/dashboard/static/dashboard/dashboard.js
index a1af5fe..eb3d171 100644
--- a/circle/dashboard/static/dashboard/dashboard.js
+++ b/circle/dashboard/static/dashboard/dashboard.js
@@ -215,6 +215,7 @@ $(function () {
   register_search($("#dashboard-node-search-form"), $("#dashboard-node-list"), generateNodeHTML);
   register_search($("#dashboard-group-search-form"), $("#dashboard-group-list"), generateGroupHTML);
   register_search($("#dashboard-user-search-form"), $("#dashboard-user-list"), generateUserHTML);
+  register_search($("#dashboard-template-search-form"), $("#dashboard-template-list"), generateTemplateHTML);
 
   /* notification message toggle */
   $(document).on('click', ".notification-message-subject", function() {
@@ -302,6 +303,16 @@ function generateUserHTML(data, is_last) {
          '</a>';
 }
 
+function generateTemplateHTML(data, is_last) {
+  return '<a href="' + data.url + '" class="list-group-item real-link' + (is_last ? " list-group-item-last" : "") +'">'+
+         '  <span class="index-template-list-name">' +
+         '    <i class="fa fa-' + data.icon + '"></i> '+ safe_tags_replace(data.name) +
+         '  </span>' +
+         '  <small class="text-muted index-template-list-system">' + safe_tags_replace(data.system) + '</small>' +
+         '  <div class="clearfix"></div>' +
+         '</a>';
+}
+
 function generateNodeHTML(data, is_last) {
   return '<a href="' + data.url + '" class="list-group-item real-link' + (is_last ? ' list-group-item-last' : '') + '">' +
          '<span class="index-node-list-name">' +
diff --git a/circle/dashboard/templates/dashboard/index-templates.html b/circle/dashboard/templates/dashboard/index-templates.html
index 76e8304..c1ccc4e 100644
--- a/circle/dashboard/templates/dashboard/index-templates.html
+++ b/circle/dashboard/templates/dashboard/index-templates.html
@@ -33,13 +33,25 @@
       {% endfor %}
     </div>
     <div class="list-group-item list-group-footer">
-      <div class="text-right">
-        <a href="{% url "dashboard.views.template-list" %}" class="btn btn-primary btn-xs">
-          <i class="fa fa-chevron-circle-right"></i> {% trans "show all" %}
-        </a>
-        <a href="{% url "dashboard.views.template-choose" %}" class="btn btn-success btn-xs template-choose">
-          <i class="fa fa-plus-circle"></i> {% trans "new" %}
-        </a>
+      <div class="row">
+        <div class="col-xs-6">
+          <form action="{% url "dashboard.views.template-list" %}" method="GET" id="dashboard-template-search-form">
+            <div class="input-group input-group-sm">
+              <input id="dashboard-group-search-input" name="s" type="text" class="form-control" placeholder="{% trans "Search..." %}" />
+              <div class="input-group-btn">
+                <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button>
+              </div>
+            </div>
+          </form>
+        </div>
+        <div class="col-xs-6 text-right">
+          <a href="{% url "dashboard.views.template-list" %}" class="btn btn-primary btn-xs">
+            <i class="fa fa-chevron-circle-right"></i> {% trans "show all" %}
+          </a>
+          <a href="{% url "dashboard.views.template-choose" %}" class="btn btn-success btn-xs template-choose">
+            <i class="fa fa-plus-circle"></i> {% trans "new" %}
+          </a>
+        </div>
       </div>
     </div>
   </div>
diff --git a/circle/dashboard/views/template.py b/circle/dashboard/views/template.py
index a8255c6..4f3309f 100644
--- a/circle/dashboard/views/template.py
+++ b/circle/dashboard/views/template.py
@@ -207,7 +207,19 @@ class TemplateList(LoginRequiredMixin, FilterMixin, SingleTableView):
     def get(self, *args, **kwargs):
         self.search_form = TemplateListSearchForm(self.request.GET)
         self.search_form.full_clean()
-        return super(TemplateList, self).get(*args, **kwargs)
+        if self.request.is_ajax():
+            templates = [{
+                'icon': i.os_type,
+                'system': i.system,
+                'url': reverse("dashboard.views.template-detail",
+                               kwargs={'pk': i.pk}),
+                'name': i.name} for i in self.get_queryset()]
+            return HttpResponse(
+                json.dumps(templates),
+                content_type="application/json",
+            )
+        else:
+            return super(TemplateList, self).get(*args, **kwargs)
 
     def create_acl_queryset(self, model):
         queryset = super(TemplateList, self).create_acl_queryset(model)