diff --git a/trsync.py b/trsync.py
index 2e7a015..4fbf347 100644
--- a/trsync.py
+++ b/trsync.py
@@ -6,28 +6,7 @@
 import utils
 
 from rsync_remote import RsyncRemote
-from utils import singleton
-
-
-@singleton
-class TimeStamp(object):
-    def __init__(self, now=None):
-        # now='2015-06-18-104259'
-        self.snapshot_stamp_format = r'%Y-%m-%d-%H%M%S'
-        self.snapshot_stamp_regexp = r'[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}'
-
-        if now is None:
-            self.now = datetime.datetime.utcnow()
-        else:
-            self.now = datetime.datetime.strptime(now,
-                                                  self.snapshot_stamp_format)
-        self.snapshot_stamp = self.now.strftime(self.snapshot_stamp_format)
-
-    def __str__(self):
-        return self.snapshot_stamp
-
-    def reinit(self, *args, **kwagrs):
-        self.__init__(*args, **kwagrs)
+from utils import TimeStamp
 
 
 class TRsync(RsyncRemote):
diff --git a/utils.py b/utils.py
index 8872c47..d95165a 100644
--- a/utils.py
+++ b/utils.py
@@ -9,6 +9,7 @@
 
 def singleton(class_):
     instances = {}
+
     def getinstance(*args, **kwargs):
         if class_ not in instances:
             instances[class_] = class_(*args, **kwargs)
@@ -49,6 +50,27 @@
     return wrap
 
 
+@singleton
+class TimeStamp(object):
+    def __init__(self, now=None):
+        # now='2015-06-18-104259'
+        self.snapshot_stamp_format = r'%Y-%m-%d-%H%M%S'
+        self.snapshot_stamp_regexp = r'[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}'
+
+        if now is None:
+            self.now = datetime.datetime.utcnow()
+        else:
+            self.now = datetime.datetime.strptime(now,
+                                                  self.snapshot_stamp_format)
+        self.snapshot_stamp = self.now.strftime(self.snapshot_stamp_format)
+
+    def __str__(self):
+        return self.snapshot_stamp
+
+    def reinit(self, *args, **kwagrs):
+        self.__init__(*args, **kwagrs)
+
+
 class ResultNotProduced(Exception):
     def __init__(self, value):
         self.value = value
