diff --git a/tests/openonu-go-adapter/Voltha_ONUStateTests.robot b/tests/openonu-go-adapter/Voltha_ONUStateTests.robot
index e0ea539..f943b4c 100755
--- a/tests/openonu-go-adapter/Voltha_ONUStateTests.robot
+++ b/tests/openonu-go-adapter/Voltha_ONUStateTests.robot
@@ -30,7 +30,7 @@
 Resource          ../../libraries/utils.robot
 Resource          ../../libraries/k8s.robot
 Resource          ../../variables/variables.robot
-Resource          Voltha_ONUUtilities.robot
+Resource          ../../libraries/Voltha_ONUUtilities.robot
 
 *** Variables ***
 ${timeout}        60s
diff --git a/tests/openonu-go-adapter/Voltha_ONUTemplateTests.robot b/tests/openonu-go-adapter/Voltha_ONUTemplateTests.robot
index 00098b3..b106b35 100755
--- a/tests/openonu-go-adapter/Voltha_ONUTemplateTests.robot
+++ b/tests/openonu-go-adapter/Voltha_ONUTemplateTests.robot
@@ -32,7 +32,7 @@
 Resource          ../../libraries/utils.robot
 Resource          ../../libraries/k8s.robot
 Resource          ../../variables/variables.robot
-Resource          Voltha_ONUUtilities.robot
+Resource          ../../libraries/Voltha_ONUUtilities.robot
 
 *** Variables ***
 ${NAMESPACE}      voltha
