diff --git a/libraries/onos.robot b/libraries/onos.robot
new file mode 100644
index 0000000..8719819
--- /dev/null
+++ b/libraries/onos.robot
@@ -0,0 +1,69 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# onos common functions
+
+*** Settings ***
+Documentation     Library for various utilities
+Library           SSHLibrary
+Library           HttpLibrary.HTTP
+Library           String
+Library           DateTime
+Library           Process
+Library           Collections
+Library           RequestsLibrary
+Library           OperatingSystem
+
+*** Keywords ***
+Execute ONOS Command
+    [Arguments]    ${host}    ${port}    ${cmd}
+    [Documentation]    Establishes an ssh connection to the onos contoller and executes a command
+    ${conn_id}=    SSHLibrary.Open Connection    ${host}    port=${port}    prompt=onos>    timeout=300s
+    SSHLibrary.Login    karaf    karaf
+    ${output}=    SSHLibrary.Execute Command    ${cmd}
+    SSHLibrary.Close Connection
+    [Return]    ${output}
+
+Validate OLT Device in ONOS
+    [Documentation]    Checks if olt has been connected to ONOS
+    [Arguments]    ${serial_number}
+    ${resp}=    Get Request    ONOS    onos/v1/devices
+    ${jsondata}=    To Json    ${resp.content}
+    Should Not Be Empty    ${jsondata['devices']}
+    ${length}=    Get Length    ${jsondata['devices']}
+    @{serial_numbers}=    Create List
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${value}=    Get From List    ${jsondata['devices']}    ${INDEX}
+    \    ${sn}=    Get From Dictionary    ${value}    serial
+    \    ${of_id}=    Get From Dictionary    ${value}    id
+    Should Be Equal As Strings    ${sn}    ${serial_number}
+    Set Suite Variable    ${of_id}
+
+Verify Eapol Flows Added
+    [Arguments]    ${expected_onus}
+    [Documentation]    Matches for number of eapol flows based on number of onus
+    ${eapol_flows_added}=    Execute ONOS Command    flows -s -f ADDED | grep eapol | wc -l
+    Should Contain    ${eapol_flows_added}    ${expected_onus}
+
+Verify Number of AAA-Users
+    [Arguments]    ${expected_onus}
+    [Documentation]    Matches for number of aaa-users authorized based on number of onus
+    ${aaa_users}=    Execute ONOS Command    aaa-users | grep AUTHORIZED | wc -l
+    Should Contain    ${aaa_users}    ${expected_onus}
+
+Validate DHCP Allocations
+    [Arguments]    ${expected_onus}
+    [Documentation]    Matches for number of dhcpacks based on number of onus
+    ${allocations}=    Execute ONOS Command    dhcpl2relay-allocations | grep DHCPACK | wc -l
+    Should Contain    ${allocations}    ${expected_onus}
\ No newline at end of file
diff --git a/libraries/utils.robot b/libraries/utils.robot
index 7b9768b..db67643 100644
--- a/libraries/utils.robot
+++ b/libraries/utils.robot
@@ -26,62 +26,6 @@
 Library           OperatingSystem
 
 *** Keywords ***
-Execute ONOS Command
-    [Arguments]    ${cmd}
-    [Documentation]    Establishes an ssh connection to the onos contoller and executes a command
-    ${conn_id}=    SSHLibrary.Open Connection    localhost    port=8101    prompt=onos>    timeout=300s
-    SSHLibrary.Login    karaf    karaf
-    ${output}=    SSHLibrary.Execute Command    ${cmd}
-    SSHLibrary.Close Connection
-    [Return]    ${output}
-
-Validate Device
-    [Arguments]    ${serial_number}    ${admin_state}    ${oper_status}    ${connect_status}
-    [Documentation]    Parses the output of "voltctl device list" and inspects device ${serial_number}
-    ...    Arguments are matched for device states of: "admin_state", "oper_status", and "connect_status"
-    ${output}=    Run    ${VOLTCTL_CONFIG}; voltctl device list -o json
-    ${jsondata}=    To Json    ${output}
-    Log    ${jsondata}
-    ${length}=    Get Length    ${jsondata}
-    : FOR    ${INDEX}    IN RANGE    0    ${length}
-    \    ${value}=    Get From List    ${jsondata}    ${INDEX}
-    \    ${astate}=    Get From Dictionary    ${value}    adminstate
-    \    ${opstatus}=    Get From Dictionary    ${value}    operstatus
-    \    ${cstatus}=    Get From Dictionary    ${value}    connectstatus
-    \    ${sn}=    Get From Dictionary    ${value}    serialnumber
-    \    Run Keyword If    '${sn}' == '${serial_number}'    Exit For Loop
-    Should Be Equal    ${astate}    ${admin_state}    Device ${serial_number} admin_state != ENABLED    values=False
-    Should Be Equal    ${opstatus}    ${oper_status}    Device ${serial_number} oper_status != ACTIVE    values=False
-    Should Be Equal    ${cstatus}    ${connect_status}    Device ${serial_number} connect_status != REACHABLE    values=False
-
-Get Device ID From SN
-    [Arguments]    ${serial_number}
-    [Documentation]    Gets the device id by matching for ${serial_number}
-    ${output}=    Run    ${VOLTCTL_CONFIG}; voltctl device list -o json
-    ${jsondata}=    To Json    ${output}
-    Log    ${jsondata}
-    ${length}=    Get Length    ${jsondata}
-    : FOR    ${INDEX}    IN RANGE    0    ${length}
-    \    ${value}=    Get From List    ${jsondata}    ${INDEX}
-    \    ${id}=    Get From Dictionary    ${value}    id
-    \    ${sn}=    Get From Dictionary    ${value}    serialnumber
-    \    Run Keyword If    '${sn}' == '${serial_number}'    Exit For Loop
-    [Return]    ${id}
-
-Validate Device Removed
-    [Arguments]    ${id}
-    [Documentation]    Verifys that device, ${serial_number}, has been removed
-    ${output}=    Run    ${VOLTCTL_CONFIG}; voltctl device list -o json
-    ${jsondata}=    To Json    ${output}
-    Log    ${jsondata}
-    ${length}=    Get Length    ${jsondata}
-    @{ids}=    Create List
-    : FOR    ${INDEX}    IN RANGE    0    ${length}
-    \    ${value}=    Get From List    ${jsondata}    ${INDEX}
-    \    ${device_id}=    Get From Dictionary    ${value}    id
-    \    Append To List    ${ids}    ${device_id}
-    List Should Not Contain Value    ${ids}    ${id}
-
 Check CLI Tools Configured
     [Documentation]    Tests that use 'voltctl' and 'kubectl' should execute this keyword in suite setup
     # check voltctl and kubectl configured
