diff --git a/server/djrandom/frontend/views.py b/server/djrandom/frontend/views.py
index 35846ab54915cbcc8a5bd32681c10a2432288997..24e6efd1f3b0d7a5d2b9524ec91e92dbfc73b4f8 100644
--- a/server/djrandom/frontend/views.py
+++ b/server/djrandom/frontend/views.py
@@ -8,7 +8,7 @@ from djrandom.model.mp3 import MP3, PlayLog
 from djrandom.model.playlist import Playlist
 from djrandom.model.user import User
 from djrandom.frontend import app, require_auth, svcs
-from sqlalchemy import distinct, func
+from sqlalchemy import func
 
 log = logging.getLogger(__name__)
 use_xsendfile = 1
@@ -18,18 +18,22 @@ use_xsendfile = 1
 @require_auth
 def autocomplete_search():
     results = []
-    term = request.args.get('term')
+    term = request.args.get('q')
     if not term:
         abort(400)
-    if len(term) < 4:
-        cache_key = 'autocomplete|%s' % term
+    if len(term) > 1:
+        n_results = int(request.args.get('limit', 50))
+        cache_key = 'autocomplete|%s|%d' % (term, n_results)
         results = svcs['cache'].get(cache_key)
         if not results:
-            possible_artists = Session.query(distinct(
-                    MP3.artist)).filter(MP3.artist.like('%s%%' % term))
-            results = [x[0] for x in possible_artists]
+            artists = Session.query(
+                MP3.artist, func.count('*').label('count')).filter(
+                MP3.artist.like('%s%%' % term)).group_by(
+                    MP3.artist).order_by('count desc').limit(n_results)
+
+            results = [x[0] for x in artists]
             svcs['cache'].set(cache_key, results, timeout=86400)
-    return jsonify(results=results)
+    return '\n'.join(results)
 
 
 @app.route('/fragment/songs', methods=['POST'])
diff --git a/server/djrandom/test/test_frontend_views.py b/server/djrandom/test/test_frontend_views.py
index 97ddf16310f3eeaa55160d373076e2158bdbd303..cd670794f7638069a2d709e36ef1253c3f9d49b7 100644
--- a/server/djrandom/test/test_frontend_views.py
+++ b/server/djrandom/test/test_frontend_views.py
@@ -39,15 +39,14 @@ class FrontendViewsTest(WsgiTestCase):
         views.use_xsendfile = 1
 
     def test_autocomplete(self):
-        rv = self.app.get('/autocomplete?term=art')
+        rv = self.app.get('/autocomplete?q=art')
         self.assertEquals(200, rv.status_code)
-        rv = json.loads(rv.data)
-        self.assertTrue('results' in rv)
-        self.assertEquals([u'artist 1', u'artist 2'], rv['results'])
+        rv = rv.data.split('\n')
+        self.assertEquals([u'artist 1', u'artist 2'], rv)
 
         # test twice to hit the cache.
-        rv2 = self.app.get('/autocomplete?term=art')
-        rv2 = json.loads(rv2.data)
+        rv2 = self.app.get('/autocomplete?q=art')
+        rv2 = rv2.data.split('\n')
         self.assertEquals(rv, rv2)
 
     def test_homepage(self):