diff --git a/Makefile b/Makefile
index b59fda4..07abd77 100755
--- a/Makefile
+++ b/Makefile
@@ -451,7 +451,7 @@
 voltha-onu-omci-get-single-kind-dt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_DT_SINGLE_PON_FILE)
 voltha-onu-omci-get-single-kind-dt: voltha-onu-omci-get-tests
 
-# target to invoke single ONU OMCI Geta scenarios in TT workflow
+# target to invoke single ONU OMCI Get scenarios in TT workflow
 voltha-onu-omci-get-single-kind-tt: ROBOT_MISC_ARGS += -v workflow:TT
 voltha-onu-omci-get-single-kind-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_SINGLE_PON_FILE)
 voltha-onu-omci-get-single-kind-tt: voltha-onu-omci-get-tests
@@ -475,6 +475,40 @@
 voltha-onu-omci-get-tests: ROBOT_FILE := Voltha_ONUOmciGetTest.robot
 voltha-onu-omci-get-tests: openonu-go-adapter-tests
 
+# target to invoke single ONU Flows Check in ATT workflow
+voltha-onu-flows-check-single-kind-att: ROBOT_MISC_ARGS += -v workflow:ATT
+voltha-onu-flows-check-single-kind-att: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_SINGLE_PON_FILE)
+voltha-onu-flows-check-single-kind-att: voltha-onu-flows-check-tests
+
+# target to invoke single ONU Flows Check scenarios in DT workflow
+voltha-onu-flows-check-single-kind-dt: ROBOT_MISC_ARGS += -v workflow:DT -v techprofile:1T8GEM
+voltha-onu-flows-check-single-kind-dt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_DT_SINGLE_PON_FILE)
+voltha-onu-flows-check-single-kind-dt: voltha-onu-flows-check-tests
+
+# target to invoke single ONU Flows Check scenarios in TT workflow
+voltha-onu-flows-check-single-kind-tt: ROBOT_MISC_ARGS += -v workflow:TT -v techprofile:1T4GEM
+voltha-onu-flows-check-single-kind-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_SINGLE_PON_FILE)
+voltha-onu-flows-check-single-kind-tt: voltha-onu-flows-check-tests
+
+# target to invoke multiple OLTs Flows Check scenarios in ATT workflow
+voltha-onu-flows-check-multiolt-kind-att: ROBOT_MISC_ARGS += -v workflow:ATT
+voltha-onu-flows-check-multiolt-kind-att: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_MULTIPLE_OLT_FILE)
+voltha-onu-flows-check-multiolt-kind-att: voltha-onu-flows-check-tests
+
+# target to invoke multiple OLTs Flows Check scenarios in DT workflow
+voltha-onu-flows-check-multiolt-kind-dt: ROBOT_MISC_ARGS += -v workflow:DT -v techprofile:1T8GEM
+voltha-onu-flows-check-multiolt-kind-dt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_DT_MULTIPLE_OLT_FILE)
+voltha-onu-flows-check-multiolt-kind-dt: voltha-onu-flows-check-tests
+
+# target to invoke multiple OLTs Flows Check scenarios in TT workflow
+voltha-onu-flows-check-multiolt-kind-tt: ROBOT_MISC_ARGS += -v workflow:TT -v techprofile:1T4GEM
+voltha-onu-flows-check-multiolt-kind-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_MULTIPLE_OLT_FILE)
+voltha-onu-flows-check-multiolt-kind-tt: voltha-onu-flows-check-tests
+
+voltha-onu-flows-check-tests: ROBOT_MISC_ARGS += -i functionalOnuGo -e PowerSwitch $(ROBOT_DEBUG_LOG_OPT)
+voltha-onu-flows-check-tests: ROBOT_FILE := Voltha_ONUFlowChecks.robot
+voltha-onu-flows-check-tests: openonu-go-adapter-tests
+
 # ONOS Apps to test for Software Upgrade need to be passed in the 'onos_apps_under_test' variable in format:
 # <app-name>,<version>,<oar-url>*<app-name>,<version>,<oar-url>*
 onos-app-upgrade-test: ROBOT_MISC_ARGS +=  -e notready -i functional
diff --git a/libraries/onu_utilities.robot b/libraries/onu_utilities.robot
index 903b656..ff71952 100755
--- a/libraries/onu_utilities.robot
+++ b/libraries/onu_utilities.robot
@@ -233,6 +233,57 @@
     ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/64'
     Exec Pod In Kube    ${namespace}    ${podname}    ${commandget}
 
