diff --git a/src/directives/openlayers.js b/src/directives/openlayers.js
index <HASH>..<HASH> 100644
--- a/src/directives/openlayers.js
+++ b/src/directives/openlayers.js
@@ -75,6 +75,10 @@ angular.module('openlayers-directive', ['ngSanitize']).directive('openlayers', f
                     view: view
                 });
 
+                scope.$on('$destroy', function() {
+                    olData.resetMap(attrs.id);
+                });
+
                 // If no layer is defined, set the default tileLayer
                 if (!attrs.customLayers) {
                     var l = {
diff --git a/src/services/olData.js b/src/services/olData.js
index <HASH>..<HASH> 100644
--- a/src/services/olData.js
+++ b/src/services/olData.js
@@ -68,4 +68,10 @@ angular.module('openlayers-directive').service('olData', function($log, $q) {
         return id;
     }
 
+    this.resetMap = function(scopeId) {
+        if (angular.isDefined(maps[scopeId])) {
+            delete maps[scopeId];
+        }
+    };
+
 });
fix(ol directive): watch destroy