diff --git a/server/djrandom/database.py b/server/djrandom/database.py
index 14d09e2c2d2440b3e04057038a75fbddc849c036..dc5f4cb6c441af2a9b290a716221a1e150b28442 100644
--- a/server/djrandom/database.py
+++ b/server/djrandom/database.py
@@ -18,6 +18,7 @@ class SetTextFactory(PoolListener):
 
 
 def init_db(uri):
+    # Import all ORM modules here, so that 'create_all' can find them.
     from djrandom.model import mp3, playlist
     engine = create_engine(uri, listeners=[SetTextFactory()],
                            pool_recycle=1800)
diff --git a/server/djrandom/frontend/api_views.py b/server/djrandom/frontend/api_views.py
index 05d9ba2651526f022e25929dc48cee6ad392a4e4..461724be4c9abb7ff8796c1bfcf1df69cf84510e 100644
--- a/server/djrandom/frontend/api_views.py
+++ b/server/djrandom/frontend/api_views.py
@@ -4,7 +4,7 @@ from flask import Flask, request, Response, abort, jsonify, render_template, g
 from flask.helpers import send_file
 from djrandom import utils
 from djrandom.database import Session
-from djrandom.model.mp3 import MP3, PlayLog
+from djrandom.model.mp3 import MP3, PlayLog, SearchLog
 from djrandom.model.playlist import Playlist
 from djrandom.frontend import app, svcs, require_auth
 from sqlalchemy import distinct
@@ -131,6 +131,10 @@ def search_json():
         resultiter = svcs['searcher'].search(query, n=num_results)
         results = [{'score': score, 'sha1': sha1}
                    for (score, sha1) in resultiter]
+        if results:
+            # Save this query in the search log.
+            Session.add(SearchLog.add(query, g.userid))
+            Session.commit()
     return jsonify(results=results)
 
 
diff --git a/server/djrandom/model/mp3.py b/server/djrandom/model/mp3.py
index 0e570ab3bbe4369a7ca649c5192de94f6962c738..783288687a90dd56e6a4a6a01405157c8fbe4a44 100644
--- a/server/djrandom/model/mp3.py
+++ b/server/djrandom/model/mp3.py
@@ -1,4 +1,5 @@
 from sqlalchemy import *
+from datetime import datetime
 from djrandom.database import Base
 
 
@@ -63,3 +64,16 @@ class PlayLog(Base):
                 hashes = [None] * n
             yield (plog.sha1, hashes)
 
+
+class SearchLog(Base):
+
+    __tablename__ = 'searchlog'
+
+    userid = Column(String(40), index=True)
+    query = Column(String(256))
+    stamp = Column(DateTime())
+
+    @classmethod
+    def add(cls, query_str, userid):
+        return cls(query=query_str, userid=userid, stamp=datetime.now())
+