+Do Onu Subscriber Add Per OLT
+    [Documentation]    Add Subscriber per OLT
+    [Arguments]    ${of_id}    ${olt_serial_number}    ${print2console}=False
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        ${onu_port}=    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2
+        ...    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
+        ...    volt-add-subscriber-access ${of_id} ${onu_port}
+        Run Keyword If    ${print2console}    Log    \r\n[${I}] volt-add-subscriber-access ${of_id} ${onu_port}.
+        ...   console=yes
+    END
+
+Do Onu Flow Check Per OLT
+    [Documentation]    Checks all ONU flows show up in ONOS and Voltha
+    [Arguments]    ${of_id}    ${nni_port}    ${olt_serial_number}    ${print2console}=False
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        ${onu_port}=    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
+        # Verify subscriber access flows are added for the ONU port
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Verify Subscriber Access Flows Added For ONU    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}
+        ...    ${onu_port}    ${nni_port}    ${src['c_tag']}    ${src['s_tag']}
+        ${logoutput}    Catenate    \r\n[${I}] Verify Subscriber Access Flows Added For
+        ...    ONU ${of_id}    ${onu_port}    ${src['c_tag']}    ${src['s_tag']}.
+        Run Keyword If    ${print2console}    Log    ${logoutput}    console=yes
+    END
+
+Do Onu Subscriber Remove Per OLT
+    [Documentation]    Removes per OLT subscribers in ONOS and Voltha
+    [Arguments]    ${of_id}    ${olt_serial_number}    ${print2console}=False
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${dst}=    Set Variable    ${hosts.dst[${I}]}
+        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        ${onu_port}=    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2
+        ...    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
+        ...    volt-remove-subscriber-access ${of_id} ${onu_port}
+        Run Keyword If    ${print2console}    Log    \r\n[${I}] volt-remove-subscriber-access ${of_id} ${onu_port}.
+        ...    console=yes
+    END
+
 Validate Resource Instances Used Gem Ports
     [Documentation]    This keyword validates resource instances data stored in etcd.
     ...                It checks checks the number of gemport-ids which has matched with used Tech Profile
diff --git a/tests/data/bbsim-kind-2OLTx2ONUx2PON-dt.yaml b/tests/data/bbsim-kind-2OLTx2ONUx2PON-dt.yaml
index 67a82d8..287f435 100755
--- a/tests/data/bbsim-kind-2OLTx2ONUx2PON-dt.yaml
+++ b/tests/data/bbsim-kind-2OLTx2ONUx2PON-dt.yaml
@@ -65,26 +65,26 @@
       uni_id: '1'
     -
       onu: 'BBSM000b0001'
-      c_tag: '4097'
+      c_tag: '4096'
       s_tag: '900'
       olt: 'BBSIM_OLT_11'
       uni_id: '1'
     -
       onu: 'BBSM000b0002'
-      c_tag: '4097'
+      c_tag: '4096'
       s_tag: '904'
       olt: 'BBSIM_OLT_11'
       uni_id: '1'
     -
       onu: 'BBSM000b0101'
       olt: 'BBSIM_OLT_11'
-      c_tag: '4097'
+      c_tag: '4096'
       s_tag: '908'
       uni_id: '1'
     -
       onu: 'BBSM000b0102'
       olt: 'BBSIM_OLT_11'
-      c_tag: '4097'
+      c_tag: '4096'
       s_tag: '912'
       uni_id: '1'
   dst:
diff --git a/tests/openonu-go-adapter/Voltha_ONUFlowChecks.robot b/tests/openonu-go-adapter/Voltha_ONUFlowChecks.robot
new file mode 100755
index 0000000..0650198
--- /dev/null
+++ b/tests/openonu-go-adapter/Voltha_ONUFlowChecks.robot
@@ -0,0 +1,235 @@
+# Copyright 2021 - 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.
+# FIXME Can we use the same test against BBSim and Hardware?
+
+*** Settings ***
+Documentation     Test of open ONU go adapter Flows
+Suite Setup       Setup Suite
+Test Setup        Setup
+Test Teardown     Teardown
+Suite Teardown    Teardown Suite
+Library           Collections
+Library           String
+Library           OperatingSystem
+Library           XML
+Library           RequestsLibrary
+Library           ../../libraries/DependencyLibrary.py
+Resource          ../../libraries/onos.robot
+Resource          ../../libraries/voltctl.robot
+Resource          ../../libraries/voltha.robot
+Resource          ../../libraries/utils.robot
+Resource          ../../libraries/k8s.robot
+Resource          ../../variables/variables.robot
+Resource          ../../libraries/power_switch.robot
+Resource          ../../libraries/onu_utilities.robot
+
+*** Variables ***
+${namespace}      voltha
+${timeout}        60s
+${of_id}          0
+${logical_id}     0
+${has_dataplane}    True
+${external_libs}    True
+${teardown_device}    True
+${scripts}        ../../scripts
+# Per-test logging on failure is turned off by default; set this variable to enable
+${container_log_dir}    ${None}
+# determines the environment workflow: DT, TT or ATT (default)
+# example: -v workflow:DT
+${workflow}    ATT
+# logging flag to enable Collect Logs, can be passed via the command line too
+# example: -v logging:True
+${logging}    False
+# used tech profile, can be passed via the command line too, valid values: default (=1T1GEM), 1T4GEM, 1T8GEM
+# example: -v techprofile:1T4GEM
+${techprofile}    default
+# if True execution will be paused before clean up, only use in case of manual testing, do not use in ci pipeline!
+# example: -v pausebeforecleanup:True
+${pausebeforecleanup}    False
+${data_dir}    ../data
+
+*** Test Cases ***
+Flows Test
+    [Documentation]    Validates onu vlan rules in etcd:
+    [Tags]    functionalOnuGo    FlowsTest
+    [Setup]    Start Logging    FlowsTest
+    ${onu_tags_dict}=    Collect Tags Per ONU
+    # Check and store vlan rules
+    Wait Until Keyword Succeeds    ${timeout}    2s    Run Keyword And Continue On Failure
+    ...    Validate Etcd Vlan Rules Added Subscriber    ${onu_tags_dict}    defaultkvstoreprefix=${kvstoreprefix}
+    #log flows for verification
+    ${flowsresult}=    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    flows -s
+    log     ${flowsresult}
+    FOR    ${J}    IN RANGE    0    ${num_olts}
+        ${olt_serial_number}=    Set Variable    ${list_olts}[${J}][sn]
+        ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS
+        ...    ${olt_serial_number}
+        # Remove subscriber
+        Do Onu Subscriber Remove Per OLT    ${of_id}    ${olt_serial_number}
+    END
+    #log flows for verification
+    ${flowsresult}=    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    flows -s
+    log     ${flowsresult}
+    Wait Until Keyword Succeeds    ${timeout}    2s    Run Keyword And Continue On Failure    Run Keyword And Continue On Failure
+    ...    Validate Etcd Vlan Rules Removed Subscriber   defaultkvstoreprefix=${kvstoreprefix}
+    FOR    ${J}    IN RANGE    0    ${num_olts}
+        ${olt_serial_number}=    Set Variable    ${list_olts}[${J}][sn]
+        ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS
+        ...    ${olt_serial_number}
+        Do Onu Subscriber Add Per OLT    ${of_id}    ${olt_serial_number}
+    END
+    #log flows for verification
+    ${flowsresult}=    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    flows -s
+    log     ${flowsresult}
+    Wait Until Keyword Succeeds    ${timeout}    2s    Run Keyword And Continue On Failure    Run Keyword And Continue On Failure
+    ...    Validate Etcd Vlan Rules Added Subscriber    ${onu_tags_dict}    defaultkvstoreprefix=${kvstoreprefix}
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND    Stop Logging    FlowsTest
+
+*** Keywords ***
+Setup Suite
+    [Documentation]    Set up the test suite inclusive enable device and sanity test of given workflow
+    Common Test Suite Setup
+    ${techprofile}=    Set Variable If    "${techprofile}"=="1T1GEM"    default    ${techprofile}
+    Set Suite Variable    ${techprofile}
+    Run Keyword If    "${techprofile}"=="default"   Log To Console    \nTechProfile:default (1T1GEM)
+    ...    ELSE IF    "${techprofile}"=="1T4GEM"    Set Tech Profile    1T4GEM
+    ...    ELSE IF    "${techprofile}"=="1T8GEM"    Set Tech Profile    1T8GEM
+    ...    ELSE    Fail    The TechProfile (${techprofile}) is not valid!
+    ${switch_type}=    Get Variable Value    ${web_power_switch.type}
+    Run Keyword If  "${switch_type}"!=""    Set Global Variable    ${powerswitch_type}    ${switch_type}
+    Setup
+    Run Keyword If    ${has_dataplane}    Clean Up Linux
+    Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT
+    ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT
+    ...    ELSE       Perform Sanity Test
+
+Teardown Suite
+    [Documentation]    Replaces the Suite Teardown in utils.robot.
+    ...    Cleans up and checks all ONU ports disabled in ONOS.
+    ...    Furthermore gives the possibility to pause the execution.
+    Run Keyword If    ${pausebeforecleanup}    Import Library    Dialogs
+    Run Keyword If    ${pausebeforecleanup}    Pause Execution    Press OK to continue with clean up!
+    Run Keyword If    ${pausebeforecleanup}    Log    Teardown will be continued...    console=yes
+    Run Keyword If    ${teardown_device}    Delete All Devices and Verify
+    Wait Until Keyword Succeeds    ${timeout}    1s    Validate Onu Data In Etcd    0    ${kvstoreprefix}    without_pm_data=False
+    Wait for Ports in ONOS for all OLTs      ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}  0   BBSM    ${timeout}
+    Close All ONOS SSH Connections
+    Remove Tech Profile
+
+Validate Etcd Vlan Rules Added Subscriber
+    [Documentation]    This keyword validates Vlan rules of openonu-go-adapter Data stored in etcd.
+    ...                It checks the match_vid (=4096) and set_vid when subscriber are added.
+    [Arguments]    ${onu_tags_dict}    ${reqmatchvid}=4096    ${defaultkvstoreprefix}=voltha_voltha
+    ${kvstoreprefix}=    Get Kv Store Prefix    ${defaultkvstoreprefix}
+    ${etcddata}=    Get ONU Go Adapter ETCD Data    ${kvstoreprefix}    True    True
+    #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}
+    FOR    ${INDEX}    IN RANGE    0    ${length}
+        ${value}=    Get From List    ${jsondata}    ${INDEX}
+        ${flowparams}=    Get From Dictionary    ${value['uni_config'][0]}    flow_params
+        ${onu}=    Get From Dictionary    ${value}    serial_number
+        Validate Flow Params Vlan Rules    ${flowparams}    ${onu_tags_dict}    ${onu}    ${reqmatchvid}
+    END
+
+Validate Flow Params Vlan Rules
+    [Documentation]    This keyword validates Vlan rules of openonu-go-adapter Data iterating over passed flow params.
+    ...                It checks the match_vid (=4096) and set_vid when subscriber are added.
+    [Arguments]    ${flowparams}    ${onu_tags_dict}    ${onu}    ${reqmatchvid}=4096
+    ${length}=    Get Length    ${flowparams}
+    ${nbofexpectedrules}=    Set Variable If
+    ...    "${workflow}"=="TT" and ${has_dataplane}        4
+    ...    "${workflow}"=="TT" and not ${has_dataplane}    3
+    ...    "${workflow}"=="DT" or "${workflow}"=="ATT"     1
+    Should Be Equal As Numbers    ${length}    ${nbofexpectedrules}
+    ...    msg=wrong number of vlan rules (${length} != ${nbofexpectedrules})!
+    FOR    ${INDEX}    IN RANGE    0    ${length}
+        ${value}=    Get From List    ${flowparams}    ${INDEX}
+        ${matchvid}=    Get From Dictionary    ${value['vlan_rule_params']}
+        ...    match_vid
+        Should Be Equal As Integers    ${matchvid}    ${reqmatchvid}
+        ${setvid}=    Get From Dictionary    ${value['vlan_rule_params']}
+        ...    set_vid
+        ${c_tags_list}=    Get From Dictionary    ${onu_tags_dict['${onu}']}    c_tags
+        ${tagindex}=    Get Index From List    ${c_tags_list}   ${setvid}
+        Should Not Be Equal As Integers    ${tagindex}    -1    msg=set_vid out of range (${setvid})!
+    END
+
+Validate Etcd Vlan Rules Removed Subscriber
+    [Documentation]    This keyword validates Vlan rules of openonu-go-adapter Data stored in etcd.
+    ...                It checks the match_vid (=4096) and set_vid when subscriber are removed.
+    [Arguments]    ${reqmatchvid}=4096    ${defaultkvstoreprefix}=voltha_voltha
+    ${kvstoreprefix}=    Get Kv Store Prefix    ${defaultkvstoreprefix}
+    ${etcddata}=    Get ONU Go Adapter ETCD Data    ${kvstoreprefix}        True    True
+    #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}
+        @{result_values}=    Run Keyword And Ignore Error
+        ...    Get From Dictionary    ${value['uni_config'][0]['flow_params'][0]['vlan_rule_params']}    match_vid
+        ${result}=       Set Variable    @{result_values}[0]
+        ${matchvid}=     Set Variable    @{result_values}[1]
+        Run Keyword If    "${workflow}"=="ATT"    Should Be Equal As Integers    ${matchvid}    ${reqmatchvid}
+        ...    ELSE       Should Be Equal As Strings    ${result}    FAIL
+        @{result_values}=    Run Keyword And Ignore Error
+        ...    Get From Dictionary    ${value['uni_config'][0]['flow_params'][0]['vlan_rule_params']}   set_vid
+        ${result}=       Set Variable    @{result_values}[0]
+        ${setvid}=       Set Variable    @{result_values}[1]
+        ${evalresult}=    Run Keyword If    "${workflow}"=="ATT"    Evaluate    ${setvid} == 4091
+        ...               ELSE              Evaluate    "${result}" == "FAIL"
+        Should Be True    ${evalresult}    msg=set_vid out of range (${setvid})!
+    END
+
+Collect Tags Per ONU
+    [Documentation]    This keyword collects the s- and c-tags per ONU.
+    ${onu_tags_dict}=     Create Dictionary
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${onu_tags_dict}=    Run Keyword If  '${src['onu']}' in ${onu_tags_dict}   Update ONU Tags Dict    ${onu_tags_dict}
+        ...                                  ${src['onu']}    ${src['c_tag']}    ${src['s_tag']}
+        ...    ELSE    Append To ONU Tags Dict    ${onu_tags_dict}
+        ...                                  ${src['onu']}    ${src['c_tag']}    ${src['s_tag']}
+    END
+    log    ${onu_tags_dict}
+    [return]    ${onu_tags_dict}
+
+Update ONU Tags Dict
+    [Documentation]    This keyword update passed dictionary with the s- and c-tags for passed ONU.
+    [Arguments]    ${onu_tags_dict}    ${onu}    ${c_tag}    ${s_tag}
+    ${c_tag}=    Convert To Integer    ${c_tag}
+    ${s_tag}=    Convert To Integer    ${s_tag}
+    ${c_tags_list}=    Get From Dictionary    ${onu_tags_dict['${onu}']}    c_tags
+    Append To List    ${c_tags_list}    ${c_tag}
+    ${s_tags_list}=    Get From Dictionary    ${onu_tags_dict['${onu}']}    s_tags
+    Append To List    ${s_tags_list}    ${s_tag}
+    Set To Dictionary    ${onu_tags_dict['${onu}']}    c_tags    ${c_tags_list}    s_tags    ${s_tags_list}
+    [return]    ${onu_tags_dict}
+
+Append To ONU Tags Dict
+    [Documentation]    This keyword append the s- and c-tags of passed ONU to passed dictionary .
+    [Arguments]    ${onu_tags_dict}    ${onu}    ${c_tag}    ${s_tag}
+    ${c_tag}=    Convert To Integer    ${c_tag}
+    ${s_tag}=    Convert To Integer    ${s_tag}
+    ${c_tags_list}=    Create List    ${c_tag}
+    ${s_tags_list}=    Create List    ${s_tag}
+    ${onu_dict}=    Create Dictionary    c_tags    ${c_tags_list}    s_tags    ${s_tags_list}
+    Set To Dictionary    ${onu_tags_dict}    ${onu}    ${onu_dict}
+    [return]    ${onu_tags_dict}
diff --git a/tests/openonu-go-adapter/Voltha_ONUStateTests.robot b/tests/openonu-go-adapter/Voltha_ONUStateTests.robot
index 4f653de..53cffea 100755
--- a/tests/openonu-go-adapter/Voltha_ONUStateTests.robot
+++ b/tests/openonu-go-adapter/Voltha_ONUStateTests.robot
@@ -327,16 +327,12 @@
     ...    defaultkvstoreprefix=${kvstoreprefix}
     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}
