Index: src/django_gheat/gheat/admin.py
===================================================================
--- src/django_gheat/gheat/admin.py	(revision 9591)
+++ 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 9591)
+++ 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 9591)
+++ 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 9591)
+++ 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');
Index: src/django_gheat/wlheatmap/filters.py
===================================================================
--- src/django_gheat/wlheatmap/filters.py	(revision 9591)
+++ src/django_gheat/wlheatmap/filters.py	(revision 9592)
@@ -20,5 +20,5 @@
       # Get list if accespoints found in the specific 'Meting', and make this is list.
       wirelessleiden_ssid = Meting.objects.filter(meetrondje=mr,
-        accespoint__organization='WirelessLeiden').\
+        accespoint__organization__name='WirelessLeiden').\
         values_list('accespoint__ssid',flat=True).\
         order_by('accespoint__ssid').distinct()
Index: src/django_gheat/wlheatmap/nodelist.py
===================================================================
--- src/django_gheat/wlheatmap/nodelist.py	(revision 9591)
+++ src/django_gheat/wlheatmap/nodelist.py	(revision 9592)
@@ -40,5 +40,5 @@
   filter = {}
   filter.update({
-    'organization' : 'WirelessLeiden',
+    'organization__name' : 'WirelessLeiden',
     'meting__latitude__lt' : maxlat,
     'meting__longitude__lt' : maxlon,
Index: src/django_gheat/wlheatmap/templates/js/LayerBase.js
===================================================================
--- src/django_gheat/wlheatmap/templates/js/LayerBase.js	(revision 9591)
+++ src/django_gheat/wlheatmap/templates/js/LayerBase.js	(revision 9592)
@@ -184,5 +184,5 @@
     initialize: function(name, options) {
         var url = get_balanced_urls('http://', {{ settings.DJANGO_CDN_DOMAINS|safe }},
-          '{{ settings.DJANGO_PREFIX }}/wlheatmap/tile/${z}/${x},${y}.png?colour=255,0,0&accespoint__organization=WirelessLeiden');
+          '{{ settings.DJANGO_PREFIX }}/wlheatmap/tile/${z}/${x},${y}.png?colour=255,0,0&accespoint__organization__name=WirelessLeiden');
         options = OpenLayers.Util.extend({ numZoomLevels: 21 }, options);
         var newArguments = [name, url, options];
