diff --git a/server/djrandom/metadata_fixer/metadata_fixer.py b/server/djrandom/metadata_fixer/metadata_fixer.py
index bd04913703542232d612a4173b8cae9601db0722..9fc62b99cdde7876871f8a7ccef90b5257d09b6c 100644
--- a/server/djrandom/metadata_fixer/metadata_fixer.py
+++ b/server/djrandom/metadata_fixer/metadata_fixer.py
@@ -11,6 +11,7 @@ from djrandom import utils
 from djrandom.model.mp3 import MP3
 from djrandom.database import Session, init_db
 from djrandom.scanner import metadata
+from djrandom.scanner import indexer
 
 log = logging.getLogger(__name__)
 
@@ -23,8 +24,9 @@ class MetadataFixer(object):
 
     ECHONEST_API_URL = 'http://developer.echonest.com/api/v4/song/identify'
 
-    def __init__(self, echonest_api_key):
+    def __init__(self, solr_url, echonest_api_key):
         self.api_key = echonest_api_key
+        self.idx = indexer.Indexer(solr_url)
 
     def identify_song(self, mp3):
         json_fp = mp3.get_fingerprint()
@@ -38,6 +40,7 @@ class MetadataFixer(object):
             try:
                 result = json.loads(urllib2.urlopen(req).read())
                 response = result['response']
+                logging.debug('response:\n%s' % str(response))
                 if response['status']['code'] != 0:
                     log.error('EchoNest API replied with code %d: %s' % (
                             response['status']['code'],
@@ -58,39 +61,50 @@ class MetadataFixer(object):
         mp3.title = metadata.normalize_string(info['title'])
         mp3.artist = metadata.normalize_string(info['artist_name'])
 
-    def scan(self, run_once):
+    def scan(self):
         """Scan the database for new files."""
-        while True:
-            mp3 = MP3.get_with_bad_metadata().limit(1).first()
-            if not mp3:
-                if run_once:
-                    break
-                Session.remove()
-                time.sleep(600)
-                continue
+        n_bad = n_ok = n_err = 0
+        for mp3 in MP3.get_with_bad_metadata():
+            n_bad += 1
             log.info('searching metadata for %s' % mp3.sha1)
             try:
                 self.process(mp3)
-                #mp3.state = MP3.READY
+                mp3.state = MP3.READY
+                self.idx.add_mp3(mp3)
+                log.info('found: %s / %s' % (mp3.artist, mp3.title))
+                n_ok += 1
+            except NoMetadataError:
+                n_err += 1
             except Exception, e:
                 log.error(traceback.format_exc())
+                n_err += 1
                 #mp3.state = MP3.ERROR
-            #Session.add(mp3)
-            Session.commit()
+            Session.add(mp3)
+        Session.commit()
+        self.idx.commit()
+        log.debug('total: %d songs, found: %d' % (n_bad, n_ok))
 
+    def run(self, run_once):
+        while True:
+            self.scan()
+            if run_once:
+                break
+            Session.remove()
+            time.sleep(600)
 
 
-def run_fixer(echonest_api_key, db_url, run_once):
+def run_fixer(solr_url, echonest_api_key, db_url, run_once):
     socket.setdefaulttimeout(300)
 
     init_db(db_url)
-    fixer = MetadataFixer(echonest_api_key)
-    fixer.scan(run_once)
+    fixer = MetadataFixer(solr_url, echonest_api_key)
+    fixer.run(run_once)
 
 
 def main():
     parser = optparse.OptionParser()
     parser.add_option('--once', action='store_true')
+    parser.add_option('--solr_url', default='http://localhost:8080/solr')
     parser.add_option('--echonest_api_key')
     parser.add_option('--db_url')
     daemonize.add_standard_options(parser)
@@ -108,7 +122,8 @@ def main():
         opts.foreground = True
 
     daemonize.daemonize(opts, run_fixer,
-                        (opts.echonest_api_key, opts.db_url, opts.once))
+                        (opts.solr_url, opts.echonest_api_key,
+                         opts.db_url, opts.once))
 
 
 if __name__ == '__main__':