-        # Verify Default Meter in ONOS (valid only for ATT)
-        Do Onu Subscriber Add Per OLT    ${of_id}    ${olt_serial_number}   ${onu_count}
+        Do Onu Subscriber Add Per OLT    ${of_id}    ${olt_serial_number}   ${print2console}
     END
     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}
@@ -344,7 +340,7 @@
         ...    Get NNI Port in ONOS    ${of_id}
         Set Global Variable    ${nni_port}
         # Verify Default Meter in ONOS (valid only for ATT)
-        Do Onu Flow Check Per OLT    ${of_id}    ${nni_port}    ${olt_serial_number}   ${onu_count}
+        Do Onu Flow Check Per OLT    ${of_id}    ${nni_port}    ${olt_serial_number}   ${print2console}
     END
     #log flows for verification
     ${flowsresult}=    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    flows -s
@@ -356,15 +352,9 @@
     ...    prevvlanrules=${firstvlanrules}    defaultkvstoreprefix=${kvstoreprefix}
     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}
-        ${nni_port}=    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
-        ...    Get NNI Port in ONOS    ${of_id}
-        Set Global Variable    ${nni_port}
-        # Verify Default Meter in ONOS (valid only for ATT)
-        Do Onu Subscriber Remove Per OLT    ${of_id}    ${nni_port}    ${olt_serial_number}   ${onu_count}
+        Do Onu Subscriber Remove Per OLT    ${of_id}    ${olt_serial_number}   ${print2console}
     END
     #check  for previous state is kept (normally omci-flows-pushed)
     Sleep    10s