diff --git a/tests/openonu-go-adapter/Voltha_ONUUtilities.robot b/tests/openonu-go-adapter/Voltha_ONUUtilities.robot
deleted file mode 100755
index 1389715..0000000
--- a/tests/openonu-go-adapter/Voltha_ONUUtilities.robot
+++ /dev/null
@@ -1,323 +0,0 @@
-# Copyright 2020 - 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.
-
-*** Settings ***
-Documentation     Library for various openonu-go-adpter utilities
-
-*** Variables ***
-${defaultstackname}    minimal
-
-*** Keywords ***
-Do Power On ONU Device
-    [Documentation]    This keyword power on all onus.
-    ${namespace}=    Set Variable    voltha
-    FOR    ${I}    IN RANGE    0    ${num_all_onus}
-        ${src}=    Set Variable    ${hosts.src[${I}]}
-        ${result}=    Exec Pod In Kube    ${namespace}    bbsim    bbsimctl onu poweron ${src['onu']}
-        Should Contain    ${result}    successfully    msg=Can not poweron ${src['onu']}    values=False
-    END
-
-Do Current State Test
-    [Documentation]    This keyword checks the passed state of the given onu.
-    [Arguments]    ${state}    ${onu}    ${reqadminstate}=${EMPTY}    ${reqoperstatus}=${EMPTY}
-    ...    ${reqconnectstatus}=${EMPTY}
-    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_state_nb}    ${onu_state}=    Map State    ${state}
-    ${admin_state}=       Set Variable If    '${reqadminstate}'!='${EMPTY}'       ${reqadminstate}       ${admin_state}
-    ${oper_status}=       Set Variable If    '${reqoperstatus}'!='${EMPTY}'       ${reqoperstatus}       ${oper_status}
-    ${connect_status}=    Set Variable If    '${reqconnectstatus}'!='${EMPTY}'    ${reqconnectstatus}
-    ...    ${connect_status}
-    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    50ms
-    ...    Validate Device    ${admin_state}    ${oper_status}    ${connect_status}
-    ...    ${onu}    onu=True    onu_reason=${onu_state}
-
-Do Current State Test All Onus
-    [Documentation]    This keyword checks the passed state of all onus.
-    ...                Hint: ${timeStart} will be not evaluated here!
-    [Arguments]    ${state}    ${reqadminstate}=${EMPTY}    ${reqoperstatus}=${EMPTY}    ${reqconnectstatus}=${EMPTY}
-    ...    ${alternativeonustate}=${EMPTY}
-    ${list_onus}    Create List
-    Build ONU SN List    ${list_onus}
-    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_state_nb}    ${onu_state}=    Map State    ${state}
-    ${admin_state}=       Set Variable If    '${reqadminstate}'!='${EMPTY}'       ${reqadminstate}       ${admin_state}
-    ${oper_status}=       Set Variable If    '${reqoperstatus}'!='${EMPTY}'       ${reqoperstatus}       ${oper_status}
-    ${connect_status}=    Set Variable If    '${reqconnectstatus}'!='${EMPTY}'    ${reqconnectstatus}
-    ...    ${connect_status}
-    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    50ms
-    ...    Validate ONU Devices With Duration
-    ...    ${admin_state}    ${oper_status}    ${connect_status}
-    ...    ${onu_state}    ${list_onus}    ${timeStart}    alternate_reason=${alternativeonustate}
-
-Do Current Reason Test All Onus
-    [Documentation]    This keyword checks the passed state of all onus.
-    ...                Hint: ${timeStart} will be not evaluated here!
-    [Arguments]    ${state}
-    ${list_onus}    Create List
-    Build ONU SN List    ${list_onus}
-    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_state_nb}    ${onu_state}=    Map State    ${state}
-    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    50ms
-    ...    Validate ONU Devices MIB State With Duration
-    ...    ${onu_state}    ${list_onus}    ${timeStart}
-
-Log Ports
-    [Documentation]    This keyword logs all port data available in ONOS of first port per ONU
-    [Arguments]    ${onlyenabled}=False
-    ${cmd}    Set Variable If    ${onlyenabled}    ports -e    ports
-    ${onu_ports}=    Execute ONOS CLI Command on open connection    ${onos_ssh_connection}   ${cmd}
-    ${lines} =     Get Lines Matching Regexp    ${onu_ports}    .*portName=BBSM[0-9]{8}-1
-    Log    ${lines}
-
-Kill Adaptor
-    [Documentation]    This keyword kills the passed adaptor.
-    [Arguments]    ${namespace}    ${name}
-    ${cmd}    Catenate
-    ...    kubectl exec -it -n voltha $(kubectl get pods -n ${namespace} | grep ${name} | awk 'NR==1{print $1}')
-    ...     -- /bin/sh -c "kill 1"
-    ${rc}    ${output}=    Run and Return Rc and Output    ${cmd}
-    Log    ${output}
-
-Verify MIB Template Data Available
-    [Documentation]    This keyword verifies MIB Template Data stored in etcd
-    ${namespace}=    Set Variable    default
-    ${podname}=      Set Variable    etcd
-    ${commandget}    Catenate
-    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/omci_mibs/go_templates/'
-    ${result}=    Exec Pod In Kube    ${namespace}    ${podname}    ${commandget}
-    Should Not Be Empty    ${result}    No MIB Template Data stored in etcd!
-
-Delete MIB Template Data
-    [Documentation]    This keyword deletes MIB Template Data stored in etcd
-    ${namespace}=    Set Variable    default
-    ${podname}=    Set Variable    etcd
-    ${commanddel}    Catenate
-    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl del --prefix service/voltha/omci_mibs/go_templates/'
-    ${result}=    Exec Pod In Kube    ${namespace}    ${podname}    ${commanddel}
-    Sleep    3s
-    ${commandget}    Catenate
-    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/omci_mibs/go_templates/'
-    ${result}=    Exec Pod In Kube    ${namespace}    ${podname}    ${commandget}
-    Should Be Empty    ${result}    Could not delete MIB Template Data stored in etcd!
-
-Validate Onu Data In Etcd
-    [Documentation]    This keyword validates openonu-go-adapter Data stored in etcd.
-    ...                It checks unique of  serial_number and combination of pon, onu and uni in tp_path.
-    ...                Furthermore it evaluates the values of onu_id and uni_id with values read from tp_path.
-    ...                Number of etcd entries has to match with the passed number.
-    [Arguments]    ${nbofetcddata}=${num_all_onus}
-    ${stackname}=    Get Stack Name
-    ${etcddata}=    Get ONU Go Adapter ETCD Data
-    ${etcddata}=    Remove Lines Containing String    ${etcddata}    service/${stackname}/openonu    \n
-    #prepare result for json convert
-    ${result}=    Prepare ONU Go Adapter ETCD Data For Json    ${etcddata}
-    ${jsondata}=    To Json    ${result}
-    ${length}=    Get Length    ${jsondata}
-    log    ${jsondata}
-    Run Keyword And Continue On Failure    Should Be Equal As Integers    ${length}    ${nbofetcddata}
-    ...    msg=Number etcd data (${length}) does not match required (${nbofetcddata})!
-    ${pononuuniidlist}=    Create List
-    ${serialnumberlist}=    Create List
-    FOR    ${INDEX}    IN RANGE    0    ${length}
-        ${value}=    Get From List    ${jsondata}    ${INDEX}
-        # TODO: The TP ID is hardcoded to 64 below. It is fine when testing single-tcont workflow.
-        # When testing multi-tcont this may need some adjustment.
-        ${tp_path}=    Get From Dictionary    ${value['uni_config'][0]['PersTpPathMap']}    64
-        ${pononuuniid}=    Read Pon Onu Uni String    ${tp_path}
-        ${list_id}=    Get Index From List    ${pononuuniidlist}   ${pononuuniid}
-        Should Be Equal As Integers    ${list_id}    -1
-        ...    msg=Combination of Pon, Onu and Uni (${pononuuniid}) exist multiple in etcd data!
-        Append To List    ${pononuuniidlist}    ${pononuuniid}
-        Validate Onu Id    ${value}
-        Validate Uni Id    ${value}
-        ${serial_number}=    Get From Dictionary    ${value}    serial_number
-        ${list_id}=    Get Index From List    ${serialnumberlist}   ${serial_number}
-        Should Be Equal As Integers    ${list_id}    -1
-        ...    msg=Serial number (${serial_number}) exists multiple in etcd data!
-        Append To List    ${serialnumberlist}    ${serial_number}
-    END
-
-Validate Vlan Rules In Etcd
-    [Documentation]    This keyword validates Vlan rules of openonu-go-adapter Data stored in etcd.
-    ...                It checks the given number of cookie_slice, match_vid (=4096) and set_vid.
-    ...                Furthermore it returns a list of all set_vid.
-    ...                In case of a passed dictionary containing set_vids these will be checked for to
-    ...                current set-vid depending on setvidequal (True=equal, False=not equal).
-    [Arguments]    ${nbofcookieslice}=1    ${reqmatchvid}=4096    ${prevvlanrules}=${NONE}    ${setvidequal}=False
-    ${stackname}=    Get Stack Name
-    ${etcddata}=    Get ONU Go Adapter ETCD Data
-    ${etcddata}=    Remove Lines Containing String    ${etcddata}    service/${stackname}/openonu    \n
-    #prepare result for json convert
-    ${result}=    Prepare ONU Go Adapter ETCD Data For Json    ${etcddata}
-    ${jsondata}=    To Json    ${result}
-    ${length}=    Get Length    ${jsondata}
-    log    ${jsondata}
-    ${vlan_rules}=    Create Dictionary
-    FOR    ${INDEX}    IN RANGE    0    ${length}
-        ${value}=    Get From List    ${jsondata}    ${INDEX}
-        # TODO: The TP ID is hardcoded to 64 below. It is fine when testing single-tcont workflow.
-        # When testing multi-tcont this may need some adjustment.
-        ${tp_path}=    Get From Dictionary    ${value['uni_config'][0]['PersTpPathMap']}    64
-        ${pononuuniid}=    Read Pon Onu Uni String    ${tp_path}
-        ${cookieslice}=    Get From Dictionary    ${value['uni_config'][0]['flow_params'][0]}    cookie_slice
-        #@{cookieslicelist}=    Split String    ${cookieslice}    ,
-        ${foundcookieslices}=    Get Length    ${cookieslice}
-        Should Be Equal As Integers    ${foundcookieslices}    ${nbofcookieslice}
-        ${matchvid}=    Get From Dictionary    ${value['uni_config'][0]['flow_params'][0]['vlan_rule_params']}
-        ...    match_vid
-        Should Be Equal As Integers    ${matchvid}    ${reqmatchvid}
-        ${setvid}=    Get From Dictionary    ${value['uni_config'][0]['flow_params'][0]['vlan_rule_params']}
-        ...    set_vid
-        ${evalresult}=    Evaluate    2 <= ${setvid} <= 4095
-        Should Be True    ${evalresult}    msg=set_vid out of range (${setvid})!
-        Set To Dictionary    ${vlan_rules}    ${pononuuniid}    ${setvid}
-        ${oldsetvidvalid}     Set Variable If    ${prevvlanrules} is ${NONE}    False    True
-        ${prevsetvid}=    Set Variable If    ${oldsetvidvalid}    ${prevvlanrules['${pononuuniid}']}
-        Run Keyword If    ${oldsetvidvalid} and ${setvidequal}
-        ...               Should Be Equal As Integers    ${prevsetvid}    ${setvid}
-        ...    ELSE IF    ${oldsetvidvalid} and not ${setvidequal}
-        ...               Should Not Be Equal As Integers    ${prevsetvid}    ${setvid}
-    END
-    log Many   ${vlan_rules}
-    [Return]    ${vlan_rules}
-
-Get ONU Go Adapter ETCD Data
-    [Documentation]    This keyword delivers openonu-go-adapter Data stored in etcd
-    ${namespace}=    Set Variable    default
-    ${podname}=    Set Variable    etcd
-    ${stackname}=    Get Stack Name
-    ${commandget}    Catenate
-    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix --prefix service/${stackname}/openonu'
-    ${result}=    Exec Pod In Kube    ${namespace}    ${podname}    ${commandget}
-    log    ${result}
-    [Return]    ${result}
-
-Prepare ONU Go Adapter ETCD Data For Json
-    [Documentation]    This keyword prepares openonu-go-adapter Data stored in etcd for converting
-    ...                to json
-    [Arguments]    ${etcddata}
-    #prepare result for json convert
-    ${prepresult}=    Replace String    ${etcddata}   \n    ,
-    ${prepresult}=    Strip String    ${prepresult}    mode=right    characters=,
-    ${prepresult}=    Set Variable    [${prepresult}]
-    log    ${prepresult}
-    [Return]    ${prepresult}
-
-Remove Lines Containing String
-    [Documentation]    This keyword deletes all lines from given string containing passed remove string
-    [Arguments]    ${string}    ${toremove}    ${appendtoremoveline}
-    ${lines}=    Get Lines Containing String    ${string}    ${toremove}
-    ${length}=    Get Line Count    ${lines}
-    ${firstline}=    Set Variable    False
-    FOR    ${INDEX}    IN RANGE    0    ${length}
-        ${String2remove}    Get Line    ${lines}    ${INDEX}
-        ${String2remove}    Set Variable    ${String2remove}${appendtoremoveline}
-        ${string}=    Remove String    ${string}    ${String2remove}
-    END
-    log    ${string}
-    [Return]    ${string}
-
-Read Pon Onu Uni String
-    [Documentation]    This keyword builds a thre digit string using Pon, Onu and Uni value of given tp-path taken
-    ...                taken from etcd data of onu go adapter
-    [Arguments]    ${tp_path}
-    ${tppathlines}=   Replace String    ${tp_path}    /    \n
-    ${pon}=    Get Value Of Tp Path Element    ${tppathlines}    pon
-    ${onu}=    Get Value Of Tp Path Element    ${tppathlines}    onu
-    ${uni}=    Get Value Of Tp Path Element    ${tppathlines}    uni
-    ${valuesid}=    Set Variable   ${pon}/${onu}/${uni}
-    log    ${valuesid}
-    [Return]    ${valuesid}
-
-Get Value Of Tp Path Element
-    [Documentation]    This keyword delivers numeric value of given tp path element.
-    [Arguments]    ${tp_path_lines}    ${element}
-    ${value}=    Get Lines Containing String    ${tp_path_lines}    ${element}-\{
-    ${value}=    Remove String    ${value}    ${element}-\{
-    ${value}=    Remove String    ${value}    \}
-    log    ${value}
-    [Return]    ${value}
-
-Validate Onu Id
-    [Documentation]    This keyword validates ONU Id of passed etcd data.
-    [Arguments]    ${value}
-    # TODO: The TP ID is hardcoded to 64 below. It is fine when testing single-tcont workflow.
-    # When testing multi-tcont this may need some adjustment.
-    ${tp_path}=    Get From Dictionary    ${value['uni_config'][0]['PersTpPathMap']}    64
-    ${tppathlines}=   Replace String    ${tp_path}    /    \n
-    ${onu}=    Get Value Of Tp Path Element    ${tppathlines}    onu
-    ${onu_id}=    Get From Dictionary    ${value}    onu_id
-    Should Be Equal As Integers    ${onu}    ${onu_id}
-    ...    msg=Onu-Id (${onu_id}) does not match onu (${onu}) from tp_path in etcd data!
-    Should Be True    ${onu_id}>=1
-
-Validate Uni Id
-    [Documentation]    This keyword validates UNI Id of passed etcd data.
-    [Arguments]    ${value}
-    # TODO: The TP ID is hardcoded to 64 below. It is fine when testing single-tcont workflow.
-    # When testing multi-tcont this may need some adjustment.
-    ${tp_path}=    Get From Dictionary    ${value['uni_config'][0]['PersTpPathMap']}    64
-    ${tppathlines}=   Replace String    ${tp_path}    /    \n
-    ${uni}=    Get Value Of Tp Path Element    ${tppathlines}    uni
-    ${uni_id}=    Get From Dictionary    ${value['uni_config'][0]}    uni_id
-    Should Be Equal As Integers    ${uni}    ${uni_id}
-    ...    msg=Uni-Id (${uni_id}) does not match onu (${uni}) from tp_path in etcd data!
-
-Get Stack Name
-    [Documentation]    This keyword delivers the stack name read from environment variable NAME if present.
-    ${env_name}=    Get Environment Variable    NAME    default=${defaultstackname}
-    # while Get Environment Variable does not work correctly, a manual correction follows
-    ${env_name}=    Set Variable If    "${env_name}"=="${EMPTY}"    ${defaultstackname}    ${env_name}
-    [Return]    ${env_name}
-
-Wait for Ports in ONOS for all OLTs
-    [Documentation]    Waits untill a certain number of ports are enabled in all ONOS
-    [Arguments]    ${onos_ssh_connection}    ${count}    ${filter}    ${max_wait_time}=10m
-    FOR    ${J}    IN RANGE    0    ${num_olts}
-        ${olt_serial_number}=    Set Variable    ${list_olts}[${J}][sn]
-        ${onu_count}=    Set Variable    ${list_olts}[${J}][onucount]
-        ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS
-        ...    ${olt_serial_number}
-        Set Global Variable    ${of_id}
-        Wait for Ports in ONOS    ${onos_ssh_connection}    ${count}    ${of_id}    BBSM    ${max_wait_time}
-    END
-
-Map State
-    [Documentation]    This keyword converts the passed numeric value or name of a onu state to its state values.
-    [Arguments]    ${state}
-    # create state lists with corresponding return values
-    #                             ADMIN-STATE OPER-STATUS   CONNECT-STATUS ONU-STATE (number/name)
-    ${state1}     Create List      ENABLED     ACTIVATING    REACHABLE       1    activating-onu
-    ${state2}     Create List      ENABLED     ACTIVATING    REACHABLE       2    starting-openomci
-    ${state3}     Create List      ENABLED     ACTIVATING    REACHABLE       3    discovery-mibsync-complete
-    ${state4}     Create List      ENABLED     ACTIVE        REACHABLE       4    initial-mib-downloaded
-    ${state5}     Create List      ENABLED     ACTIVE        REACHABLE       5    tech-profile-config-download-success
-    ${state6}     Create List      ENABLED     ACTIVE        REACHABLE       6    omci-flows-pushed
-    ${state7}     Create List      DISABLED    UNKNOWN       REACHABLE       7    omci-admin-lock
-    ${state8}     Create List      ENABLED     ACTIVE        REACHABLE       8    onu-reenabled
-    ${state9}     Create List      ENABLED     DISCOVERED    UNREACHABLE     9    stopping-openomci
-    ${state10}    Create List      ENABLED     DISCOVERED    REACHABLE      10    rebooting
-    ${state11}    Create List      ENABLED     DISCOVERED    REACHABLE      11    omci-flows-deleted
-    ${state12}    Create List      DISABLED    UNKNOWN       REACHABLE      12    tech-profile-config-delete-success
-    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_state_nb}    ${onu_state}=    Set Variable If
-    ...    '${state}'=='1' or '${state}'=='activating-onu'                          ${state1}
-    ...    '${state}'=='2' or '${state}'=='starting-openomci'                       ${state2}
-    ...    '${state}'=='3' or '${state}'=='discovery-mibsync-complete'              ${state3}
-    ...    '${state}'=='4' or '${state}'=='initial-mib-downloaded'                  ${state4}
-    ...    '${state}'=='5' or '${state}'=='tech-profile-config-download-success'    ${state5}
-    ...    '${state}'=='6' or '${state}'=='omci-flows-pushed'                       ${state6}
-    ...    '${state}'=='7' or '${state}'=='omci-admin-lock'                         ${state7}
-    ...    '${state}'=='8' or '${state}'=='onu-reenabled'                           ${state8}
-    ...    '${state}'=='9' or '${state}'=='stopping-openomci'                       ${state9}
-    ...    '${state}'=='10' or '${state}'=='rebooting'                              ${state10}
-    ...    '${state}'=='11' or '${state}'=='omci-flows-deleted'                     ${state11}
-    ...    '${state}'=='12' or '${state}'=='tech-profile-config-delete-success'     ${state12}
-    [Return]    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_state_nb}    ${onu_state}
