"""Syncs the backend database with the taskd server"""
         pass
 
+    def convert_datetime_string(self, value):
+        """
+        Converts TW syntax datetime string to a localized datetime
+        object. This method is not mandatory.
+        """
+        raise NotImplemented
+
 
 class TaskWarriorException(Exception):
     pass
         else:
             return six.u("description:'{0}'").format(task._data['description'] or '')
 
+    def convert_datetime_string(self, value):
+
+        if self.version >= VERSION_2_4_0:
+            # For strings, use 'task calc' to evaluate the string to datetime
+            # available since TW 2.4.0
+            args = value.split()
+            result = self.execute_command(['calc'] + args)
+            naive = datetime.datetime.strptime(result[0], DATE_FORMAT_CALC)
+            localized = local_zone.localize(naive)
+        else:
+            raise ValueError("Provided value could not be converted to "
+                             "datetime, its type is not supported: {}"
+                             .format(type(value)))
 
     # Public interface
 
 
         to raise ValueError.
     """
 
-    def __init__(self, warrior):
-        self.warrior = warrior
+    def __init__(self, backend):
+        self.backend = backend
 
     def _deserialize(self, key, value):
         hydrate_func = getattr(self, 'deserialize_{0}'.format(key),
         else:
             uuids = raw_uuids
 
-        return set(self.warrior.tasks.get(uuid=uuid) for uuid in uuids if uuid)
+        return set(self.backend.tasks.get(uuid=uuid) for uuid in uuids if uuid)
 
     def datetime_normalizer(self, value):
         """
                 # If the value is already localized, there is no need to change
                 # time zone at this point. Also None is a valid value too.
                 localized = value
-        elif (isinstance(value, six.string_types)
-                and self.warrior.version >= VERSION_2_4_0):
-            # For strings, use 'task calc' to evaluate the string to datetime
-            # available since TW 2.4.0
-            args = value.split()
-            result = self.warrior.execute_command(['calc'] + args)
-            naive = datetime.datetime.strptime(result[0], DATE_FORMAT_CALC)
-            localized = local_zone.localize(naive)
+        elif isinstance(value, six.string_types):
+            localized = self.backend.convert_datetime_string(value)
         else:
             raise ValueError("Provided value could not be converted to "
                              "datetime, its type is not supported: {}"