diff --git a/timeseriesviewer/utils.py b/timeseriesviewer/utils.py
index fe2d839099e298973d786c242917337042558242..66b67f6962da14ad1057437db0d4095283e4f1f7 100644
--- a/timeseriesviewer/utils.py
+++ b/timeseriesviewer/utils.py
@@ -237,6 +237,13 @@ class SpatialExtent(QgsRectangle):
 
         return '{} {} {}'.format(self.upperLeft(), self.lowerRight(), self.crs().authid())
 
+class Singleton(type):
+    _instances = {}
+
+    def __call__(cls, *args, **kwds):
+        if cls not in cls._instances:
+            cls._instances[cls] = super(Singleton, cls).__call__(*args,**kwds)
+        return cls._instances[cls]
 
 class KeepRefs(object):
     __refs__ = defaultdict(list)