diff --git a/tests/atests/common/preprovisioning.py b/tests/atests/common/preprovisioning.py
index 9b19408..86c2048 100755
--- a/tests/atests/common/preprovisioning.py
+++ b/tests/atests/common/preprovisioning.py
@@ -37,16 +37,26 @@
         
         self.__oltIpAddress = None
         self.__oltPort = None
-        self.__statusLine = ""
+        self.__oltType = None
+        self.__onuType = None
+        self.__statusLines = ""
         self.__fields = []
+        self.__oltDeviceId = None
         
     def pSetLogDirs(self, logDir):
         testCaseUtils.configDirs(self, logDir)
 
-    def configure(self, oltIpAddress, oltPort):
+    def configure(self, oltIpAddress, oltPort, oltType, onuType):
         self.__oltIpAddress = oltIpAddress       
         self.__oltPort = oltPort
+        self.__oltType = oltType
+        self.__onuType = onuType
 
+    def get_fields_from_grep_command(self, searchWord, logFile):
+        grepCommand =\
+            "grep %s %s/%s" % (searchWord, testCaseUtils.getDir(self, 'log'), logFile)  
+        self.__statusLines = commands.getstatusoutput(grepCommand)[1]
+        
     def preprovisionOlt(self):
         print('Do PROVISIONING')
         testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'),
@@ -54,36 +64,88 @@
             (self.__oltIpAddress, self.__oltPort),
             'voltha_preprovision_olt.log')
         time.sleep(5)
-   
-    def query_devices_before_enable(self):
+        
+    def status_should_be_success_after_preprovision_command(self):
+        self.get_fields_from_grep_command('success', 'voltha_preprovision_olt.log')
+        assert self.__statusLines, 'Preprovision Olt command should have returned success but did not'
+        
+    def query_devices_before_enabling(self):
         testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'), 'devices',
                                         'voltha_devices_before_enable.log')
         time.sleep(5)
-        grepCommand =\
-            "grep PREPROVISIONED %s/voltha_devices_before_enable.log " % testCaseUtils.getDir(self, 'log')
-        self.__statusLine = commands.getstatusoutput(grepCommand)[1]
-        self.__fields = testCaseUtils.parseFields(self.__statusLine)
+        
+    def check_olt_fields_before_enabling(self):
+        result = True
+        self.get_fields_from_grep_command(self.__oltType, 'voltha_devices_before_enable.log')
+        assert self.__statusLines, 'No Olt listed under devices'
+        self.__fields = testCaseUtils.parseFields(self.__statusLines)
         self.__oltDeviceId = self.__fields[1].strip()
         print ("OLT device id = %s" % self.__oltDeviceId)
+        adminState = self.__fields[3].strip()
+        assert adminState == 'PREPROVISIONED', 'Admin State not PREPROVISIONED'
+        hostPort = self.__fields[4].strip()
+        assert hostPort, 'hostPort field is empty'
+        hostPortFields = hostPort.split(":")
+        assert hostPortFields[0].strip() == self.__oltIpAddress or hostPortFields[1] == str(self.__oltPort), \
+            'Olt IP or Port does not match'
+           
+    def check_states(self, devType):
+        result = True
+        adminState = self.__fields[7].strip()
+        assert adminState == 'ENABLED', 'Admin State of %s not ENABLED' % devType
+        operStatus = self.__fields[8].strip()
+        assert operStatus == 'ACTIVE', 'Oper Status of %s not ACTIVE' % devType
+        connectStatus = self.__fields[9].strip()
+        assert connectStatus == 'REACHABLE', 'Connect Status of %s not REACHABLE' % devType
+        return result
+
+    def check_olt_fields_after_enabling(self):
+        self.get_fields_from_grep_command(self.__oltType, 'voltha_devices_after_enable.log')
+        assert self.__statusLines, 'No Olt listed under devices'
+        self.__fields = testCaseUtils.parseFields(self.__statusLines)
+        assert self.check_states(self.__oltType), 'States of %s does match expected' % self.__oltType
+        hostPort = self.__fields[11].strip()
+        assert hostPort, 'hostPort field is empty'
+        hostPortFields = hostPort.split(":")
+        assert hostPortFields[0] == self.__oltIpAddress or hostPortFields[1] == str(self.__oltPort), \
+            'Olt IP or Port does not match'
+                      
+    def check_onu_fields_after_enabling(self):        
+        self.get_fields_from_grep_command(self.__onuType, 'voltha_devices_after_enable.log')
+        assert self.__statusLines, 'No Onu listed under devices'
+        lines = self.__statusLines.splitlines()
+        lenLines = len(lines)
+        assert lenLines == 1, 'Fixed single onu does not match, ONU Count was %d' % lenLines
+        for line in lines:
+            self.__fields = testCaseUtils.parseFields(line)
+            assert self.check_states(self.__onuType) == True, 'States of %s does match expected' % self.__onuType
         
     def enable(self):
         print('Enable %s OLT device' % self.__oltDeviceId)
         testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'), 'enable ' + self.__oltDeviceId,
                                         'voltha_enable.log')
 
-    def query_devices_after_enable(self):
+    def status_should_be_success_after_enable_command(self):
+        self.get_fields_from_grep_command('success', 'voltha_enable.log')
+        assert self.__statusLines, 'Enable command should have returned success but did not'
+              
+    def query_devices_after_enabling(self):
         testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'), 'devices',
                                         'voltha_devices_after_enable.log')
 
-def runTest(oltIpAddress, oltPort, logDir):
+def runTest(oltIpAddress, oltPort, oltType, onuType, logDir):
     preprovisioning = Preprovisioning()
     preprovisioning.pSetLogDirs(logDir)
-    preprovisioning.configure(str(oltIpAddress), int(oltPort))
+    preprovisioning.configure(oltIpAddress, oltPort, oltType, onuType)
     preprovisioning.preprovisionOlt()
-    preprovisioning.query_devices_before_enable()
+    preprovisioning.status_should_be_success_after_preprovision_command()
+    preprovisioning.query_devices_before_enabling()
+    preprovisioning.check_olt_fields_before_enabling()
     preprovisioning.enable()
-    preprovisioning.query_devices_after_enable()
-    
+    preprovisioning.status_should_be_success_after_enable_command()
+    preprovisioning.query_devices_after_enabling()
+    preprovisioning.check_olt_fields_after_enabling()
+    preprovisioning.check_onu_fields_after_enabling()
                                           
                                           
 
