diff --git a/ckanext/odsh/controller.py b/ckanext/odsh/controller.py
index d2ee99136c289b829a3653b545568287d261cc7f..fdc28c373519ae9347c93fb0f53b0920b14869ea 100644
--- a/ckanext/odsh/controller.py
+++ b/ckanext/odsh/controller.py
@@ -15,10 +15,7 @@ from ckan.common import c, request, config
 import hashlib
 import ckan.plugins.toolkit as toolkit
 from ckanext.dcat.controllers import DCATController
-from ckan.lib.search.common import (
-    make_connection, SearchError, SearchQueryError
-)
-import pysolr
+
 
 abort = base.abort
 log = logging.getLogger(__name__)
@@ -163,21 +160,3 @@ class OdshFeedController(FeedController):
                                 feed_guid=_create_atom_id(atom_url),
                                 feed_url=feed_url,
                                 navigation_urls=navigation_urls)
-
-
-class OdshAutocompleteController(ApiController):
-    def autocomplete(self, q):
-        query = {
-            'spellcheck.q': q,
-            'wt': 'json'}
-
-        conn = make_connection(decode_dates=False)
-        log.debug('Suggest query: %r' % query)
-        try:
-            solr_response = conn.search('', search_handler='suggest', **query)
-        except pysolr.SolrError as e:
-            raise SearchError('SOLR returned an error running query: %r Error: %r' %
-                              (query, e))
-
-        suggest = solr_response.raw_response.get('spellcheck')
-        return base.response.body_file.write(str(suggest))
diff --git a/ckanext/odsh/fanstatic/autocomplete.js b/ckanext/odsh/fanstatic/autocomplete.js
index 282b4844d0f3fe49af34f197abfcafdab8965049..497f0ec3b687096c5e3c909f98a764248935bd26 100644
--- a/ckanext/odsh/fanstatic/autocomplete.js
+++ b/ckanext/odsh/fanstatic/autocomplete.js
@@ -9,11 +9,11 @@ $(function () {
     html: true,
     minLength: 2,
     source: function (request, response) {
-      var url = ckan.SITE_ROOT + '/autocomplete/' + request.term;
-      $.getJSON(url)
+      var url = ckan.SITE_ROOT + '/api/action/autocomplete';
+      $.getJSON(url, {q: request.term})
         .done(function (data) {
           console.log(data);
-          response(data['result']);
+          response(data);
         });
       }
   });
diff --git a/ckanext/odsh/logic/action.py b/ckanext/odsh/logic/action.py
index df14f06c47476b3956e6ed0f0c00fd0ae30eec89..72994f266b8f891986a43131b0bb2b77dac2e917 100644
--- a/ckanext/odsh/logic/action.py
+++ b/ckanext/odsh/logic/action.py
@@ -3,6 +3,10 @@ from ckan.logic.action.create import package_create, user_create, group_member_c
 import ckan.model as model
 import ckan.lib.dictization.model_dictize as model_dictize
 import ckan.plugins.toolkit as toolkit
+from ckan.lib.search.common import (
+    make_connection, SearchError, SearchQueryError
+)
+import pysolr
 
 log = logging.getLogger(__name__)
 
@@ -33,3 +37,20 @@ def odsh_user_create(context, data_dict):
     for group in groups:
         group_member_create(context, {'id': group, 'username': user.get('name'), 'role': 'member'})
     return model_dictize.user_dictize(model.User.get(user.get('name')), context)
+
+
+def autocomplete(self, q):
+    query = {
+        'spellcheck.q': q,
+        'wt': 'json'}
+
+    conn = make_connection(decode_dates=False)
+    log.debug('Suggest query: %r' % query)
+    try:
+        solr_response = conn.search('', search_handler='suggest', **query)
+    except pysolr.SolrError as e:
+        raise SearchError('SOLR returned an error running query: %r Error: %r' %
+                          (query, e))
+
+    suggest = solr_response.raw_response.get('spellcheck')
+    return suggest
diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index 4aa8b21048e5b87f83d0e5a21bb44f2731d1decd..86984e2e30ad3478ec81bf1e7f9a8a42715a59bc 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -87,10 +87,8 @@ class OdshIcapPlugin(plugins.SingletonPlugin):
 class OdshAutocompletePlugin(plugins.SingletonPlugin):
     plugins.implements(plugins.IRoutes, inherit=True)
 
-    def before_map(self, map):
-        controller = 'ckanext.odsh.controller:OdshAutocompleteController'
-        map.connect('/autocomplete/{q}', controller=controller, action='autocomplete')
-        return map
+    def get_actions(self):
+        return {'autocomplete': action.autocomplete}
 
 
 class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm):