diff --git a/xos/synchronizer/steps/helpers.py b/xos/synchronizer/steps/helpers.py
index 077d559..aab5aa9 100644
--- a/xos/synchronizer/steps/helpers.py
+++ b/xos/synchronizer/steps/helpers.py
@@ -57,10 +57,15 @@
         return time.mktime(datetime.datetime.strptime(d, "%d.%m.%Y %H:%S").timetuple())
 
     @staticmethod
+    def int_to_string(i):
+        return str(i)
+
+    @staticmethod
     def update_fields(model, dict, mapping={}, transformations={}):
         dict = ProgranHelpers.convert_keys(dict, mapping, transformations)
         for k, v in dict.iteritems():
             if hasattr(model, k):
+                log.debug("Setting %s=%s on %s" % (k, v, model.model_name))
                 setattr(model, k, v)
             # else:
             #     log.debug("%s does not have a '%s' property, not updating it" % (model.model_name, k))
@@ -74,7 +79,7 @@
                 if k in transformations:
                     dict[k] = transformations[k](v)
 
-                # NOTE we may have different names that the field in the dict
+                # NOTE we may have different names than the field in the dict
                 dict[mapping[k]] = dict[k]
                 del dict[k]
         return dict
diff --git a/xos/synchronizer/steps/sync_imsi_back.py b/xos/synchronizer/steps/sync_imsi_back.py
index 7be4921..e81232c 100644
--- a/xos/synchronizer/steps/sync_imsi_back.py
+++ b/xos/synchronizer/steps/sync_imsi_back.py
@@ -66,6 +66,10 @@
             'UeStatus': 'ue_status'
         }
 
+        field_transformations = {
+            'UeStatus': ProgranHelpers.int_to_string,
+        }
+
         updated_imsi = []
 
         for i in res:
@@ -82,7 +86,7 @@
 
                 log.debug("IMSI %s is new, creating it" % i['IMSI'])
 
-            si = ProgranHelpers.update_fields(si, i, field_mapping,)
+            si = ProgranHelpers.update_fields(si, i, field_mapping, field_transformations)
 
             si.save()
 
diff --git a/xos/synchronizer/steps/sync_progranserviceinstance_back.py b/xos/synchronizer/steps/sync_progranserviceinstance_back.py
index c50773b..25a92e9 100644
--- a/xos/synchronizer/steps/sync_progranserviceinstance_back.py
+++ b/xos/synchronizer/steps/sync_progranserviceinstance_back.py
@@ -67,7 +67,7 @@
         field_mapping = {
             'Name': 'name',
             'Start': 'start',
-            'End': 'end'
+            'End': 'end',
         }
 
         field_transformations = {
@@ -135,6 +135,10 @@
                 updated_profiles.append(si.name)
                 continue
 
+            # ugly fix
+            if p['AdmControl']:
+                p['AdmControl'] = str(p['AdmControl'])
+
             si = ProgranHelpers.update_fields(si, p, field_mapping, field_transformations)
 
             # checking for handovers
@@ -157,8 +161,8 @@
             # Assigning handover to profile
             si.handover = handover
 
-            si.backend_status = "OK"
-            si.backend_code = 1
+            # si.backend_status = "OK"
+            # si.backend_code = 1
 
             si.no_sync = True
             si.previously_sync = True
