Index: src/django_gheat/gheat/management/commands/import_droidstumbler.py
===================================================================
--- src/django_gheat/gheat/management/commands/import_droidstumbler.py	(revision 9164)
+++ src/django_gheat/gheat/management/commands/import_droidstumbler.py	(revision 9165)
@@ -41,12 +41,29 @@
 
   csvfile = csv.reader(open(location, 'rb'), delimiter=',')
+  count = 0
+  ap_cache = {}
+  print "#INFO: Importing points"
   for row in csvfile:
-    epoch, msg_type, lat, lon, accuracy, ssid, bssid, level, frequency, capabilities, empty = row
+    try:
+      epoch, msg_type, lat, lon, accuracy, ssid, bssid, level, frequency, capabilities = row
+    except ValueError:
+      print "# WARNING: Unable to parse line:%i '%s'" % (csvfile.line_num, row)
+      continue
     if msg_type == "data" and lat and lon:
-      ap, created = Accespoint.objects.get_or_create(mac=bssid, ssid=ssid, encryptie=capabilities)
-      if created:
-        print "# INFO: New AccessPoint %s (%s)" % (ap.ssid, ap.mac)
-      m = Meting.objects.create(meetrondje=mr, accespoint=ap, latitude=lat, longitude=lon, signaal=(100 + int(level)))
-      print "# INFO: New Meeting: %s" % m
+      if not ap_cache.has_key(bssid):
+        ap_cache[bssid], created = Accespoint.objects.get_or_create(mac=bssid, ssid=ssid, encryptie=capabilities)
+
+      m = Meting.objects.create(meetrondje=mr, accespoint=ap_cache[bssid], latitude=lat, longitude=lon, signaal=(100 + int(level)))
+      # Give some feedback to the user
+      count += 1
+      if (count % 1000) == 0:
+        sys.stdout.write(str(count))
+      elif (count % 100) == 0:
+        sys.stdout.write(".")
+      sys.stdout.flush()
+
+  sys.stdout.write("%s\n" % count)
+  print "#INFO: All done, goodbye"
+
 
 class Command(BaseCommand):