@@ -374,57 +364,6 @@
     Run Keyword And Continue On Failure    Validate Vlan Rules In Etcd    prevvlanrules=${firstvlanrules}
     ...                                    setvidequal=True    defaultkvstoreprefix=${kvstoreprefix}
 
-Do Onu Subscriber Add Per OLT
-    [Documentation]    Add Subscriber per OLT
-    [Arguments]    ${of_id}    ${olt_serial_number}    ${num_onus}
-    FOR    ${I}    IN RANGE    0    ${num_all_onus}
-        ${src}=    Set Variable    ${hosts.src[${I}]}
-        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
-        ${onu_port}=    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
-        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
-        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2
-        ...    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
-        ...    volt-add-subscriber-access ${of_id} ${onu_port}
-        Run Keyword If    ${print2console}    Log    \r\n[${I}] volt-add-subscriber-access ${of_id} ${onu_port}.
-        ...   console=yes
-    END
-
-Do Onu Flow Check Per OLT
-    [Documentation]    Checks all ONU flows show up in ONOS and Voltha
-    [Arguments]    ${of_id}    ${nni_port}    ${olt_serial_number}    ${num_onus}
-    FOR    ${I}    IN RANGE    0    ${num_all_onus}
-        ${src}=    Set Variable    ${hosts.src[${I}]}
-        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
-        ${onu_port}=    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
-        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
-        # Verify subscriber access flows are added for the ONU port
-        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
-        ...    Verify Subscriber Access Flows Added For ONU    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}
-        ...    ${onu_port}    ${nni_port}    ${src['c_tag']}    ${src['s_tag']}
-        ${logoutput}    Catenate    \r\n[${I}] Verify Subscriber Access Flows Added For
-        ...    ONU ${of_id}    ${onu_port}    ${src['c_tag']}    ${src['s_tag']}.
-        Run Keyword If    ${print2console}    Log    ${logoutput}    console=yes
-    END
-
-Do Onu Subscriber Remove Per OLT
-    [Documentation]    Removes per OLT subscribers in ONOS and Voltha
-    [Arguments]    ${of_id}    ${nni_port}    ${olt_serial_number}    ${num_onus}
-    FOR    ${I}    IN RANGE    0    ${num_all_onus}
-        ${src}=    Set Variable    ${hosts.src[${I}]}
-        ${dst}=    Set Variable    ${hosts.dst[${I}]}
-        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
-        ${onu_port}=    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
-        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
-        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2
-        ...    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
-        ...    volt-remove-subscriber-access ${of_id} ${onu_port}
-        Run Keyword If    ${print2console}    Log    \r\n[${I}] volt-remove-subscriber-access ${of_id} ${onu_port}.
-        ...    console=yes
-    END
-
 Do Check Tech Profile
     [Documentation]    This keyword checks the loaded TechProfile
     ${namespace}=    Set Variable    default