diff --git a/libraries/voltctl.robot b/libraries/voltctl.robot
new file mode 100644
index 0000000..cd4604c
--- /dev/null
+++ b/libraries/voltctl.robot
@@ -0,0 +1,91 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# voltctl common functions
+
+*** Settings ***
+Documentation     Library for various utilities
+Library           SSHLibrary
+Library           HttpLibrary.HTTP
+Library           String
+Library           DateTime
+Library           Process
+Library           Collections
+Library           RequestsLibrary
+Library           OperatingSystem
+
+*** Keywords ***
+Create Device
+    [Arguments]    ${ip}    ${port}
+    [Documentation]    Parses the output of "voltctl device list" and inspects device ${serial_number}
+    #create/preprovision device
+    ${rc}    ${device_id}=    Run and Return Rc and Output
+    ...    ${VOLTCTL_CONFIG}; voltctl device create -t openolt -H ${ip}:${port}
+    Should Be Equal As Integers    ${rc}    0
+    [Return]    ${device_id}
+
+Enable Device
+    [Arguments]    ${device_id}
+    ${rc}    ${output}=    Run and Return Rc and Output    ${VOLTCTL_CONFIG}; voltctl device enable ${device_id}
+    Should Be Equal As Integers    ${rc}    0
+
+Validate Device
+    [Arguments]    ${serial_number}    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_reason}    ${onu}=False
+    [Documentation]    Parses the output of "voltctl device list" and inspects device ${serial_number}
+    ...    Arguments are matched for device states of: "admin_state", "oper_status", and "connect_status"
+    ${output}=    Run    ${VOLTCTL_CONFIG}; voltctl device list -o json
+    ${jsondata}=    To Json    ${output}
+    Log    ${jsondata}
+    ${length}=    Get Length    ${jsondata}
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${value}=    Get From List    ${jsondata}    ${INDEX}
+    \    ${astate}=    Get From Dictionary    ${value}    adminstate
+    \    ${opstatus}=    Get From Dictionary    ${value}    operstatus
+    \    ${cstatus}=    Get From Dictionary    ${value}    connectstatus
+    \    ${sn}=    Get From Dictionary    ${value}    serialnumber
+    \    ${mib_state}=    Get From Dictionary    ${value}    reason
+    \    Run Keyword If    '${sn}' == '${serial_number}'    Exit For Loop
+    Should Be Equal    ${astate}    ${admin_state}    Device ${serial_number} admin_state != ENABLED    values=False
+    Should Be Equal    ${opstatus}    ${oper_status}    Device ${serial_number} oper_status != ACTIVE    values=False
+    Should Be Equal    ${cstatus}    ${connect_status}    Device ${serial_number} connect_status != REACHABLE    values=False
+    Run Keyword If    '${onu}' == 'True'    Should Be Equal    ${mib_state}    ${onu_reason}    Device ${serial_number} mib_state incorrect    values=False
+
+
+Get Device ID From SN
+    [Arguments]    ${serial_number}
+    [Documentation]    Gets the device id by matching for ${serial_number}
+    ${output}=    Run    ${VOLTCTL_CONFIG}; voltctl device list -o json
+    ${jsondata}=    To Json    ${output}
+    Log    ${jsondata}
+    ${length}=    Get Length    ${jsondata}
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${value}=    Get From List    ${jsondata}    ${INDEX}
+    \    ${id}=    Get From Dictionary    ${value}    id
+    \    ${sn}=    Get From Dictionary    ${value}    serialnumber
+    \    Run Keyword If    '${sn}' == '${serial_number}'    Exit For Loop
+    [Return]    ${id}
+
+Validate Device Removed
+    [Arguments]    ${id}
+    [Documentation]    Verifys that device, ${serial_number}, has been removed
+    ${output}=    Run    ${VOLTCTL_CONFIG}; voltctl device list -o json
+    ${jsondata}=    To Json    ${output}
+    Log    ${jsondata}
+    ${length}=    Get Length    ${jsondata}
+    @{ids}=    Create List
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${value}=    Get From List    ${jsondata}    ${INDEX}
+    \    ${device_id}=    Get From Dictionary    ${value}    id
+    \    Append To List    ${ids}    ${device_id}
+    List Should Not Contain Value    ${ids}    ${id}
\ No newline at end of file
