Index: src/django_gheat/wlheatmap/static/heatmap.js
===================================================================
--- src/django_gheat/wlheatmap/static/heatmap.js	(revision 9811)
+++ src/django_gheat/wlheatmap/static/heatmap.js	(revision 9813)
@@ -21,5 +21,5 @@
       new OpenLayers.Control.Navigation(),
       new OpenLayers.Control.Permalink({
-        anchor : true,
+        anchor : false,
         createParams: function(center, zoom, layers) {
           center = center || this.map.getCenter();
@@ -64,5 +64,6 @@
               // Update permalink URL to reflect new location and filters
               layerid = 0;
-              for (var i=1, len=layers.length; i < len; i++) {
+              // First two and last one should be ignored
+              for (var i=4, len=layers.length; i < len; i++) {
                 var layer = layers[i];
                 if ($.isArray(layer.url)) {
@@ -73,11 +74,36 @@
                 var filter = url.split('?')[1];
                 layerid += 1;
-                params['layername' + i] = layer.name;
-                params['layerfilter' + i] = filter;
+                params['layername' + layerid] = layer.name;
+                params['layercolour' + layerid] = layer.colour;
+                params['layerfilter' + layerid] = filter;
               }
-	      params['layercount']  = layerid;
+              params['layercount']  = layerid;
           }
           return params;
-        }
+        },
+        draw: function() {
+          OpenLayers.Control.prototype.draw.apply(this, arguments);
+
+          if (!this.element && !this.anchor) {
+            this.element = document.createElement("a");
+            this.element.innerHTML = OpenLayers.i18n("Permalink");
+            this.element.href="";
+            this.div.appendChild(this.element);
+          }
+          this.map.events.on({
+            'moveend': this.updateLink,
+            'changelayer': this.updateLink,
+            'addlayer': this.updateLink,
+            'removelayer': this.updateLink,
+            'changebaselayer': this.updateLink,
+            scope: this
+          });
+
+          // Make it so there is at least a link even though the map may not have
+          // moved yet.
+          this.updateLink();
+
+          return this.div;
+        },
       }),
       new OpenLayers.Control.PanZoomBar(),
Index: src/django_gheat/wlheatmap/static/heatmap_extensions.js
===================================================================
--- src/django_gheat/wlheatmap/static/heatmap_extensions.js	(revision 9811)
+++ src/django_gheat/wlheatmap/static/heatmap_extensions.js	(revision 9813)
@@ -408,5 +408,5 @@
    * Blank parameters are ignored.
    */
-  function add_filter(lname, filter) {
+  function add_filter(lname, filter, colour) {
     // setting layer
     OpenLayers.Layer.OSM.Overlay = OpenLayers.Class(OpenLayers.Layer.OSM, {
@@ -419,6 +419,6 @@
         OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
       },
-
-    CLASS_NAME: "OpenLayers.Layer.Overlay"
+      colour: colour,
+      CLASS_NAME: "OpenLayers.Layer.Overlay"
     });
 
@@ -435,21 +435,27 @@
       lname= 'Custom Filter';
     }
-    add_filter(lname, $("#raw_filter").val());
-
-  });
+    add_filter(lname, $("#raw_filter").val(), colour);
+
+  });
+
+  // Parse the parameters
+  var items = window.location.search.slice(1).split('&');
+  var params = new Object;
+  for (var i=0; i < items.length; i++) {
+    var kv = items[i].split('=');
+    params[kv[0]] = decodeURIComponent(kv[1]);
+  }
+
   init_heatmap();
   init_slider(35,75);
 
+ 
   // Initiate the custom filters
-  var items = window.location.hash.split('#').slice(1);
-  for (var i=0; i < items.length; i++) {
-    var y = items[i].split('!');
-    var type = y[0];
-    if ( type == 'filter') {
-      add_filter(y[1], y[2]);
-    } else if ( type == 'focus') {
-      var lonLat = new OpenLayers.LonLat(y[1], y[2]).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
-      map.setCenter (lonLat, y[3]);
-    }
-  }
+  if (params['layercount']) {
+    for (var i=1; i <= params['layercount']; i++) {
+      add_filter(params['layername' + i], params['layerfilter' + i], params['layercolour' + i]);
+    }
+  }
+  var pl = map.getControlsByClass('OpenLayers.Control.Permalink');
+  pl.updateLink();
 });
