Index: src/django_gheat/gheat/admin.py
===================================================================
--- src/django_gheat/gheat/admin.py	(revision 9590)
+++ src/django_gheat/gheat/admin.py	(revision 9592)
@@ -5,4 +5,5 @@
   list_display = ['ssid','mac', 'organization']
   search_fields = ['ssid', 'mac', 'organization']
+  ordering = ['ssid']
 admin.site.register(Accespoint, AccespointAdmin)
 
@@ -18,4 +19,9 @@
 admin.site.register(Node, NodeAdmin)
 
+class OrganizationAdmin(admin.ModelAdmin):
+  list_display = ['name']
+  ordering = ['name']
+admin.site.register(Organization, OrganizationAdmin)
+
 admin.site.register(Apparatuur)
 admin.site.register(Gebruiker)
Index: src/django_gheat/gheat/management/commands/import_droidstumbler.py
===================================================================
--- src/django_gheat/gheat/management/commands/import_droidstumbler.py	(revision 9590)
+++ src/django_gheat/gheat/management/commands/import_droidstumbler.py	(revision 9592)
@@ -43,4 +43,11 @@
   return count
 
+organizations = dict(Organization.objects.all().values_list('name','id'))
+def get_organization_id_by_ssid(ssid):
+  name = Organization.get_name_by_ssid(ssid)
+  if not name:
+    return 'NULL'
+  else:
+    return int(organizations[name])
 
 def import_droidstumbler(filename, meetrondje):
@@ -96,7 +103,7 @@
       ssid, encryption = ap_pool[bssid]
       # Special trick in SSID ts avoid escaping in later stage
-      item = str((bssid.upper(),ssid.replace('%','%%'),encryption,Accespoint.get_organization(ssid)))
+      item = str((bssid.upper(),ssid.replace('%','%%'),encryption,get_organization_id_by_ssid(ssid)))
       sql_values.append(item)
-    counters['ap_added'] = bulk_sql('gheat_accespoint (`mac`, `ssid`, `encryptie`, `organization`)',sql_values)
+    counters['ap_added'] = bulk_sql('gheat_accespoint (`mac`, `ssid`, `encryptie`, `organization_id`)',sql_values)
 
   # Build mapping for meting import
Index: src/django_gheat/gheat/management/commands/import_kismet.py
===================================================================
--- src/django_gheat/gheat/management/commands/import_kismet.py	(revision 9590)
+++ src/django_gheat/gheat/management/commands/import_kismet.py	(revision 9592)
@@ -19,5 +19,5 @@
 from collections import defaultdict
 
-from import_droidstumbler import bulk_sql
+from import_droidstumbler import bulk_sql,get_organization_id_by_ssid
 
 logger = logging.getLogger(__name__)
@@ -76,7 +76,7 @@
       ssid, encryption = ap_pool[bssid]
       # Special trick in SSID ts avoid escaping in later stage
-      item = str((bssid.upper(),ssid.replace('%','%%'),encryption,Accespoint.get_organization(ssid)))
+      item = str((bssid.upper(),ssid.replace('%','%%'),encryption,get_organization_id_by_ssid(ssid)))
       sql_values.append(item)
-    counters['ap_added'] = bulk_sql('gheat_accespoint (`mac`, `ssid`, `encryptie`, `organization`)',sql_values)
+    counters['ap_added'] = bulk_sql('gheat_accespoint (`mac`, `ssid`, `encryptie`, `organization_id`)',sql_values)
 
   # Determine which Wireless Clients to add
Index: src/django_gheat/gheat/models.py
===================================================================
--- src/django_gheat/gheat/models.py	(revision 9590)
+++ src/django_gheat/gheat/models.py	(revision 9592)
@@ -58,7 +58,19 @@
 
 
-ORGANIZATION_CHOICES = (
-  ('WirelessLeiden', 'Wireless Leiden'),
-)
+class Organization(models.Model):
+  fullname = models.CharField(max_length=100,unique=True)
+  name = models.CharField(max_length=100,unique=True)
+  def __unicode__(self):
+    return self.fullname
+
+  @staticmethod
+  def get_name_by_ssid(ssid):
+    """ Try to determine the organization via the SSID """
+    name = None
+    if ssid.startswith('ap') and ssid.endswith('wleiden.net'):
+      name = 'WirelessLeiden'
+    elif ssid.startswith('ap') and 'WirelessLeiden' in ssid:
+      name = 'WirelessLeiden'
+    return name
 
 class Node(models.Model):
@@ -66,10 +78,15 @@
   latitude = models.FloatField(null=True,blank=True)
   longitude = models.FloatField(null=True,blank=True)
-  organization = models.CharField(max_length="50",choices=ORGANIZATION_CHOICES,null=True,blank=True)
+  organization = models.ForeignKey(Organization,null=True, blank=True)
+  class Meta:
+    unique_together = ('name', 'organization')
+
+  def __unicode__(self):
+    return "%s - %s" % (self.name, self.organization)
 
 class Accespoint(models.Model):
   mac = models.CharField(max_length=17)
   ssid = models.CharField(max_length=64)
-  organization = models.CharField(max_length="50",choices=ORGANIZATION_CHOICES,null=True,blank=True)
+  organization = models.ForeignKey(Organization,null=True, blank=True)
   encryptie = models.BooleanField()
   class Meta:
@@ -78,13 +95,4 @@
     return "%s - %s" % (self.mac, self.ssid)
 
-  @staticmethod
-  def get_organization(ssid):
-    """ Try to determine the organization via the SSID """
-    organization = ''
-    if ssid.startswith('ap') and ssid.endswith('wleiden.net'):
-      organization = 'WirelessLeiden'
-    elif ssid.startswith('ap') and 'WirelessLeiden' in ssid:
-      organization = 'WirelessLeiden'
-    return organization
 
   def save(self, *args, **kwargs):
Index: src/django_gheat/gheat/sql/organization.sql
===================================================================
--- src/django_gheat/gheat/sql/organization.sql	(revision 9592)
+++ src/django_gheat/gheat/sql/organization.sql	(revision 9592)
@@ -0,0 +1,1 @@
+INSERT INTO `gheat_organization` VALUES (1,'Stichting Wireless Leiden','WirelessLeiden');
