diff --git a/xos/synchronizer/steps/sync_olt_device.py b/xos/synchronizer/steps/sync_olt_device.py
index 40f884e..e1c1c4a 100644
--- a/xos/synchronizer/steps/sync_olt_device.py
+++ b/xos/synchronizer/steps/sync_olt_device.py
@@ -80,15 +80,17 @@
 
         log.info("Add device json res", res=res)
 
+        # TODO(smbaker): Potential partial failure. If device is created in Voltha but synchronizer crashes before the
+        # model is saved, then synchronizer will continue to try to preprovision and fail due to preexisting
+        # device.
+
         if not res['id']:
             raise Exception(
                 'VOLTHA Device Id is empty. This probably means that the OLT device is already provisioned in VOLTHA')
         else:
             model.device_id = res['id']
             model.serial_number = res['serial_number']
-
-
-        return model
+            model.save()
 
     def activate_olt(self, model):
 
@@ -113,8 +115,6 @@
             request = requests.get("%s:%d/api/v1/devices/%s" % (voltha['url'], voltha['port'], model.device_id)).json()
             attempted = attempted + 1
 
-
-        model.admin_state = request['admin_state']
         model.oper_status = request['oper_status']
         model.serial_number = request['serial_number']
 
@@ -122,10 +122,17 @@
             raise Exception("It was not possible to activate OLTDevice with id %s" % model.id)
 
         # Find the of_id of the device
-        model = self.get_ids_from_logical_device(model)
+        self.get_ids_from_logical_device(model)
         model.save()
 
-        return model
+    def deactivate_olt(self, model):
+        voltha = Helpers.get_voltha_info(model.volt_service)
+
+        # Disable device
+        request = requests.post("%s:%d/api/v1/devices/%s/disable" % (voltha['url'], voltha['port'], model.device_id))
+
+        if request.status_code != 200:
+            raise Exception("Failed to disable OLT device: %s" % request.text)
 
     def configure_onos(self, model):
 
@@ -158,22 +165,36 @@
                 print request.json()
             except Exception:
                 print request.text
-        return model
 
     def sync_record(self, model):
         log.info("Synching device", object=str(model), **model.tologdict())
 
+        if model.admin_state not in ["ENABLED", "DISABLED"]:
+            raise Exception("OLT Device %s admin_state has invalid value %s" % (model.id, model.admin_state))
+
         # If the device has feedback_state is already present in voltha
-        if not model.device_id and not model.admin_state and not model.oper_status and not model.of_id:
+        if not model.device_id and not model.oper_status and not model.of_id:
             log.info("Pushing OLT device to VOLTHA", object=str(model), **model.tologdict())
-            model = self.pre_provision_olt_device(model)
-            self.activate_olt(model)
-        elif model.oper_status != "ACTIVE":
-            raise Exception("It was not possible to activate OLTDevice with id %s" % model.id)
+            self.pre_provision_olt_device(model)
+            model.oper_status = "UNKNOWN" # fall-though to activate OLT
         else:
             log.info("OLT device already exists in VOLTHA", object=str(model), **model.tologdict())
 
-        self.configure_onos(model)
+        # Reconcile admin_state and oper_status, activating or deactivating the OLT as necessary.
+
+        if model.oper_status != "ACTIVE" and model.admin_state == "ENABLED":
+            self.activate_olt(model)
+        elif model.oper_status == "ACTIVE" and model.admin_state == "DISABLED":
+            self.deactivate_olt(model)
+
+        if model.admin_state == "ENABLED":
+            # If we were not able to reconcile ENABLE/ACTIVE, then throw an exception and do not proceed to onos
+            # configuration.
+            if model.oper_status != "ACTIVE":
+                raise Exception("It was not possible to activate OLTDevice with id %s" % model.id)
+
+            # At this point OLT is enabled and active. Configure ONOS.
+            self.configure_onos(model)
 
     def delete_record(self, model):
         log.info("Deleting OLT device", object=str(model), **model.tologdict())
