diff --git a/.gitignore b/.gitignore
index c3e857d..029341d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -81,6 +81,7 @@
 # antlion configuration files
 /*.json
 /*.yaml
+/config/
 
 # antlion runtime files
 /logs
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 54f6914..a9c7f67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,9 +10,61 @@
 
 ## [Unreleased]
 
-Nothing yet!
+### Added
 
-[unreleased]: https://fuchsia.googlesource.com/antlion/+/refs/tags/v0.1.0..refs/heads/main
+### Changed
+
+### Removed
+
+### Fixed
+
+[unreleased]: https://fuchsia.googlesource.com/antlion/+/refs/tags/v0.2.0..refs/heads/main
+
+## [0.2.0] - 2022-01-03
+
+### Added
+
+- Download radvd logs from AP for debugging IPv6 address allocation
+- Optional `wlan_features` config field to `FuchsiaDevice` for declaring which
+WLAN features the device supports, such as BSS Transition Management
+
+### Changed
+
+- All path config options in `FuchsiaDevice` expand the home directory (`~`) and
+environmental variables
+	- Used by `ssh_priv_key`, `authorized_file_loc`, and `ffx_binary_path` for
+	sensible defaults using `$FUCHSIA_DIR`
+- Running tests works out of the box without specifying `--testpaths`
+	- Moved `tests` and `unit_tests` to the `antlion` package, enabling
+	straight-forward packaging of tests.
+	- Merged `antlion` and `antlion_contrib` packages
+- Converted several required dependencies to optional dependencies:
+  - `bokeh` is only needed for producing HTML graphing. If this feature is
+  desired, install antlion with the bokeh option: `pip install ".[bokeh]"`
+  - `usbinfo` and `psutil` are not needed when a static IP address is assigned
+  to the Fuchsia DUT. If assigning a static IP address is not an optional,
+  install antlion with the mdns option: `pip install ".[mdns]"`
+
+### Removed
+
+- [BREAKING CHANGE] Dependencies for Python versions older than 3.8. Please
+upgrade your system to a newer version of Python to run antlion tests.
+- `ssh_config` from `FuchsiaDevice` config. SSH configs are generated to provide
+a reproducible connection method and ease initial setup.
+
+### Fixed
+
+- Failure to acquire IPv6 address in `WlanRebootTest` ([bug](http://b/256009189))
+- Typo in `ChannelSweepTest` preventing use of iPerf ([@patricklu])
+- "Country code never updated" error affecting all Fuchsia ToT builds
+([@karlward], [bug](https://fxbug.dev/116500))
+- Parsing new stderr format from `ffx component destroy` ([@karlward],
+[bug](https://fxbug.dev/116544))
+- "Socket operation on non-socket" error during initialization of ffx on MacOS
+([@karlward], [bug](https://fxbug.dev/116626))
+- Python 3.8 support for IPv6 scope IDs ([bug](http://b/261746355))
+
+[0.2.0]: https://fuchsia.googlesource.com/antlion/+/refs/tags/v0.1.0..refs/tags/v0.2.0
 
 ## [0.1.0] - 2022-11-28
 
@@ -50,3 +102,5 @@
 [src-layout]: https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#src-layout
 
 [@sakuma]: https://fuchsia-review.git.corp.google.com/q/owner:sakuma%2540google.com
+[@patricklu]: https://fuchsia-review.git.corp.google.com/q/owner:patricklu%2540google.com
+[@karlward]: https://fuchsia-review.git.corp.google.com/q/owner:karlward%2540google.com
diff --git a/MANIFEST.in b/MANIFEST.in
index 8918387..a8ad1bb 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,6 +1,4 @@
 include setup.py README.md
 recursive-include src/antlion *
-recursive-include src/antlion_contrib *
-recursive-include tests *
 global-exclude .DS_Store
 global-exclude *.pyc
diff --git a/README.md b/README.md
index 374b5fa..be529cf 100644
--- a/README.md
+++ b/README.md
@@ -21,31 +21,29 @@
    git clone https://fuchsia.googlesource.com/antlion
    ```
 
-2. Install dependencies
+2. Install dependencies using [venv](https://docs.python.org/3/library/venv.html#how-venvs-work)
 
    ```sh
    cd antlion
-   python3 -m venv .venv
-   source .venv/bin/activate
-   pip install --editable .[dev] # development mode
+   python3 -m venv .venv  # creates a "virtual environment" in the `.venv` directory
+   source .venv/bin/activate  # activates the virtual environment. Run `deactivate` to exit it later
+   pip install --editable ".[dev,test]"
    ```
 
 3. Write the sample config and update the Fuchsia controller to match your
    development environment
 
    ```sh
-   cat <<EOF > config.json
+   mkdir -p config
+   cat <<EOF > config/simple.json
    {
       "testbed": [{
          "name": "simple_testbed",
          "FuchsiaDevice": [{
-            "ip": "fuchsia-00e0-4c01-04df",
-            "ssh_config": "/home/fuchsia/out/default/ssh-keys/ssh_config",
-            "ffx_binary_path": "/home/fuchsia/out/default/host_x64/ffx"
+            "ip": "fuchsia-00e0-4c01-04df"
          }]
       }],
-      "logpath": "logs",
-      "testpaths": [ "tests" ]
+      "logpath": "logs"
    }
    EOF
    ```
@@ -53,7 +51,7 @@
 4. Run the sanity test
 
    ```sh
-   antlion -c config.json -tc Sl4fSanityTest
+   antlion -c config/simple.json -tc Sl4fSanityTest
    ```
 
 See `antlion -h` for more full usage.
@@ -67,8 +65,9 @@
 request.
 
 1. Create a feature branch (`git checkout -b feature/amazing-feature`)
-2. Commit changes (`git commit -m 'Add some amazing feature'`)
-3. Upload CL (`git push origin HEAD:refs/for/main`)
+2. Document your change in `CHANGELOG.md`
+3. Commit changes (`git commit -m 'Add some amazing feature'`)
+4. Upload CL (`git push origin HEAD:refs/for/main`)
 
 > A public bug tracker is not (yet) available.
 
diff --git a/pyproject.toml b/pyproject.toml
index bb12e16..c0fa915 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,32 +1,23 @@
 # Reference at https://peps.python.org/pep-0621/
 
 [build-system]
-requires = ["setuptools"]
+requires = ["setuptools", "setuptools-scm[toml]"]
 build-backend = "setuptools.build_meta"
 
 [project]
 name = "antlion"
-version = "0.1"
-description = "Android Comms Test Suite"
-readme = "README.md"
+description = "Host-driven, hardware-agnostic Fuchsia connectivity tests"
 requires-python = ">=3.8"
 license = {text = "Apache-2.0"}
+dynamic = ["version"]
+readme = "README.md"
 dependencies = [
-	"backoff",
-    "future>=0.16.0", # Future needs to have a newer version that contains urllib.
     "mobly==1.12.0",
     "pyyaml>=5.1",
-    "retry",
+    "tenacity~=8.0",
 ]
 
 [project.optional-dependencies]
-# Required for running unit tests
-test = [
-    # Latest version of mock (4.0.0b) causes a number of compatibility issues with ACTS unit tests
-    # b/148695846, b/148814743
-    "mock==3.0.5",
-	"pytest",
-]
 # Required to support development tools
 dev = [
     "shiv",    # packaging python
@@ -34,47 +25,20 @@
     "vulture", # finds unused code
     "yapf",    # code formatting
 ]
-digital_loggers_pdu = ['dlipower']
-bluetooth = ['soundfile']
-bokeh = [
-	'bokeh; python_version>="3.8"',
-	'bokeh<2.5; python_version>="3.7" and python_version<"3.8"',
-	'bokeh<2.4; python_version>="3.6" and python_version<"3.7"',
-	'bokeh<1.5; python_version>="3" and python_version<"3.6"',
-]
+digital_loggers_pdu = ["dlipower"]
+bluetooth = ["soundfile"]
+html_graphing = ["bokeh"]
+flash = ["usbinfo"]
+mdns = ["psutil", "zeroconf"]
 android = [
-    "requests",
     "Monsoon",
+    "numpy",
     "paramiko[ed25519]",
     "pylibftdi",
     "pyserial",
+    "requests",
     "scapy",
-
-    'scipy; python_version>="3.8"',
-	'scipy<1.8; python_version>="3.7" and python_version<"3.8"',
-	'scipy<1.6; python_version>="3.6" and python_version<"3.7"',
-	'scipy<1.5; python_version>="3" and python_version<"3.6"',
-
-    'numpy; python_version>="3.8"',
-	'numpy<1.22; python_version>="3.7" and python_version<"3.8"',
-	'numpy<1.20; python_version>="3.6" and python_version<"3.7"',
-	'numpy<1.19; python_version>="3" and python_version<"3.6"',
-]
-fuchsia = [
-    "usbinfo",  # flash
-    "zeroconf", # mdns
-]
-old_python = [
-	'typing_extensions==4.1.1; python_version>="3.6" and python_version<"3.7"',
-	'typing_extensions<4.0.0; python_version>="3" and python_version<"3.6"',
-
-	'dataclasses==0.8; python_version=="3.6"',
-
-	'enum34; python_version<"3"',
-	'statistics; python_version<"3"',
-	'futures; python_version<"3"',
-	'py2-ipaddress; python_version<"3"',
-	'subprocess32; python_version<"3"',
+    "scipy",
 ]
 
 [project.scripts]
@@ -85,27 +49,25 @@
 
 [tool.autoflake]
 imports = [
-    "antlion",
-	"backoff",
-	"dataclasses",
-	"numpy",
-	"protobuf",
-	"scipy",
     "Monsoon",
+    "antlion",
+    "dataclasses",
     "dlipower",
-    "future",
     "mobly",
     "mock",
+    "numpy",
     "paramiko",
+    "protobuf",
     "pylibftdi",
     "requests",
-    "retry",
     "scapy",
+    "scipy",
+    "tenacity",
     "usbinfo",
     "zeroconf",
 ]
 
 [tools.vulture]
-paths = ["src", "tests"]
+paths = ["src"]
 sort_by_size = true
 min_confidence = 80
diff --git a/setup.py b/setup.py
index db0526f..30f198d 100644
--- a/setup.py
+++ b/setup.py
@@ -17,52 +17,36 @@
 from setuptools import setup, find_packages
 
 install_requires = [
-    "backoff",
-    "future>=0.16.0",  # Future needs to have a newer version that contains urllib.
     "mobly==1.12.0",
     "pyyaml>=5.1",
-    "retry",
-
-	'bokeh; python_version>="3.8"',
-	'bokeh<2.5; python_version>="3.7" and python_version<"3.8"',
-	'bokeh<2.4; python_version>="3.6" and python_version<"3.7"',
-	'bokeh<1.5; python_version>="3" and python_version<"3.6"',
-
-	# Android
-    "requests",
-    "Monsoon",
-    "paramiko[ed25519]",
-    "pylibftdi",
-    "pyserial",
-    "scapy",
-
-    'scipy; python_version>="3.8"',
-	'scipy<1.8; python_version>="3.7" and python_version<"3.8"',
-	'scipy<1.6; python_version>="3.6" and python_version<"3.7"',
-	'scipy<1.5; python_version>="3" and python_version<"3.6"',
-
-    'numpy; python_version>="3.8"',
-	'numpy<1.22; python_version>="3.7" and python_version<"3.8"',
-	'numpy<1.20; python_version>="3.6" and python_version<"3.7"',
-	'numpy<1.19; python_version>="3" and python_version<"3.6"',
-
-	# Fuchsia
-    "usbinfo",  # flash
-    "zeroconf", # mdns
+    "tenacity~=8.0",
 ]
 
 setup(name='antlion',
-      version='0.1',
-      description='On-device Fuchsia connectivity testing',
+      version='0.2.0',
+      description = "Host-driven, hardware-agnostic Fuchsia connectivity tests",
       license='Apache-2.0',
       packages=find_packages(
-		where='src',
-	  ),
-	  package_dir={"": "src"},
+          where='src',
+      ),
+      package_dir={"": "src"},
       include_package_data=True,
-      tests_require=['pytest'],
+      tests_require=[],
       install_requires=install_requires,
       extras_require={
-          'dev': ['shiv', 'yapf', 'toml'],
+          'html_graphing': ['bokeh'],
+          'dev': ['shiv', 'toml', 'yapf'],
           'digital_loggers_pdu': ['dlipower'],
+          'flash': ['usbinfo'],
+          'mdns': ['psutil', 'zeroconf'],
+          'android': [
+              'Monsoon',
+              'numpy',
+              'paramiko[ed25519]',
+              'pylibftdi',
+              'pyserial',
+              'requests',
+              'scapy',
+              'scipy',
+          ],
       })
diff --git a/src/antlion/bin/act.py b/src/antlion/bin/act.py
index c670228..81d0452 100755
--- a/src/antlion/bin/act.py
+++ b/src/antlion/bin/act.py
@@ -20,7 +20,6 @@
 import signal
 import sys
 import traceback
-from builtins import str
 
 from mobly import config_parser as mobly_config_parser
 
@@ -208,9 +207,12 @@
         testpath_key = keys.Config.key_test_paths.value
         if (testpath_key not in test_run_config.controller_configs
                 or test_run_config.controller_configs[testpath_key] is None):
-            test_run_config.controller_configs[testpath_key] = utils.abs_path(
-                utils.os.path.join(os.path.dirname(__file__),
-                                   '../../../../acts_tests/tests/'))
+            test_run_config.controller_configs[testpath_key] = [
+                os.path.join(os.path.dirname(__file__), '../tests/'),
+            ]
+
+        for path in test_run_config.controller_configs[testpath_key]:
+            path = utils.abs_path(path)
 
         # TODO(markdr): Find a way to merge this with the validation done in
         # Mobly's load_test_config_file.
diff --git a/src/antlion/bin/monsoon.py b/src/antlion/bin/monsoon.py
deleted file mode 100755
index 39c9fc4..0000000
--- a/src/antlion/bin/monsoon.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright 2022 The Fuchsia Authors
-#
-# 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.
-"""Interface for a USB-connected Monsoon power meter
-(http://msoon.com/LabEquipment/PowerMonitor/).
-"""
-
-import argparse
-
-import antlion.controllers.monsoon as monsoon_controller
-
-
-def main(args):
-    """Simple command-line interface for Monsoon."""
-    if args.avg and args.avg < 0:
-        print('--avg must be greater than 0')
-        return
-
-    mon = monsoon_controller.create([int(args.serialno[0])])[0]
-
-    if args.voltage is not None:
-        mon.set_voltage(args.voltage)
-
-    if args.current is not None:
-        mon.set_max_current(args.current)
-
-    if args.status:
-        items = sorted(mon.status.items())
-        print('\n'.join(['%s: %s' % item for item in items]))
-
-    if args.usbpassthrough:
-        mon.usb(args.usbpassthrough)
-
-    if args.startcurrent is not None:
-        mon.set_max_initial_current(args.startcurrent)
-
-    if args.samples:
-        result = mon.measure_power(
-            args.samples / args.hz,
-            measure_after_seconds=args.offset,
-            hz=args.hz,
-            output_path='monsoon_output.txt')
-        print(repr(result))
-
-
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser(
-        description='This is a python utility tool to control monsoon power '
-                    'measurement boxes.')
-    parser.add_argument(
-        '--status', action='store_true', help='Print power meter status.')
-    parser.add_argument(
-        '-avg',
-        '--avg',
-        type=int,
-        default=0,
-        help='Also report average over last n data points.')
-    parser.add_argument(
-        '-v', '--voltage', type=float, help='Set output voltage (0 for off)')
-    parser.add_argument(
-        '-c', '--current', type=float, help='Set max output current.')
-    parser.add_argument(
-        '-sc',
-        '--startcurrent',
-        type=float,
-        help='Set max power-up/initial current.')
-    parser.add_argument(
-        '-usb',
-        '--usbpassthrough',
-        choices=('on', 'off', 'auto'),
-        help='USB control (on, off, auto).')
-    parser.add_argument(
-        '-sp',
-        '--samples',
-        type=int,
-        help='Collect and print this many samples')
-    parser.add_argument(
-        '-hz', '--hz', type=int, help='Sample this many times per second.')
-    parser.add_argument('-d', '--device', help='Use this /dev/ttyACM... file.')
-    parser.add_argument(
-        '-sn',
-        '--serialno',
-        type=int,
-        nargs=1,
-        required=True,
-        help='The serial number of the Monsoon to use.')
-    parser.add_argument(
-        '--offset',
-        type=int,
-        nargs='?',
-        default=0,
-        help='The number of samples to discard when calculating average.')
-    parser.add_argument(
-        '-r',
-        '--ramp',
-        action='store_true',
-        help='Gradually increase voltage to prevent tripping Monsoon '
-             'overvoltage.')
-    arguments = parser.parse_args()
-    main(arguments)
diff --git a/src/antlion/config_parser.py b/src/antlion/config_parser.py
index eff1af3..0cfb308 100755
--- a/src/antlion/config_parser.py
+++ b/src/antlion/config_parser.py
@@ -16,7 +16,6 @@
 import itertools
 import os
 import sys
-from builtins import str
 
 import mobly.config_parser as mobly_config_parser
 
diff --git a/src/antlion/controllers/access_point.py b/src/antlion/controllers/access_point.py
index a7569e9..d9116ce 100755
--- a/src/antlion/controllers/access_point.py
+++ b/src/antlion/controllers/access_point.py
@@ -18,11 +18,11 @@
 import ipaddress
 import os
 import time
-from typing import FrozenSet, Set
+
+from typing import FrozenSet, Set, TYPE_CHECKING
 
 from antlion import logger
 from antlion import utils
-
 from antlion.controllers import pdu
 from antlion.controllers.ap_lib import ap_get_interface
 from antlion.controllers.ap_lib import ap_iwconfig
@@ -31,19 +31,21 @@
 from antlion.controllers.ap_lib import dhcp_server
 from antlion.controllers.ap_lib import hostapd
 from antlion.controllers.ap_lib import hostapd_ap_preset
-from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_config
+from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import radvd
 from antlion.controllers.ap_lib import radvd_config
 from antlion.controllers.ap_lib.extended_capabilities import ExtendedCapabilities
 from antlion.controllers.ap_lib.wireless_network_management import BssTransitionManagementRequest
 from antlion.controllers.utils_lib.commands import ip
 from antlion.controllers.utils_lib.commands import route
-from antlion.controllers.utils_lib.commands import shell
 from antlion.controllers.utils_lib.ssh import connection
 from antlion.controllers.utils_lib.ssh import settings
 from antlion.libs.proc import job
 
+if TYPE_CHECKING:
+    from antlion.controllers.ap_lib.radvd import Radvd
+
 MOBLY_CONTROLLER_CONFIG_NAME = 'AccessPoint'
 ACTS_CONTROLLER_REFERENCE_NAME = 'access_points'
 _BRCTL = 'brctl'
@@ -239,7 +241,7 @@
         self._aps = dict()
         self._dhcp = None
         self._dhcp_bss = dict()
-        self._radvd = None
+        self._radvd: Radvd = None
         self.bridge = bridge_interface.BridgeInterface(self)
         self.iwconfig = ap_iwconfig.ApIwconfig(self)
 
@@ -290,7 +292,7 @@
                 self.ssh.run(BRIDGE_DEL)
 
     def start_ap(self,
-                 hostapd_config,
+                 hostapd_config: hostapd_config.HostapdConfig,
                  radvd_config=None,
                  setup_bridge=False,
                  is_nat_enabled=True,
@@ -332,6 +334,11 @@
             interface = self.wlan_5g
             subnet = self._AP_5G_SUBNET
 
+        # radvd requires the interface to have a IPv6 link-local address.
+        if radvd_config:
+            self.ssh.run(f'sysctl -w net.ipv6.conf.{interface}.disable_ipv6=0')
+            self.ssh.run(f'sysctl -w net.ipv6.conf.{interface}.forwarding=1')
+
         # In order to handle dhcp servers on any interface, the initiation of
         # the dhcp server must be done after the wlan interfaces are figured
         # out as opposed to being in __init__
@@ -362,6 +369,12 @@
         self.stop_dhcp()
         # Clear all routes to prevent old routes from interfering.
         self._route_cmd.clear_routes(net_interface=interface)
+        # Add IPv6 link-local route so packets destined to the AP will be
+        # processed by the AP. This is necessary if an iperf server is running
+        # on the AP, but not for traffic handled by the Linux networking stack
+        # such as ping.
+        if radvd_config:
+            self._route_cmd.add_route(interface, 'fe80::/64')
 
         self._dhcp_bss = dict()
         if hostapd_config.bss_lookup:
@@ -426,6 +439,8 @@
             radvd_interface = bridge_interface_name if setup_bridge else interface
             self._radvd = radvd.Radvd(self.ssh, radvd_interface)
             self._radvd.start(radvd_config)
+        else:
+            self._radvd = None
 
         bss_interfaces = [bss for bss in hostapd_config.bss_lookup]
         bss_interfaces.append(interface)
@@ -493,6 +508,20 @@
                 identifier).hostapd.pull_logs()
         return hostapd_logs
 
+    def get_radvd_logs(self):
+        """Get radvd logs for this AP object.
+
+        This allows consumers of the access point objects to validate radvd
+        behavior.
+
+        Returns:
+            A string of the radvd logs, or None is a radvd server has not been
+            started.
+        """
+        if self._radvd:
+            return self._radvd.pull_logs()
+        return None
+
     def enable_forwarding(self):
         """Enable IPv4 and IPv6 forwarding on the AP.
 
diff --git a/src/antlion/controllers/adb.py b/src/antlion/controllers/adb.py
index bb52f14..9acfa1e 100644
--- a/src/antlion/controllers/adb.py
+++ b/src/antlion/controllers/adb.py
@@ -14,8 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from builtins import str
-
 import logging
 import re
 import shlex
diff --git a/src/antlion/controllers/android_device.py b/src/antlion/controllers/android_device.py
index f8987e8..1668d82 100755
--- a/src/antlion/controllers/android_device.py
+++ b/src/antlion/controllers/android_device.py
@@ -22,8 +22,6 @@
 import shutil
 import socket
 import time
-from builtins import open
-from builtins import str
 from datetime import datetime
 
 from antlion import context
diff --git a/src/antlion/controllers/ap_lib/dhcp_server.py b/src/antlion/controllers/ap_lib/dhcp_server.py
index a1419f6..01411c6 100644
--- a/src/antlion/controllers/ap_lib/dhcp_server.py
+++ b/src/antlion/controllers/ap_lib/dhcp_server.py
@@ -13,7 +13,8 @@
 # limitations under the License.
 
 import time
-from retry import retry
+
+from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed
 
 from antlion.controllers.utils_lib.commands import shell
 from antlion import logger
@@ -62,7 +63,9 @@
     # will happening.  By adding this retry, the error appears to have gone away
     # but will still show a warning if the problem occurs.  The error seems to
     # happen more with bridge interfaces than standard interfaces.
-    @retry(exceptions=NoInterfaceError, tries=3, delay=1)
+    @retry(retry=retry_if_exception_type(NoInterfaceError),
+           stop=stop_after_attempt(3),
+           wait=wait_fixed(1))
     def start(self, config, timeout=60):
         """Starts the dhcp server.
 
diff --git a/src/antlion/controllers/buds_lib/apollo_lib.py b/src/antlion/controllers/buds_lib/apollo_lib.py
index c988f44..1a63c62 100644
--- a/src/antlion/controllers/buds_lib/apollo_lib.py
+++ b/src/antlion/controllers/buds_lib/apollo_lib.py
@@ -35,25 +35,22 @@
     To send a list of commands:
     >>> apollo.cmd(['PowOff', 'PowOn', 'VolUp', 'VolDown']
 """
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-
 import atexit
 import os
 import re
 import subprocess
 import time
+from logging import Logger
 
 import serial
+from tenacity import retry, stop_after_attempt, wait_exponential
+
 from antlion.controllers.buds_lib import tako_trace_logger
 from antlion.controllers.buds_lib import logserial
 from antlion.controllers.buds_lib.b29_lib import B29Device
 from antlion.controllers.buds_lib.dev_utils import apollo_log_decoder
 from antlion.controllers.buds_lib.dev_utils import apollo_log_regex
 from antlion.controllers.buds_lib.dev_utils import apollo_sink_events
-from logging import Logger
-from retry import retry
 
 logging = tako_trace_logger.TakoTraceLogger(Logger('apollo'))
 
@@ -566,7 +563,8 @@
         raise DeviceError('Cannot reconnect to %s with %d attempts.',
                           self.commander_port, iterations)
 
-    @retry(Exception, tries=4, delay=1, backoff=2)
+    @retry(stop=stop_after_attempt(4),
+           wait=wait_exponential())
     def wait_for_commander(self):
         """Wait for commander to function.
 
diff --git a/src/antlion/controllers/buds_lib/logserial.py b/src/antlion/controllers/buds_lib/logserial.py
index de270b5..7b71f8d 100644
--- a/src/antlion/controllers/buds_lib/logserial.py
+++ b/src/antlion/controllers/buds_lib/logserial.py
@@ -258,7 +258,6 @@
         alive = self.monitor_port.port_exists(port=self.connection_handle.port)
         return alive
 
-    # @retry(Exception, tries=RETRIES, delay=1, backoff=2)
     def open(self):
         """Will open the connection with the current port settings."""
         while self.connection_handle.isOpen():
diff --git a/src/antlion/controllers/fuchsia_device.py b/src/antlion/controllers/fuchsia_device.py
index 92c528e..c0d62c7 100644
--- a/src/antlion/controllers/fuchsia_device.py
+++ b/src/antlion/controllers/fuchsia_device.py
@@ -14,12 +14,13 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from typing import Optional
+from typing import Optional, List
 import json
 import logging
 import os
 import re
 import subprocess
+import textwrap
 import time
 
 from antlion import context
@@ -27,23 +28,20 @@
 from antlion import signals
 from antlion import utils
 from antlion.controllers import pdu
-from antlion.libs.proc import job
-from antlion.utils import get_fuchsia_mdns_ipv6_address, get_interface_ip_addresses
-
 from antlion.controllers.fuchsia_lib.ffx import FFX
-from antlion.controllers.fuchsia_lib.sl4f import SL4F
 from antlion.controllers.fuchsia_lib.lib_controllers.netstack_controller import NetstackController
 from antlion.controllers.fuchsia_lib.lib_controllers.wlan_controller import WlanController
 from antlion.controllers.fuchsia_lib.lib_controllers.wlan_policy_controller import WlanPolicyController
 from antlion.controllers.fuchsia_lib.package_server import PackageServer
-from antlion.controllers.fuchsia_lib.ssh import DEFAULT_SSH_PORT, DEFAULT_SSH_USER, SSHConfig, SSHProvider, FuchsiaSSHError
+from antlion.controllers.fuchsia_lib.sl4f import SL4F
+from antlion.controllers.fuchsia_lib.ssh import DEFAULT_SSH_PORT, DEFAULT_SSH_PRIVATE_KEY, DEFAULT_SSH_USER, SSHConfig, SSHProvider, FuchsiaSSHError
 from antlion.controllers.fuchsia_lib.utils_lib import flash
+from antlion.libs.proc import job
+from antlion.utils import get_fuchsia_mdns_ipv6_address, get_interface_ip_addresses
 
 MOBLY_CONTROLLER_CONFIG_NAME = "FuchsiaDevice"
 ACTS_CONTROLLER_REFERENCE_NAME = "fuchsia_devices"
 
-CONTROL_PATH_REPLACE_VALUE = " ControlPath /tmp/fuchsia--%r@%h:%p"
-
 FUCHSIA_DEVICE_EMPTY_CONFIG_MSG = "Configuration is empty, abort!"
 FUCHSIA_DEVICE_NOT_LIST_CONFIG_MSG = "Configuration should be a list, abort!"
 FUCHSIA_DEVICE_INVALID_CONFIG = ("Fuchsia device config must be either a str "
@@ -153,33 +151,60 @@
         ssh_config: The ssh_config for connecting to the Fuchsia device.
     """
 
-    def __init__(self, fd_conf_data):
-        """
-        Args:
-            fd_conf_data: A dict of a fuchsia device configuration data
-                Required keys:
-                    ip: IP address of fuchsia device
-                optional key:
-                    sl4_port: Port for the sl4f web server on the fuchsia device
-                              (Default: 80)
-                    ssh_config: Location of the ssh_config file to connect to
-                        the fuchsia device
-                        (Default: None)
-                    ssh_port: Port for the ssh server on the fuchsia device
-                              (Default: 22)
-        """
+    def __init__(self, fd_conf_data) -> None:
         self.conf_data = fd_conf_data
         if "ip" not in fd_conf_data:
             raise FuchsiaDeviceError(FUCHSIA_DEVICE_NO_IP_MSG)
         self.ip: str = fd_conf_data["ip"]
         self.orig_ip: str = fd_conf_data["ip"]
         self.sl4f_port: int = fd_conf_data.get("sl4f_port", 80)
+        self.ssh_username: str = fd_conf_data.get("ssh_username",
+                                                  DEFAULT_SSH_USER)
         self.ssh_port: int = fd_conf_data.get("ssh_port", DEFAULT_SSH_PORT)
-        self.ssh_config: Optional[str] = fd_conf_data.get("ssh_config", None)
-        self.ssh_priv_key: Optional[str] = fd_conf_data.get(
-            "ssh_priv_key", None)
-        self.authorized_file: Optional[str] = fd_conf_data.get(
-            "authorized_file_loc", None)
+
+        def expand(path: str) -> str:
+            return os.path.expandvars(os.path.expanduser(path))
+
+        def path_from_config(name: str,
+                             default: Optional[str] = None) -> Optional[str]:
+            path = fd_conf_data.get(name, default)
+            if not path:
+                return path
+            return expand(path)
+
+        def assert_exists(name: str, path: str) -> None:
+            if not path:
+                raise FuchsiaDeviceError(
+                    f'Please specify "${name}" in your configuration file')
+            if not os.path.exists(path):
+                raise FuchsiaDeviceError(
+                    f'Please specify a correct "${name}" in your configuration '
+                    f'file: "{path}" does not exist')
+
+        self.specific_image: Optional[str] = path_from_config("specific_image")
+        if self.specific_image:
+            assert_exists("specific_image", self.specific_image)
+
+        # Path to a tar.gz archive with pm and amber-files, as necessary for
+        # starting a package server.
+        self.packages_archive_path: Optional[str] = path_from_config(
+            "packages_archive_path", None)
+        if self.packages_archive_path:
+            assert_exists("packages_archive_path", self.packages_archive_path)
+
+        def required_path_from_config(name: str,
+                                      default: Optional[str] = None) -> str:
+            path = path_from_config(name, default)
+            assert_exists(name, path)
+            return path
+
+        self.ssh_priv_key: str = required_path_from_config(
+            "ssh_priv_key", DEFAULT_SSH_PRIVATE_KEY)
+        self.authorized_file: str = required_path_from_config(
+            "authorized_file_loc", f'{self.ssh_priv_key}.pub')
+        self.ffx_binary_path: str = required_path_from_config(
+            "ffx_binary_path", "${FUCHSIA_DIR}/.jiri_root/bin/ffx")
+
         self.serial_number: Optional[str] = fd_conf_data.get(
             "serial_number", None)
         self.device_type: Optional[str] = fd_conf_data.get("device_type", None)
@@ -189,34 +214,22 @@
         self.build_number: Optional[str] = fd_conf_data.get(
             "build_number", None)
         self.build_type: Optional[str] = fd_conf_data.get("build_type", None)
-        self.server_path: Optional[str] = fd_conf_data.get("server_path", None)
-        self.specific_image: Optional[str] = fd_conf_data.get(
-            "specific_image", None)
-        self.ffx_binary_path: Optional[str] = fd_conf_data.get(
-            "ffx_binary_path", None)
-        # Path to a tar.gz archive with pm and amber-files, as necessary for
-        # starting a package server.
-        self.packages_archive_path: Optional[str] = fd_conf_data.get(
-            "packages_archive_path", None)
+
         self.mdns_name: Optional[str] = fd_conf_data.get("mdns_name", None)
 
-        # Instead of the input ssh_config, a new config is generated with proper
-        # ControlPath to the test output directory.
-        output_path = context.get_current_context().get_base_output_path()
-        generated_ssh_config = os.path.join(output_path,
-                                            "ssh_config_{}".format(self.ip))
-        self._set_control_path_config(self.ssh_config, generated_ssh_config)
-        self.ssh_config = generated_ssh_config
-
-        self.ssh_username = fd_conf_data.get("ssh_username", DEFAULT_SSH_USER)
-        self.hard_reboot_on_fail = fd_conf_data.get("hard_reboot_on_fail",
-                                                    False)
-        self.take_bug_report_on_fail = fd_conf_data.get(
+        self.hard_reboot_on_fail: bool = fd_conf_data.get(
+            "hard_reboot_on_fail", False)
+        self.take_bug_report_on_fail: bool = fd_conf_data.get(
             "take_bug_report_on_fail", False)
         self.device_pdu_config = fd_conf_data.get("PduDevice", None)
-        self.config_country_code = fd_conf_data.get(
+        self.config_country_code: str = fd_conf_data.get(
             'country_code', FUCHSIA_DEFAULT_COUNTRY_CODE_US).upper()
 
+        output_path = context.get_current_context().get_base_output_path()
+        self.ssh_config = os.path.join(output_path,
+                                       "ssh_config_{}".format(self.ip))
+        self._generate_ssh_config(self.ssh_config)
+
         # WLAN interface info is populated inside configure_wlan
         self.wlan_client_interfaces = {}
         self.wlan_ap_interfaces = {}
@@ -224,6 +237,7 @@
             'wlan_client_test_interface', None)
         self.wlan_ap_test_interface_name = fd_conf_data.get(
             'wlan_ap_test_interface', None)
+        self.wlan_features: List[str] = fd_conf_data.get('wlan_features', [])
 
         # Whether to use 'policy' or 'drivers' for WLAN connect/disconnect calls
         # If set to None, wlan is not configured.
@@ -286,6 +300,7 @@
     def sl4f(self):
         if not hasattr(self, '_sl4f'):
             return
+        self.log.debug('Cleaning up SL4F')
         del self._sl4f
 
     @property
@@ -307,6 +322,7 @@
     def ssh(self):
         if not hasattr(self, '_ssh'):
             return
+        self.log.debug('Cleaning up SSH')
         del self._ssh
 
     @property
@@ -321,10 +337,6 @@
         calls.
         """
         if not hasattr(self, '_ffx'):
-            if not self.ffx_binary_path:
-                raise FuchsiaConfigError(
-                    'Must provide "ffx_binary_path: <path to FFX binary>" in the device config'
-                )
             if not self.mdns_name:
                 raise FuchsiaConfigError(
                     'Must provide "mdns_name: <device mDNS name>" in the device config'
@@ -337,29 +349,37 @@
     def ffx(self):
         if not hasattr(self, '_ffx'):
             return
+        self.log.debug('Cleaning up ffx')
         self._ffx.clean_up()
         del self._ffx
 
-    def _set_control_path_config(self, old_config, new_config):
-        """Given an input ssh_config, write to a new config with proper
-        ControlPath values in place, if it doesn't exist already.
+    def _generate_ssh_config(self, file_path: str):
+        """Generate and write an SSH config for Fuchsia to disk.
 
         Args:
-            old_config: string, path to the input config
-            new_config: string, path to store the new config
+            file_path: Path to write the generated SSH config
         """
-        if os.path.isfile(new_config):
-            return
+        content = textwrap.dedent(f"""\
+            Host *
+                CheckHostIP no
+                StrictHostKeyChecking no
+                ForwardAgent no
+                ForwardX11 no
+                GSSAPIDelegateCredentials no
+                UserKnownHostsFile /dev/null
+                User fuchsia
+                IdentitiesOnly yes
+                IdentityFile {self.ssh_priv_key}
+                ControlPersist yes
+                ControlMaster auto
+                ControlPath /tmp/fuchsia--%r@%h:%p
+                ServerAliveInterval 1
+                ServerAliveCountMax 1
+                LogLevel ERROR
+            """)
 
-        ssh_config_copy = ""
-
-        with open(old_config, 'r') as file:
-            ssh_config_copy = re.sub('(\sControlPath\s.*)',
-                                     CONTROL_PATH_REPLACE_VALUE,
-                                     file.read(),
-                                     flags=re.M)
-        with open(new_config, 'w') as file:
-            file.write(ssh_config_copy)
+        with open(file_path, 'w') as file:
+            file.write(content)
 
     def init_controllers(self):
         # Contains Netstack functions
@@ -519,7 +539,7 @@
                ping_timeout: int = FUCHSIA_DEFAULT_CONNECT_TIMEOUT,
                ssh_timeout: int = FUCHSIA_DEFAULT_CONNECT_TIMEOUT,
                reboot_type: int = FUCHSIA_REBOOT_TYPE_SOFT,
-               testbed_pdus: list[pdu.PduDevice] = None) -> None:
+               testbed_pdus: List[pdu.PduDevice] = None) -> None:
         """Reboot a FuchsiaDevice.
 
         Soft reboots the device, verifies it becomes unreachable, then verifies
@@ -871,30 +891,39 @@
         Usage:
             In FuchsiaDevice config, add "country_code": "<CC>"
         """
-        if self.ssh_config:
-            # Country code can be None, from antlion config.
-            if desired_country_code:
-                desired_country_code = desired_country_code.upper()
-                response = self.sl4f.regulatory_region_lib.setRegion(
-                    desired_country_code)
-                if response.get('error'):
-                    raise FuchsiaDeviceError(
-                        'Failed to set regulatory domain. Err: %s' %
-                        response['error'])
-                end_time = time.time() + FUCHSIA_COUNTRY_CODE_TIMEOUT
-                while time.time() < end_time:
-                    ascii_cc = self.sl4f.wlan_lib.wlanGetCountry(0).get(
-                        'result')
-                    # Convert ascii_cc to string, then compare
-                    if ascii_cc and (''.join(chr(c) for c in ascii_cc).upper()
-                                     == desired_country_code):
-                        self.log.debug('Country code successfully set to %s.' %
-                                       desired_country_code)
-                        return
-                    self.log.debug('Country code not yet updated. Retrying.')
-                    time.sleep(1)
-                raise FuchsiaDeviceError('Country code never updated to %s' %
-                                         desired_country_code)
+        # Country code can be None, from antlion config.
+        if desired_country_code:
+            desired_country_code = desired_country_code.upper()
+            response = self.sl4f.regulatory_region_lib.setRegion(
+                desired_country_code)
+            if response.get('error'):
+                raise FuchsiaDeviceError(
+                    'Failed to set regulatory domain. Err: %s' %
+                    response['error'])
+
+            phy_list_response = self.sl4f.wlan_lib.wlanPhyIdList()
+            if phy_list_response.get('error'):
+                raise FuchsiaDeviceError(
+                    f'Failed to get phy list. Err: {response["error"]}')
+            phy_list = phy_list_response.get('result')
+            if not phy_list:
+                raise FuchsiaDeviceError('No phy available in phy list')
+            phy_id = phy_list[0]
+
+            end_time = time.time() + FUCHSIA_COUNTRY_CODE_TIMEOUT
+            while time.time() < end_time:
+                ascii_cc = self.sl4f.wlan_lib.wlanGetCountry(phy_id).get(
+                    'result')
+                # Convert ascii_cc to string, then compare
+                if ascii_cc and (''.join(chr(c) for c in ascii_cc).upper()
+                                 == desired_country_code):
+                    self.log.debug('Country code successfully set to %s.' %
+                                   desired_country_code)
+                    return
+                self.log.debug('Country code not yet updated. Retrying.')
+                time.sleep(1)
+            raise FuchsiaDeviceError('Country code never updated to %s' %
+                                     desired_country_code)
 
     def stop_services(self):
         """Stops the ffx daemon and deletes SL4F property."""
@@ -917,11 +946,6 @@
                 times in one test. Epoch time when the test started. If not
                 specified, the current time will be used.
         """
-        if not self.ssh_config:
-            self.log.warn(
-                'Skipping take_bug_report because ssh_config is not specified')
-            return
-
         if test_name:
             self.log.info(
                 f"Taking snapshot of {self.mdns_name} for {test_name}")
diff --git a/src/antlion/controllers/fuchsia_lib/ffx.py b/src/antlion/controllers/fuchsia_lib/ffx.py
index cdd34d4..ca05feb 100644
--- a/src/antlion/controllers/fuchsia_lib/ffx.py
+++ b/src/antlion/controllers/fuchsia_lib/ffx.py
@@ -20,7 +20,8 @@
 import subprocess
 import time
 
-from pathlib import Path
+from pathlib import Path, PurePath
+from shutil import rmtree
 from typing import Any, MutableMapping, Optional
 
 from antlion import context
@@ -28,7 +29,6 @@
 from antlion import signals
 from antlion import utils
 
-
 FFX_DEFAULT_COMMAND_TIMEOUT: int = 60
 
 
@@ -80,6 +80,7 @@
         self.ssh_private_key_path = ssh_private_key_path
 
         self._env_config_path: Optional[str] = None
+        self._sock_dir: Optional[str] = None
         self._ssh_auth_sock_path: Optional[str] = None
         self._overnet_socket_path: Optional[str] = None
         self._has_been_reachable = False
@@ -92,8 +93,11 @@
             Path(self._ssh_auth_sock_path).unlink(missing_ok=True)
         if self._overnet_socket_path:
             Path(self._overnet_socket_path).unlink(missing_ok=True)
+        if self._sock_dir:
+            rmtree(self._sock_dir)
 
         self._env_config_path = None
+        self._sock_dir = None
         self._ssh_auth_sock_path = None
         self._overnet_socket_path = None
         self._has_been_reachable = False
@@ -166,9 +170,13 @@
         # Sockets need to be created in a different directory to be guaranteed
         # to stay under the maximum socket path length of 104 characters.
         # See https://unix.stackexchange.com/q/367008
-        self._ssh_auth_sock_path = tempfile.mkstemp(suffix="ssh_auth_sock")[1]
-        self._overnet_socket_path = tempfile.mkstemp(
-            suffix="overnet_socket")[1]
+        self._sock_dir = tempfile.mkdtemp()
+        # On MacOS, the socket paths need to be just paths (not pre-created
+        # Python tempfiles, which are not socket files).
+        self._ssh_auth_sock_path = str(
+            PurePath(self._sock_dir, 'ssh_auth_sock'))
+        self._overnet_socket_path = str(
+            PurePath(self._sock_dir, 'overnet_socket'))
 
         config: MutableMapping[str, Any] = {
             "target": {
diff --git a/src/antlion/controllers/fuchsia_lib/lib_controllers/wlan_policy_controller.py b/src/antlion/controllers/fuchsia_lib/lib_controllers/wlan_policy_controller.py
index 1ca8a80..25f06b4 100644
--- a/src/antlion/controllers/fuchsia_lib/lib_controllers/wlan_policy_controller.py
+++ b/src/antlion/controllers/fuchsia_lib/lib_controllers/wlan_policy_controller.py
@@ -91,7 +91,8 @@
                 self.log.debug(f"Stopped session: {result.stdout}.")
             else:
                 if (b'InstanceNotFound' in result.stderr
-                        or b'instance was not found' in result.stderr):
+                        or b'instance was not found' in result.stderr
+                        or b'does not exist' in result.stderr):
                     self.log.debug(f'Instance was not found: {result.stderr}.')
                 else:
                     raise WlanPolicyControllerError(
diff --git a/src/antlion/controllers/fuchsia_lib/sl4f.py b/src/antlion/controllers/fuchsia_lib/sl4f.py
index 9cb36ee..1958772 100644
--- a/src/antlion/controllers/fuchsia_lib/sl4f.py
+++ b/src/antlion/controllers/fuchsia_lib/sl4f.py
@@ -15,6 +15,7 @@
 # limitations under the License.
 
 import ipaddress
+import sys
 
 from antlion import logger
 from antlion.controllers.fuchsia_lib import utils_lib
@@ -58,11 +59,21 @@
             ssh: SSHProvider transport to start and stop SL4F.
             port: Port for the SL4F server to listen on.
         """
-        host = ipaddress.ip_address(ssh.config.host_name)
-        if host.version == 4:
-            self.address = f'http://{host}:{port}'
-        elif host.version == 6:
-            self.address = f'http://[{host}]:{port}'
+        if sys.version_info < (3, 9):
+            # TODO(http://b/261746355): Remove this if statement once the
+            # minimum Python version is 3.9 or newer.
+            host = ipaddress.ip_address(ssh.config.host_name.split('%')[0])
+            if host.version == 4:
+                self.address = f'http://{host}:{port}'
+            elif host.version == 6:
+                host = ssh.config.host_name
+                self.address = f'http://[{host}]:{port}'
+        else:
+            host = ipaddress.ip_address(ssh.config.host_name)
+            if host.version == 4:
+                self.address = f'http://{host}:{port}'
+            elif host.version == 6:
+                self.address = f'http://[{host}]:{port}'
 
         self.log = logger.create_tagged_trace_logger(f"SL4F | {self.address}")
 
diff --git a/src/antlion/controllers/fuchsia_lib/ssh.py b/src/antlion/controllers/fuchsia_lib/ssh.py
index fd32d99..ec8f762 100644
--- a/src/antlion/controllers/fuchsia_lib/ssh.py
+++ b/src/antlion/controllers/fuchsia_lib/ssh.py
@@ -25,6 +25,7 @@
 
 DEFAULT_SSH_USER: str = "fuchsia"
 DEFAULT_SSH_PORT: int = 22
+DEFAULT_SSH_PRIVATE_KEY: str = "~/.ssh/fuchsia_ed25519"
 DEFAULT_SSH_TIMEOUT_SEC: int = 60
 DEFAULT_SSH_CONNECT_TIMEOUT_SEC: int = 30
 DEFAULT_SSH_SERVER_ALIVE_INTERVAL: int = 30
diff --git a/src/antlion/controllers/fuchsia_lib/utils_lib.py b/src/antlion/controllers/fuchsia_lib/utils_lib.py
index bb3e24b..897749f 100644
--- a/src/antlion/controllers/fuchsia_lib/utils_lib.py
+++ b/src/antlion/controllers/fuchsia_lib/utils_lib.py
@@ -16,12 +16,10 @@
 
 import os
 import logging
-import psutil
 import socket
 import tarfile
 import tempfile
 import time
-import usbinfo
 
 from antlion import utils
 from antlion.controllers.fuchsia_lib.ssh import FuchsiaSSHError
@@ -134,6 +132,9 @@
 def reboot_to_bootloader(fuchsia_device,
                          use_ssh=False,
                          fuchsia_reconnect_after_reboot_time=5):
+    import psutil
+    import usbinfo
+
     if use_ssh:
         logging.info('Sending reboot command via SSH to '
                      'get into bootloader.')
diff --git a/src/antlion/controllers/iperf_client.py b/src/antlion/controllers/iperf_client.py
index 78bb13b..c4d8e1d 100644
--- a/src/antlion/controllers/iperf_client.py
+++ b/src/antlion/controllers/iperf_client.py
@@ -29,8 +29,6 @@
 from antlion.controllers.utils_lib.ssh import connection
 from antlion.controllers.utils_lib.ssh import settings
 from antlion.libs.proc import job
-from paramiko.buffered_pipe import PipeTimeout
-from paramiko.ssh_exception import SSHException
 
 MOBLY_CONTROLLER_CONFIG_NAME = 'IPerfClient'
 ACTS_CONTROLLER_REFERENCE_NAME = 'iperf_clients'
@@ -223,14 +221,9 @@
             iperf_output = iperf_process.stdout
             with open(full_out_path, 'w') as out_file:
                 out_file.write(iperf_output)
-        except PipeTimeout:
-            raise TimeoutError('Paramiko PipeTimeout. Timed out waiting for '
-                               'iperf client to finish.')
         except socket.timeout:
             raise TimeoutError('Socket timeout. Timed out waiting for iperf '
                                'client to finish.')
-        except SSHException as err:
-            raise ConnectionError('SSH connection failed: {}'.format(err))
         except Exception as err:
             logging.exception('iperf run failed: {}'.format(err))
 
diff --git a/src/antlion/controllers/iperf_server.py b/src/antlion/controllers/iperf_server.py
index 3454529..b1311ff 100755
--- a/src/antlion/controllers/iperf_server.py
+++ b/src/antlion/controllers/iperf_server.py
@@ -679,7 +679,7 @@
         iperf_command = '{} -s -J -p {}'.format(iperf_binary, self.port)
 
         self._iperf_process = self._android_device.adb.shell_nb(
-            '{cmd} {extra_flags} > {log_file}'.format(
+            '{cmd} {extra_flags} > {log_file} 2>&1'.format(
                 cmd=iperf_command,
                 extra_flags=extra_args,
                 log_file=self._get_device_log_path()))
diff --git a/src/antlion/controllers/relay_lib/relay_board.py b/src/antlion/controllers/relay_lib/relay_board.py
index a4f0412..464326d 100644
--- a/src/antlion/controllers/relay_lib/relay_board.py
+++ b/src/antlion/controllers/relay_lib/relay_board.py
@@ -14,10 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-
 from antlion.controllers.relay_lib.errors import RelayConfigError
 from antlion.controllers.relay_lib.helpers import validate_key
 from antlion.controllers.relay_lib.relay import Relay
diff --git a/src/antlion/controllers/relay_lib/sain_smart_board.py b/src/antlion/controllers/relay_lib/sain_smart_board.py
index 1695d7c..b5bc310 100644
--- a/src/antlion/controllers/relay_lib/sain_smart_board.py
+++ b/src/antlion/controllers/relay_lib/sain_smart_board.py
@@ -14,8 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from future.moves.urllib.request import urlopen
 import re
+from urllib.request import urlopen
 
 from antlion.controllers.relay_lib.errors import RelayDeviceConnectionError
 from antlion.controllers.relay_lib.helpers import validate_key
diff --git a/src/antlion/controllers/utils_lib/commands/route.py b/src/antlion/controllers/utils_lib/commands/route.py
index d024c4b..3897f39 100644
--- a/src/antlion/controllers/utils_lib/commands/route.py
+++ b/src/antlion/controllers/utils_lib/commands/route.py
@@ -35,11 +35,11 @@
         """
         Args:
             runner: Object that can take unix commands and run them in an
-                    enviroment.
+                    environment.
         """
         self._runner = runner
 
-    def add_route(self, net_interface, address):
+    def add_route(self, net_interface, address, proto='static'):
         """Add an entry to the ip routing table.
 
         Will add a route for either a specific ip address, or a network.
@@ -53,13 +53,15 @@
                      is given then the entire subnet will be routed.
                      If DEFAULT_ROUTE is given then this will set the
                      default route.
+            proto: string, Routing protocol identifier of this route
+                   (e.g. kernel, redirect, boot, static, ra).
+                   See `man ip-route(8)` for details.
 
         Raises:
             NetworkInterfaceDown: Raised when the network interface is down.
         """
         try:
-            self._runner.run('ip route add %s dev %s' %
-                             (address, net_interface))
+            self._runner.run(f'ip route add {address} dev {net_interface} proto {proto}')
         except connection.CommandError as e:
             if 'File exists' in e.result.stderr:
                 raise Error('Route already exists.')
@@ -72,7 +74,7 @@
         """Get the routes in the ip routing table.
 
         Args:
-            net_interface: string, If given, only retrive routes that have
+            net_interface: string, If given, only retrieve routes that have
                            been registered to go through this network
                            interface (eg. wlan0).
 
@@ -82,22 +84,24 @@
                  it will be a ipaddress.IPv4Network otherwise it is a
                  ipaddress.IPv4Address.
         """
-        result = self._runner.run('ip route show')
+        result_ipv4 = self._runner.run('ip -4 route show')
+        result_ipv6 = self._runner.run('ip -6 route show')
 
-        lines = result.stdout.splitlines()
+        lines = result_ipv4.stdout.splitlines() + result_ipv6.stdout.splitlines()
 
         # Scan through each line for valid route entries
         # Example output:
         # default via 192.168.1.254 dev eth0  proto static
         # 192.168.1.0/24 dev eth0  proto kernel  scope link  src 172.22.100.19  metric 1
         # 192.168.2.1 dev eth2 proto kernel scope link metric 1
+        # fe80::/64 dev wlan0 proto static metric 1024
         for line in lines:
             if not 'dev' in line:
                 continue
 
             if line.startswith(self.DEFAULT_ROUTE):
                 # The default route entry is formatted differently.
-                match = re.search('dev (?P<net_interface>.*)', line)
+                match = re.search('dev (?P<net_interface>\S+)', line)
                 pair = None
                 if match:
                     # When there is a match for the route entry pattern create
@@ -107,7 +111,7 @@
             else:
                 # Test the normal route entry pattern.
                 match = re.search(
-                    '(?P<address>[^\s]*) dev (?P<net_interface>[^\s]*)', line)
+                    '(?P<address>[0-9A-Fa-f\.\:/]+) dev (?P<net_interface>\S+)', line)
                 pair = None
                 if match:
                     # When there is a match for the route entry pattern create
@@ -115,9 +119,9 @@
                     d = match.groupdict()
                     # Route can be either a network or specific address
                     try:
-                        address = ipaddress.IPv4Address(d['address'])
-                    except ipaddress.AddressValueError:
-                        address = ipaddress.IPv4Network(d['address'])
+                        address = ipaddress.ip_address(d['address'])
+                    except ValueError:
+                        address = d['address']
 
                     pair = (address, d['net_interface'])
 
diff --git a/src/antlion/controllers/utils_lib/ssh/connection.py b/src/antlion/controllers/utils_lib/ssh/connection.py
index 4808f93..799905e 100644
--- a/src/antlion/controllers/utils_lib/ssh/connection.py
+++ b/src/antlion/controllers/utils_lib/ssh/connection.py
@@ -286,7 +286,7 @@
         Args:
             command: The command to execute over ssh. Can be either a string
                      or a list.
-            env: A dictonary of environment variables to setup on the remote
+            env: A dictionary of environment variables to setup on the remote
                  host.
 
         Returns:
@@ -298,9 +298,7 @@
             SshPermissionDeniedError: When permission is not allowed on the
                                       remote host.
         """
-        command = '(%s) < /dev/null > /dev/null 2>&1 & echo -n $!' % command
-        result = self.run(command, env=env)
-        return result
+        return self.run(f'({command}) < /dev/null > /dev/null 2>&1 & echo -n $!', env=env)
 
     def close(self):
         """Clean up open connections to remote host."""
diff --git a/src/antlion/libs/proc/job.py b/src/antlion/libs/proc/job.py
index 9530826..b17d904 100644
--- a/src/antlion/libs/proc/job.py
+++ b/src/antlion/libs/proc/job.py
@@ -28,7 +28,7 @@
 
     def __init__(self, result):
         super(Error, self).__init__(result)
-        self.result = result
+        self.result: Result = result
 
 
 class TimeoutError(Error):
diff --git a/src/antlion/logger.py b/src/antlion/logger.py
index 2b46ff1..599e08b 100755
--- a/src/antlion/logger.py
+++ b/src/antlion/logger.py
@@ -14,8 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import print_function
-
 import datetime
 import logging
 import os
diff --git a/src/antlion/test_runner.py b/src/antlion/test_runner.py
index 81a1c49..261d0bd 100644
--- a/src/antlion/test_runner.py
+++ b/src/antlion/test_runner.py
@@ -15,10 +15,6 @@
 # limitations under the License.
 import itertools
 
-from future import standard_library
-
-standard_library.install_aliases()
-
 import importlib
 import inspect
 import fnmatch
diff --git a/src/antlion_contrib/test_utils/OWNERS b/src/antlion/test_utils/OWNERS
similarity index 100%
rename from src/antlion_contrib/test_utils/OWNERS
rename to src/antlion/test_utils/OWNERS
diff --git a/src/antlion_contrib/test_utils/__init__.py b/src/antlion/test_utils/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/__init__.py
rename to src/antlion/test_utils/__init__.py
diff --git a/src/antlion_contrib/test_utils/abstract_devices/__init__.py b/src/antlion/test_utils/abstract_devices/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/abstract_devices/__init__.py
rename to src/antlion/test_utils/abstract_devices/__init__.py
diff --git a/src/antlion_contrib/test_utils/abstract_devices/bluetooth_device.py b/src/antlion/test_utils/abstract_devices/bluetooth_device.py
similarity index 98%
rename from src/antlion_contrib/test_utils/abstract_devices/bluetooth_device.py
rename to src/antlion/test_utils/abstract_devices/bluetooth_device.py
index b5dae7d..c0cb29e 100644
--- a/src/antlion_contrib/test_utils/abstract_devices/bluetooth_device.py
+++ b/src/antlion/test_utils/abstract_devices/bluetooth_device.py
@@ -21,16 +21,16 @@
 
 from antlion.controllers.android_device import AndroidDevice
 from antlion.controllers.fuchsia_device import FuchsiaDevice
-from antlion_contrib.test_utils.bt.bt_constants import ble_scan_settings_modes
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_strings
-from antlion_contrib.test_utils.bt.bt_constants import gatt_event
-from antlion_contrib.test_utils.bt.bt_constants import scan_result
-from antlion_contrib.test_utils.bt.bt_gatt_utils import GattTestUtilsError
-from antlion_contrib.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_connection
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
+from antlion.test_utils.bt.bt_constants import ble_scan_settings_modes
+from antlion.test_utils.bt.bt_constants import gatt_cb_strings
+from antlion.test_utils.bt.bt_constants import gatt_event
+from antlion.test_utils.bt.bt_constants import scan_result
+from antlion.test_utils.bt.bt_gatt_utils import GattTestUtilsError
+from antlion.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_connection
+from antlion.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
 
-import antlion_contrib.test_utils.bt.bt_test_utils as bt_test_utils
+import antlion.test_utils.bt.bt_test_utils as bt_test_utils
 
 
 def create_bluetooth_device(hardware_device):
diff --git a/src/antlion_contrib/test_utils/abstract_devices/bluetooth_handsfree_abstract_device.py b/src/antlion/test_utils/abstract_devices/bluetooth_handsfree_abstract_device.py
similarity index 99%
rename from src/antlion_contrib/test_utils/abstract_devices/bluetooth_handsfree_abstract_device.py
rename to src/antlion/test_utils/abstract_devices/bluetooth_handsfree_abstract_device.py
index c320c32..2367b94 100644
--- a/src/antlion_contrib/test_utils/abstract_devices/bluetooth_handsfree_abstract_device.py
+++ b/src/antlion/test_utils/abstract_devices/bluetooth_handsfree_abstract_device.py
@@ -17,7 +17,7 @@
 import time
 from antlion import asserts
 from antlion.controllers.buds_lib.dev_utils import apollo_sink_events
-from antlion_contrib.test_utils.bt.bt_constants import bt_default_timeout
+from antlion.test_utils.bt.bt_constants import bt_default_timeout
 
 
 
diff --git a/src/antlion_contrib/test_utils/abstract_devices/wlan_device.py b/src/antlion/test_utils/abstract_devices/wlan_device.py
similarity index 97%
rename from src/antlion_contrib/test_utils/abstract_devices/wlan_device.py
rename to src/antlion/test_utils/abstract_devices/wlan_device.py
index ea55883..2d11a44 100644
--- a/src/antlion_contrib/test_utils/abstract_devices/wlan_device.py
+++ b/src/antlion/test_utils/abstract_devices/wlan_device.py
@@ -18,7 +18,7 @@
 import logging
 import time
 
-import antlion_contrib.test_utils.wifi.wifi_test_utils as awutils
+import antlion.test_utils.wifi.wifi_test_utils as awutils
 from antlion.utils import adb_shell_ping
 
 from antlion import asserts
@@ -176,6 +176,10 @@
         raise NotImplementedError("{} must be defined.".format(
             inspect.currentframe().f_code.co_name))
 
+    def feature_is_present(self, feature: str) -> bool:
+        raise NotImplementedError("{} must be defined.".format(
+            inspect.currentframe().f_code.co_name))
+
 
 class AndroidWlanDevice(WlanDevice):
     """Class wrapper for an Android WLAN device.
@@ -303,6 +307,9 @@
             android_device_or_serial=self.device,
             test_interface=test_interface)
 
+    def feature_is_present(self, feature: str) -> bool:
+        pass
+
 
 class FuchsiaWlanDevice(WlanDevice):
     """Class wrapper for an Fuchsia WLAN device.
@@ -539,3 +546,6 @@
             },
             ssh_provider=self.device.ssh,
             test_interface=test_interface)
+
+    def feature_is_present(self, feature: str) -> bool:
+        return feature in self.device.wlan_features
diff --git a/src/antlion_contrib/test_utils/abstract_devices/wmm_transceiver.py b/src/antlion/test_utils/abstract_devices/wmm_transceiver.py
similarity index 100%
rename from src/antlion_contrib/test_utils/abstract_devices/wmm_transceiver.py
rename to src/antlion/test_utils/abstract_devices/wmm_transceiver.py
diff --git a/src/antlion_contrib/test_utils/audio_analysis_lib/__init__.py b/src/antlion/test_utils/audio_analysis_lib/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/audio_analysis_lib/__init__.py
rename to src/antlion/test_utils/audio_analysis_lib/__init__.py
diff --git a/src/antlion_contrib/test_utils/audio_analysis_lib/audio_analysis.py b/src/antlion/test_utils/audio_analysis_lib/audio_analysis.py
similarity index 100%
rename from src/antlion_contrib/test_utils/audio_analysis_lib/audio_analysis.py
rename to src/antlion/test_utils/audio_analysis_lib/audio_analysis.py
diff --git a/src/antlion_contrib/test_utils/audio_analysis_lib/audio_data.py b/src/antlion/test_utils/audio_analysis_lib/audio_data.py
similarity index 100%
rename from src/antlion_contrib/test_utils/audio_analysis_lib/audio_data.py
rename to src/antlion/test_utils/audio_analysis_lib/audio_data.py
diff --git a/src/antlion_contrib/test_utils/audio_analysis_lib/audio_quality_measurement.py b/src/antlion/test_utils/audio_analysis_lib/audio_quality_measurement.py
similarity index 99%
rename from src/antlion_contrib/test_utils/audio_analysis_lib/audio_quality_measurement.py
rename to src/antlion/test_utils/audio_analysis_lib/audio_quality_measurement.py
index 5287b29..c347636 100644
--- a/src/antlion_contrib/test_utils/audio_analysis_lib/audio_quality_measurement.py
+++ b/src/antlion/test_utils/audio_analysis_lib/audio_quality_measurement.py
@@ -20,7 +20,7 @@
 import math
 import numpy
 
-import antlion_contrib.test_utils.audio_analysis_lib.audio_analysis as audio_analysis
+import antlion.test_utils.audio_analysis_lib.audio_analysis as audio_analysis
 
 # The input signal should be one sine wave with fixed frequency which
 # can have silence before and/or after sine wave.
diff --git a/src/antlion_contrib/test_utils/audio_analysis_lib/check_quality.py b/src/antlion/test_utils/audio_analysis_lib/check_quality.py
similarity index 98%
rename from src/antlion_contrib/test_utils/audio_analysis_lib/check_quality.py
rename to src/antlion/test_utils/audio_analysis_lib/check_quality.py
index 755d007..0eef51b 100644
--- a/src/antlion_contrib/test_utils/audio_analysis_lib/check_quality.py
+++ b/src/antlion/test_utils/audio_analysis_lib/check_quality.py
@@ -24,9 +24,9 @@
 import tempfile
 import wave
 
-import antlion_contrib.test_utils.audio_analysis_lib.audio_analysis as audio_analysis
-import antlion_contrib.test_utils.audio_analysis_lib.audio_data as audio_data
-import antlion_contrib.test_utils.audio_analysis_lib.audio_quality_measurement as \
+import antlion.test_utils.audio_analysis_lib.audio_analysis as audio_analysis
+import antlion.test_utils.audio_analysis_lib.audio_data as audio_data
+import antlion.test_utils.audio_analysis_lib.audio_quality_measurement as \
  audio_quality_measurement
 
 # Holder for quality parameters used in audio_quality_measurement module.
diff --git a/src/antlion_contrib/test_utils/bt/A2dpBaseTest.py b/src/antlion/test_utils/bt/A2dpBaseTest.py
similarity index 96%
rename from src/antlion_contrib/test_utils/bt/A2dpBaseTest.py
rename to src/antlion/test_utils/bt/A2dpBaseTest.py
index d0297f1..1b8d4e0 100644
--- a/src/antlion_contrib/test_utils/bt/A2dpBaseTest.py
+++ b/src/antlion/test_utils/bt/A2dpBaseTest.py
@@ -20,16 +20,16 @@
 import shutil
 import time
 
-import antlion_contrib.test_utils.coex.audio_test_utils as atu
-import antlion_contrib.test_utils.bt.bt_test_utils as btutils
+import antlion.test_utils.coex.audio_test_utils as atu
+import antlion.test_utils.bt.bt_test_utils as btutils
 from antlion import asserts
-from antlion_contrib.test_utils.bt import bt_constants
-from antlion_contrib.test_utils.bt import BtEnum
-from antlion_contrib.test_utils.abstract_devices.bluetooth_handsfree_abstract_device import BluetoothHandsfreeAbstractDeviceFactory as bt_factory
-from antlion_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
-from antlion_contrib.test_utils.bt.ble_performance_test_utils import plot_graph
-from antlion_contrib.test_utils.power.PowerBTBaseTest import ramp_attenuation
-from antlion_contrib.test_utils.bt.loggers import bluetooth_metric_logger as log
+from antlion.test_utils.bt import bt_constants
+from antlion.test_utils.bt import BtEnum
+from antlion.test_utils.abstract_devices.bluetooth_handsfree_abstract_device import BluetoothHandsfreeAbstractDeviceFactory as bt_factory
+from antlion.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
+from antlion.test_utils.bt.ble_performance_test_utils import plot_graph
+from antlion.test_utils.power.PowerBTBaseTest import ramp_attenuation
+from antlion.test_utils.bt.loggers import bluetooth_metric_logger as log
 from antlion.signals import TestPass, TestError
 
 PHONE_MUSIC_FILE_DIRECTORY = '/sdcard/Music'
diff --git a/src/antlion_contrib/test_utils/bt/AvrcpBaseTest.py b/src/antlion/test_utils/bt/AvrcpBaseTest.py
similarity index 84%
rename from src/antlion_contrib/test_utils/bt/AvrcpBaseTest.py
rename to src/antlion/test_utils/bt/AvrcpBaseTest.py
index 21cc5f5..d6d2007 100644
--- a/src/antlion_contrib/test_utils/bt/AvrcpBaseTest.py
+++ b/src/antlion/test_utils/bt/AvrcpBaseTest.py
@@ -19,16 +19,16 @@
 import queue
 
 from antlion import asserts
-from antlion_contrib.test_utils.abstract_devices.bluetooth_handsfree_abstract_device import BluetoothHandsfreeAbstractDeviceFactory as Factory
-from antlion_contrib.test_utils.bt.simulated_carkit_device import SimulatedCarkitDevice
-from antlion_contrib.test_utils.bt.bt_test_utils import connect_phone_to_headset
-from antlion_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
-from antlion_contrib.test_utils.car.car_media_utils import EVENT_PLAY_RECEIVED
-from antlion_contrib.test_utils.car.car_media_utils import EVENT_PAUSE_RECEIVED
-from antlion_contrib.test_utils.car.car_media_utils import EVENT_SKIP_NEXT_RECEIVED
-from antlion_contrib.test_utils.car.car_media_utils import EVENT_SKIP_PREV_RECEIVED
-from antlion_contrib.test_utils.car.car_media_utils import CMD_MEDIA_PLAY
-from antlion_contrib.test_utils.car.car_media_utils import CMD_MEDIA_PAUSE
+from antlion.test_utils.abstract_devices.bluetooth_handsfree_abstract_device import BluetoothHandsfreeAbstractDeviceFactory as Factory
+from antlion.test_utils.bt.simulated_carkit_device import SimulatedCarkitDevice
+from antlion.test_utils.bt.bt_test_utils import connect_phone_to_headset
+from antlion.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
+from antlion.test_utils.car.car_media_utils import EVENT_PLAY_RECEIVED
+from antlion.test_utils.car.car_media_utils import EVENT_PAUSE_RECEIVED
+from antlion.test_utils.car.car_media_utils import EVENT_SKIP_NEXT_RECEIVED
+from antlion.test_utils.car.car_media_utils import EVENT_SKIP_PREV_RECEIVED
+from antlion.test_utils.car.car_media_utils import CMD_MEDIA_PLAY
+from antlion.test_utils.car.car_media_utils import CMD_MEDIA_PAUSE
 
 ADB_FILE_EXISTS = 'test -e %s && echo True'
 DEFAULT_TIMEOUT = 5
diff --git a/src/antlion_contrib/test_utils/bt/BleEnum.py b/src/antlion/test_utils/bt/BleEnum.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/BleEnum.py
rename to src/antlion/test_utils/bt/BleEnum.py
diff --git a/src/antlion_contrib/test_utils/bt/BluetoothBaseTest.py b/src/antlion/test_utils/bt/BluetoothBaseTest.py
similarity index 90%
rename from src/antlion_contrib/test_utils/bt/BluetoothBaseTest.py
rename to src/antlion/test_utils/bt/BluetoothBaseTest.py
index 9ddc0f3..4730bc9 100644
--- a/src/antlion_contrib/test_utils/bt/BluetoothBaseTest.py
+++ b/src/antlion/test_utils/bt/BluetoothBaseTest.py
@@ -25,17 +25,17 @@
 from antlion.signals import TestSignal
 from antlion.utils import dump_string_to_file
 
-from antlion_contrib.test_utils.bt.bt_test_utils import get_device_selector_dictionary
-from antlion_contrib.test_utils.bt.bt_test_utils import reset_bluetooth
-from antlion_contrib.test_utils.bt.bt_test_utils import setup_multiple_devices_for_bt_test
-from antlion_contrib.test_utils.bt.bt_test_utils import take_btsnoop_logs
-from antlion_contrib.test_utils.bt.ble_lib import BleLib
-from antlion_contrib.test_utils.bt.bta_lib import BtaLib
-from antlion_contrib.test_utils.bt.config_lib import ConfigLib
-from antlion_contrib.test_utils.bt.gattc_lib import GattClientLib
-from antlion_contrib.test_utils.bt.gatts_lib import GattServerLib
-from antlion_contrib.test_utils.bt.rfcomm_lib import RfcommLib
-from antlion_contrib.test_utils.bt.shell_commands_lib import ShellCommands
+from antlion.test_utils.bt.bt_test_utils import get_device_selector_dictionary
+from antlion.test_utils.bt.bt_test_utils import reset_bluetooth
+from antlion.test_utils.bt.bt_test_utils import setup_multiple_devices_for_bt_test
+from antlion.test_utils.bt.bt_test_utils import take_btsnoop_logs
+from antlion.test_utils.bt.ble_lib import BleLib
+from antlion.test_utils.bt.bta_lib import BtaLib
+from antlion.test_utils.bt.config_lib import ConfigLib
+from antlion.test_utils.bt.gattc_lib import GattClientLib
+from antlion.test_utils.bt.gatts_lib import GattServerLib
+from antlion.test_utils.bt.rfcomm_lib import RfcommLib
+from antlion.test_utils.bt.shell_commands_lib import ShellCommands
 
 
 class BluetoothBaseTest(BaseTestClass):
diff --git a/src/antlion_contrib/test_utils/bt/BluetoothCarHfpBaseTest.py b/src/antlion/test_utils/bt/BluetoothCarHfpBaseTest.py
similarity index 94%
rename from src/antlion_contrib/test_utils/bt/BluetoothCarHfpBaseTest.py
rename to src/antlion/test_utils/bt/BluetoothCarHfpBaseTest.py
index f43e35f..11e4c1b 100644
--- a/src/antlion_contrib/test_utils/bt/BluetoothCarHfpBaseTest.py
+++ b/src/antlion/test_utils/bt/BluetoothCarHfpBaseTest.py
@@ -22,8 +22,8 @@
 import time
 
 from antlion.keys import Config
-from antlion_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
-from antlion_contrib.test_utils.bt.bt_test_utils import pair_pri_to_sec
+from antlion.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
+from antlion.test_utils.bt.bt_test_utils import pair_pri_to_sec
 
 
 class BluetoothCarHfpBaseTest(BluetoothBaseTest):
diff --git a/src/antlion_contrib/test_utils/bt/BtEnum.py b/src/antlion/test_utils/bt/BtEnum.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/BtEnum.py
rename to src/antlion/test_utils/bt/BtEnum.py
diff --git a/src/antlion_contrib/test_utils/bt/BtFunhausBaseTest.py b/src/antlion/test_utils/bt/BtFunhausBaseTest.py
similarity index 97%
rename from src/antlion_contrib/test_utils/bt/BtFunhausBaseTest.py
rename to src/antlion/test_utils/bt/BtFunhausBaseTest.py
index 9ea3beb..6975685 100644
--- a/src/antlion_contrib/test_utils/bt/BtFunhausBaseTest.py
+++ b/src/antlion/test_utils/bt/BtFunhausBaseTest.py
@@ -17,8 +17,8 @@
 Test script to automate the Bluetooth Audio Funhaus.
 """
 from antlion.keys import Config
-from antlion_contrib.test_utils.bt.BtMetricsBaseTest import BtMetricsBaseTest
-from antlion_contrib.test_utils.bt.bt_test_utils import bluetooth_enabled_check
+from antlion.test_utils.bt.BtMetricsBaseTest import BtMetricsBaseTest
+from antlion.test_utils.bt.bt_test_utils import bluetooth_enabled_check
 from antlion.utils import bypass_setup_wizard
 from antlion.utils import exe_cmd
 from antlion.utils import sync_device_time
diff --git a/src/antlion_contrib/test_utils/bt/BtInterferenceBaseTest.py b/src/antlion/test_utils/bt/BtInterferenceBaseTest.py
similarity index 95%
rename from src/antlion_contrib/test_utils/bt/BtInterferenceBaseTest.py
rename to src/antlion/test_utils/bt/BtInterferenceBaseTest.py
index e7e4352..181a0da 100644
--- a/src/antlion_contrib/test_utils/bt/BtInterferenceBaseTest.py
+++ b/src/antlion/test_utils/bt/BtInterferenceBaseTest.py
@@ -22,14 +22,14 @@
 import logging
 import antlion.controllers.iperf_client as ipc
 import antlion.controllers.iperf_server as ipf
-import antlion_contrib.test_utils.bt.bt_test_utils as btutils
+import antlion.test_utils.bt.bt_test_utils as btutils
 from antlion import asserts
-from antlion_contrib.test_utils.bt.A2dpBaseTest import A2dpBaseTest
-from antlion_contrib.test_utils.bt.loggers import bluetooth_metric_logger as log
-from antlion_contrib.test_utils.wifi import wifi_performance_test_utils as wpeutils
-from antlion_contrib.test_utils.wifi import wifi_power_test_utils as wputils
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
-from antlion_contrib.test_utils.power.PowerBaseTest import ObjNew
+from antlion.test_utils.bt.A2dpBaseTest import A2dpBaseTest
+from antlion.test_utils.bt.loggers import bluetooth_metric_logger as log
+from antlion.test_utils.wifi import wifi_performance_test_utils as wpeutils
+from antlion.test_utils.wifi import wifi_power_test_utils as wputils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.power.PowerBaseTest import ObjNew
 
 MAX_ATTENUATION = 95
 TEMP_FILE = '/sdcard/Download/tmp.log'
diff --git a/src/antlion_contrib/test_utils/bt/BtMetricsBaseTest.py b/src/antlion/test_utils/bt/BtMetricsBaseTest.py
similarity index 91%
rename from src/antlion_contrib/test_utils/bt/BtMetricsBaseTest.py
rename to src/antlion/test_utils/bt/BtMetricsBaseTest.py
index adc10cd..8abd13d 100644
--- a/src/antlion_contrib/test_utils/bt/BtMetricsBaseTest.py
+++ b/src/antlion/test_utils/bt/BtMetricsBaseTest.py
@@ -11,7 +11,7 @@
 # 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.
-from antlion_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
+from antlion.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
 
 
 class BtMetricsBaseTest(BluetoothBaseTest):
diff --git a/src/antlion_contrib/test_utils/bt/BtSarBaseTest.py b/src/antlion/test_utils/bt/BtSarBaseTest.py
similarity index 97%
rename from src/antlion_contrib/test_utils/bt/BtSarBaseTest.py
rename to src/antlion/test_utils/bt/BtSarBaseTest.py
index 02cd24f..eb06837 100644
--- a/src/antlion_contrib/test_utils/bt/BtSarBaseTest.py
+++ b/src/antlion/test_utils/bt/BtSarBaseTest.py
@@ -24,12 +24,12 @@
 from antlion.libs.proc import job
 from antlion.base_test import BaseTestClass
 
-from antlion_contrib.test_utils.bt.bt_power_test_utils import MediaControl
-from antlion_contrib.test_utils.bt.ble_performance_test_utils import run_ble_throughput_and_read_rssi
-from antlion_contrib.test_utils.abstract_devices.bluetooth_handsfree_abstract_device import BluetoothHandsfreeAbstractDeviceFactory as bt_factory
+from antlion.test_utils.bt.bt_power_test_utils import MediaControl
+from antlion.test_utils.bt.ble_performance_test_utils import run_ble_throughput_and_read_rssi
+from antlion.test_utils.abstract_devices.bluetooth_handsfree_abstract_device import BluetoothHandsfreeAbstractDeviceFactory as bt_factory
 
-import antlion_contrib.test_utils.bt.bt_test_utils as bt_utils
-import antlion_contrib.test_utils.wifi.wifi_performance_test_utils as wifi_utils
+import antlion.test_utils.bt.bt_test_utils as bt_utils
+import antlion.test_utils.wifi.wifi_performance_test_utils as wifi_utils
 
 PHONE_MUSIC_FILE_DIRECTORY = '/sdcard/Music'
 
diff --git a/src/antlion_contrib/test_utils/bt/GattConnectedBaseTest.py b/src/antlion/test_utils/bt/GattConnectedBaseTest.py
similarity index 88%
rename from src/antlion_contrib/test_utils/bt/GattConnectedBaseTest.py
rename to src/antlion/test_utils/bt/GattConnectedBaseTest.py
index c0d225f..c131530 100644
--- a/src/antlion_contrib/test_utils/bt/GattConnectedBaseTest.py
+++ b/src/antlion/test_utils/bt/GattConnectedBaseTest.py
@@ -20,20 +20,20 @@
 
 from queue import Empty
 
-from antlion_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic
-from antlion_contrib.test_utils.bt.bt_constants import gatt_descriptor
-from antlion_contrib.test_utils.bt.bt_constants import gatt_service_types
-from antlion_contrib.test_utils.bt.bt_constants import gatt_event
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_err
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_strings
-from antlion_contrib.test_utils.bt.bt_constants import gatt_mtu_size
-from antlion_contrib.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import orchestrate_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_characteristics
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_descriptors
-from antlion_contrib.test_utils.bt.bt_constants import gatt_char_desc_uuids
-from antlion_contrib.test_utils.bt.bt_constants import bt_default_timeout
+from antlion.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
+from antlion.test_utils.bt.bt_constants import gatt_characteristic
+from antlion.test_utils.bt.bt_constants import gatt_descriptor
+from antlion.test_utils.bt.bt_constants import gatt_service_types
+from antlion.test_utils.bt.bt_constants import gatt_event
+from antlion.test_utils.bt.bt_constants import gatt_cb_err
+from antlion.test_utils.bt.bt_constants import gatt_cb_strings
+from antlion.test_utils.bt.bt_constants import gatt_mtu_size
+from antlion.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import orchestrate_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_characteristics
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_descriptors
+from antlion.test_utils.bt.bt_constants import gatt_char_desc_uuids
+from antlion.test_utils.bt.bt_constants import bt_default_timeout
 
 
 class GattConnectedBaseTest(BluetoothBaseTest):
diff --git a/src/antlion_contrib/test_utils/bt/GattEnum.py b/src/antlion/test_utils/bt/GattEnum.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/GattEnum.py
rename to src/antlion/test_utils/bt/GattEnum.py
diff --git a/src/antlion_contrib/test_utils/bt/__init__.py b/src/antlion/test_utils/bt/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/__init__.py
rename to src/antlion/test_utils/bt/__init__.py
diff --git a/src/antlion_contrib/test_utils/bt/ble_lib.py b/src/antlion/test_utils/bt/ble_lib.py
similarity index 92%
rename from src/antlion_contrib/test_utils/bt/ble_lib.py
rename to src/antlion/test_utils/bt/ble_lib.py
index 725ee34..ee2cb1c 100644
--- a/src/antlion_contrib/test_utils/bt/ble_lib.py
+++ b/src/antlion/test_utils/bt/ble_lib.py
@@ -17,15 +17,15 @@
 Ble libraries
 """
 
-from antlion_contrib.test_utils.bt.bt_constants import ble_advertise_settings_modes
-from antlion_contrib.test_utils.bt.bt_constants import ble_advertise_settings_tx_powers
-from antlion_contrib.test_utils.bt.bt_constants import ble_scan_settings_modes
-from antlion_contrib.test_utils.bt.bt_constants import small_timeout
-from antlion_contrib.test_utils.bt.bt_constants import adv_fail
-from antlion_contrib.test_utils.bt.bt_constants import adv_succ
-from antlion_contrib.test_utils.bt.bt_constants import advertising_set_on_own_address_read
-from antlion_contrib.test_utils.bt.bt_constants import advertising_set_started
-from antlion_contrib.test_utils.bt.bt_test_utils import generate_ble_advertise_objects
+from antlion.test_utils.bt.bt_constants import ble_advertise_settings_modes
+from antlion.test_utils.bt.bt_constants import ble_advertise_settings_tx_powers
+from antlion.test_utils.bt.bt_constants import ble_scan_settings_modes
+from antlion.test_utils.bt.bt_constants import small_timeout
+from antlion.test_utils.bt.bt_constants import adv_fail
+from antlion.test_utils.bt.bt_constants import adv_succ
+from antlion.test_utils.bt.bt_constants import advertising_set_on_own_address_read
+from antlion.test_utils.bt.bt_constants import advertising_set_started
+from antlion.test_utils.bt.bt_test_utils import generate_ble_advertise_objects
 
 import time
 
diff --git a/src/antlion_contrib/test_utils/bt/ble_performance_test_utils.py b/src/antlion/test_utils/bt/ble_performance_test_utils.py
similarity index 91%
rename from src/antlion_contrib/test_utils/bt/ble_performance_test_utils.py
rename to src/antlion/test_utils/bt/ble_performance_test_utils.py
index b40704d..29055f6 100644
--- a/src/antlion_contrib/test_utils/bt/ble_performance_test_utils.py
+++ b/src/antlion/test_utils/bt/ble_performance_test_utils.py
@@ -19,21 +19,21 @@
 import datetime
 import statistics
 import os
-from antlion_contrib.test_utils.bt.bt_constants import advertising_set_started
-import antlion_contrib.test_utils.wifi.wifi_performance_test_utils.bokeh_figure as bokeh_figure
-from antlion_contrib.test_utils.bt.bt_constants import ble_scan_settings_phys
-from antlion_contrib.test_utils.bt.bt_constants import ble_scan_settings_modes
-from antlion_contrib.test_utils.bt.bt_gatt_utils import close_gatt_client
-from antlion_contrib.test_utils.bt.bt_coc_test_utils import do_multi_connection_throughput
-from antlion_contrib.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
+from antlion.test_utils.bt.bt_constants import advertising_set_started
+import antlion.test_utils.wifi.wifi_performance_test_utils.bokeh_figure as bokeh_figure
+from antlion.test_utils.bt.bt_constants import ble_scan_settings_phys
+from antlion.test_utils.bt.bt_constants import ble_scan_settings_modes
+from antlion.test_utils.bt.bt_gatt_utils import close_gatt_client
+from antlion.test_utils.bt.bt_coc_test_utils import do_multi_connection_throughput
+from antlion.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
 from queue import Empty
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_err
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_strings
-from antlion_contrib.test_utils.bt.bt_constants import l2cap_coc_header_size
-from antlion_contrib.test_utils.bt.bt_gatt_utils import GattTestUtilsError
-from antlion_contrib.test_utils.bt.bt_test_utils import generate_ble_scan_objects
-from antlion_contrib.test_utils.bt.bt_coc_test_utils import orchestrate_coc_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import orchestrate_gatt_connection
+from antlion.test_utils.bt.bt_constants import gatt_cb_err
+from antlion.test_utils.bt.bt_constants import gatt_cb_strings
+from antlion.test_utils.bt.bt_constants import l2cap_coc_header_size
+from antlion.test_utils.bt.bt_gatt_utils import GattTestUtilsError
+from antlion.test_utils.bt.bt_test_utils import generate_ble_scan_objects
+from antlion.test_utils.bt.bt_coc_test_utils import orchestrate_coc_connection
+from antlion.test_utils.bt.bt_gatt_utils import orchestrate_gatt_connection
 from concurrent.futures import ThreadPoolExecutor
 
 default_event_timeout = 10
diff --git a/src/antlion_contrib/test_utils/bt/bt_coc_test_utils.py b/src/antlion/test_utils/bt/bt_coc_test_utils.py
similarity index 91%
rename from src/antlion_contrib/test_utils/bt/bt_coc_test_utils.py
rename to src/antlion/test_utils/bt/bt_coc_test_utils.py
index cb25124..6da6350 100644
--- a/src/antlion_contrib/test_utils/bt/bt_coc_test_utils.py
+++ b/src/antlion/test_utils/bt/bt_coc_test_utils.py
@@ -18,19 +18,19 @@
 import time
 from antlion import utils
 
-from antlion_contrib.test_utils.bt.bt_constants import bt_default_timeout
-from antlion_contrib.test_utils.bt.bt_constants import default_bluetooth_socket_timeout_ms
-from antlion_contrib.test_utils.bt.bt_constants import default_le_connection_interval_ms
-from antlion_contrib.test_utils.bt.bt_constants import default_le_data_length
-from antlion_contrib.test_utils.bt.bt_constants import gatt_phy
-from antlion_contrib.test_utils.bt.bt_constants import gatt_transport
-from antlion_contrib.test_utils.bt.bt_constants import l2cap_coc_header_size
-from antlion_contrib.test_utils.bt.bt_constants import le_connection_event_time_step_ms
-from antlion_contrib.test_utils.bt.bt_constants import le_connection_interval_time_step_ms
-from antlion_contrib.test_utils.bt.bt_constants import le_default_supervision_timeout
-from antlion_contrib.test_utils.bt.bt_test_utils import get_mac_address_of_generic_advertisement
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
+from antlion.test_utils.bt.bt_constants import bt_default_timeout
+from antlion.test_utils.bt.bt_constants import default_bluetooth_socket_timeout_ms
+from antlion.test_utils.bt.bt_constants import default_le_connection_interval_ms
+from antlion.test_utils.bt.bt_constants import default_le_data_length
+from antlion.test_utils.bt.bt_constants import gatt_phy
+from antlion.test_utils.bt.bt_constants import gatt_transport
+from antlion.test_utils.bt.bt_constants import l2cap_coc_header_size
+from antlion.test_utils.bt.bt_constants import le_connection_event_time_step_ms
+from antlion.test_utils.bt.bt_constants import le_connection_interval_time_step_ms
+from antlion.test_utils.bt.bt_constants import le_default_supervision_timeout
+from antlion.test_utils.bt.bt_test_utils import get_mac_address_of_generic_advertisement
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
 
 log = logging
 
diff --git a/src/antlion_contrib/test_utils/bt/bt_constants.py b/src/antlion/test_utils/bt/bt_constants.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/bt_constants.py
rename to src/antlion/test_utils/bt/bt_constants.py
diff --git a/src/antlion_contrib/test_utils/bt/bt_contacts_utils.py b/src/antlion/test_utils/bt/bt_contacts_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/bt_contacts_utils.py
rename to src/antlion/test_utils/bt/bt_contacts_utils.py
diff --git a/src/antlion_contrib/test_utils/bt/bt_factory.py b/src/antlion/test_utils/bt/bt_factory.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/bt_factory.py
rename to src/antlion/test_utils/bt/bt_factory.py
diff --git a/src/antlion_contrib/test_utils/bt/bt_gatt_utils.py b/src/antlion/test_utils/bt/bt_gatt_utils.py
similarity index 95%
rename from src/antlion_contrib/test_utils/bt/bt_gatt_utils.py
rename to src/antlion/test_utils/bt/bt_gatt_utils.py
index 8f271f4..0347d26 100644
--- a/src/antlion_contrib/test_utils/bt/bt_gatt_utils.py
+++ b/src/antlion/test_utils/bt/bt_gatt_utils.py
@@ -16,16 +16,16 @@
 
 import logging
 
-from antlion_contrib.test_utils.bt.bt_test_utils import BtTestUtilsError
-from antlion_contrib.test_utils.bt.bt_test_utils import get_mac_address_of_generic_advertisement
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_err
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_strings
-from antlion_contrib.test_utils.bt.bt_constants import gatt_connection_state
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic
-from antlion_contrib.test_utils.bt.bt_constants import gatt_descriptor
-from antlion_contrib.test_utils.bt.bt_constants import gatt_phy_mask
-from antlion_contrib.test_utils.bt.bt_constants import gatt_service_types
-from antlion_contrib.test_utils.bt.bt_constants import gatt_transport
+from antlion.test_utils.bt.bt_test_utils import BtTestUtilsError
+from antlion.test_utils.bt.bt_test_utils import get_mac_address_of_generic_advertisement
+from antlion.test_utils.bt.bt_constants import gatt_cb_err
+from antlion.test_utils.bt.bt_constants import gatt_cb_strings
+from antlion.test_utils.bt.bt_constants import gatt_connection_state
+from antlion.test_utils.bt.bt_constants import gatt_characteristic
+from antlion.test_utils.bt.bt_constants import gatt_descriptor
+from antlion.test_utils.bt.bt_constants import gatt_phy_mask
+from antlion.test_utils.bt.bt_constants import gatt_service_types
+from antlion.test_utils.bt.bt_constants import gatt_transport
 import pprint
 from queue import Empty
 
diff --git a/src/antlion_contrib/test_utils/bt/bt_implementations/bt_stub.py b/src/antlion/test_utils/bt/bt_implementations/bt_stub.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/bt_implementations/bt_stub.py
rename to src/antlion/test_utils/bt/bt_implementations/bt_stub.py
diff --git a/src/antlion_contrib/test_utils/bt/bt_metrics_utils.py b/src/antlion/test_utils/bt/bt_metrics_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/bt_metrics_utils.py
rename to src/antlion/test_utils/bt/bt_metrics_utils.py
diff --git a/src/antlion_contrib/test_utils/bt/bt_power_test_utils.py b/src/antlion/test_utils/bt/bt_power_test_utils.py
similarity index 97%
rename from src/antlion_contrib/test_utils/bt/bt_power_test_utils.py
rename to src/antlion/test_utils/bt/bt_power_test_utils.py
index aa661af..f76bd6b 100644
--- a/src/antlion_contrib/test_utils/bt/bt_power_test_utils.py
+++ b/src/antlion/test_utils/bt/bt_power_test_utils.py
@@ -16,8 +16,8 @@
 
 import logging
 import time
-import antlion_contrib.test_utils.bt.BleEnum as bleenum
-import antlion_contrib.test_utils.instrumentation.device.command.instrumentation_command_builder as icb
+import antlion.test_utils.bt.BleEnum as bleenum
+import antlion.test_utils.instrumentation.device.command.instrumentation_command_builder as icb
 
 BLE_LOCATION_SCAN_ENABLE = 'settings put global ble_scan_always_enabled 1'
 BLE_LOCATION_SCAN_DISABLE = 'settings put global ble_scan_always_enabled 0'
diff --git a/src/antlion_contrib/test_utils/bt/bt_test_utils.py b/src/antlion/test_utils/bt/bt_test_utils.py
similarity index 96%
rename from src/antlion_contrib/test_utils/bt/bt_test_utils.py
rename to src/antlion/test_utils/bt/bt_test_utils.py
index 73ae6a1..2152c82 100644
--- a/src/antlion_contrib/test_utils/bt/bt_test_utils.py
+++ b/src/antlion/test_utils/bt/bt_test_utils.py
@@ -28,37 +28,37 @@
 from queue import Empty
 from subprocess import call
 from antlion import asserts
-from antlion_contrib.test_utils.bt.bt_constants import adv_fail
-from antlion_contrib.test_utils.bt.bt_constants import adv_succ
-from antlion_contrib.test_utils.bt.bt_constants import batch_scan_not_supported_list
-from antlion_contrib.test_utils.bt.bt_constants import batch_scan_result
-from antlion_contrib.test_utils.bt.bt_constants import bits_per_samples
-from antlion_contrib.test_utils.bt.bt_constants import ble_advertise_settings_modes
-from antlion_contrib.test_utils.bt.bt_constants import ble_advertise_settings_tx_powers
-from antlion_contrib.test_utils.bt.bt_constants import bluetooth_a2dp_codec_config_changed
-from antlion_contrib.test_utils.bt.bt_constants import bluetooth_off
-from antlion_contrib.test_utils.bt.bt_constants import bluetooth_on
-from antlion_contrib.test_utils.bt.bt_constants import \
+from antlion.test_utils.bt.bt_constants import adv_fail
+from antlion.test_utils.bt.bt_constants import adv_succ
+from antlion.test_utils.bt.bt_constants import batch_scan_not_supported_list
+from antlion.test_utils.bt.bt_constants import batch_scan_result
+from antlion.test_utils.bt.bt_constants import bits_per_samples
+from antlion.test_utils.bt.bt_constants import ble_advertise_settings_modes
+from antlion.test_utils.bt.bt_constants import ble_advertise_settings_tx_powers
+from antlion.test_utils.bt.bt_constants import bluetooth_a2dp_codec_config_changed
+from antlion.test_utils.bt.bt_constants import bluetooth_off
+from antlion.test_utils.bt.bt_constants import bluetooth_on
+from antlion.test_utils.bt.bt_constants import \
     bluetooth_profile_connection_state_changed
-from antlion_contrib.test_utils.bt.bt_constants import bluetooth_socket_conn_test_uuid
-from antlion_contrib.test_utils.bt.bt_constants import bt_default_timeout
-from antlion_contrib.test_utils.bt.bt_constants import bt_profile_constants
-from antlion_contrib.test_utils.bt.bt_constants import bt_profile_states
-from antlion_contrib.test_utils.bt.bt_constants import bt_rfcomm_uuids
-from antlion_contrib.test_utils.bt.bt_constants import bt_scan_mode_types
-from antlion_contrib.test_utils.bt.bt_constants import btsnoop_last_log_path_on_device
-from antlion_contrib.test_utils.bt.bt_constants import btsnoop_log_path_on_device
-from antlion_contrib.test_utils.bt.bt_constants import channel_modes
-from antlion_contrib.test_utils.bt.bt_constants import codec_types
-from antlion_contrib.test_utils.bt.bt_constants import default_bluetooth_socket_timeout_ms
-from antlion_contrib.test_utils.bt.bt_constants import default_rfcomm_timeout_ms
-from antlion_contrib.test_utils.bt.bt_constants import hid_id_keyboard
-from antlion_contrib.test_utils.bt.bt_constants import pairing_variant_passkey_confirmation
-from antlion_contrib.test_utils.bt.bt_constants import pan_connect_timeout
-from antlion_contrib.test_utils.bt.bt_constants import sample_rates
-from antlion_contrib.test_utils.bt.bt_constants import scan_result
-from antlion_contrib.test_utils.bt.bt_constants import sig_uuid_constants
-from antlion_contrib.test_utils.bt.bt_constants import small_timeout
+from antlion.test_utils.bt.bt_constants import bluetooth_socket_conn_test_uuid
+from antlion.test_utils.bt.bt_constants import bt_default_timeout
+from antlion.test_utils.bt.bt_constants import bt_profile_constants
+from antlion.test_utils.bt.bt_constants import bt_profile_states
+from antlion.test_utils.bt.bt_constants import bt_rfcomm_uuids
+from antlion.test_utils.bt.bt_constants import bt_scan_mode_types
+from antlion.test_utils.bt.bt_constants import btsnoop_last_log_path_on_device
+from antlion.test_utils.bt.bt_constants import btsnoop_log_path_on_device
+from antlion.test_utils.bt.bt_constants import channel_modes
+from antlion.test_utils.bt.bt_constants import codec_types
+from antlion.test_utils.bt.bt_constants import default_bluetooth_socket_timeout_ms
+from antlion.test_utils.bt.bt_constants import default_rfcomm_timeout_ms
+from antlion.test_utils.bt.bt_constants import hid_id_keyboard
+from antlion.test_utils.bt.bt_constants import pairing_variant_passkey_confirmation
+from antlion.test_utils.bt.bt_constants import pan_connect_timeout
+from antlion.test_utils.bt.bt_constants import sample_rates
+from antlion.test_utils.bt.bt_constants import scan_result
+from antlion.test_utils.bt.bt_constants import sig_uuid_constants
+from antlion.test_utils.bt.bt_constants import small_timeout
 from antlion.utils import exe_cmd
 
 from antlion import utils
diff --git a/src/antlion_contrib/test_utils/bt/bta_lib.py b/src/antlion/test_utils/bt/bta_lib.py
similarity index 95%
rename from src/antlion_contrib/test_utils/bt/bta_lib.py
rename to src/antlion/test_utils/bt/bta_lib.py
index dfa75c6..60e0980 100644
--- a/src/antlion_contrib/test_utils/bt/bta_lib.py
+++ b/src/antlion/test_utils/bt/bta_lib.py
@@ -17,8 +17,8 @@
 Bluetooth adapter libraries
 """
 
-from antlion_contrib.test_utils.bt.bt_constants import bt_scan_mode_types
-from antlion_contrib.test_utils.bt.bt_test_utils import set_bt_scan_mode
+from antlion.test_utils.bt.bt_constants import bt_scan_mode_types
+from antlion.test_utils.bt.bt_test_utils import set_bt_scan_mode
 
 import pprint
 
diff --git a/src/antlion_contrib/test_utils/bt/config_lib.py b/src/antlion/test_utils/bt/config_lib.py
similarity index 85%
rename from src/antlion_contrib/test_utils/bt/config_lib.py
rename to src/antlion/test_utils/bt/config_lib.py
index a49a398..c1db8f5 100644
--- a/src/antlion_contrib/test_utils/bt/config_lib.py
+++ b/src/antlion/test_utils/bt/config_lib.py
@@ -17,10 +17,10 @@
 Bluetooth Config Pusher
 """
 
-from antlion_contrib.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_mtu
-from antlion_contrib.test_utils.bt.bt_gatt_utils import log_gatt_server_uuids
+from antlion.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_mtu
+from antlion.test_utils.bt.bt_gatt_utils import log_gatt_server_uuids
 
 import os
 
diff --git a/src/antlion_contrib/test_utils/bt/configs/bt_stack.conf b/src/antlion/test_utils/bt/configs/bt_stack.conf
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/configs/bt_stack.conf
rename to src/antlion/test_utils/bt/configs/bt_stack.conf
diff --git a/src/antlion_contrib/test_utils/bt/configs/dis_mitm_bt_stack.conf b/src/antlion/test_utils/bt/configs/dis_mitm_bt_stack.conf
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/configs/dis_mitm_bt_stack.conf
rename to src/antlion/test_utils/bt/configs/dis_mitm_bt_stack.conf
diff --git a/src/antlion_contrib/test_utils/bt/configs/non_bond_bt_stack.conf b/src/antlion/test_utils/bt/configs/non_bond_bt_stack.conf
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/configs/non_bond_bt_stack.conf
rename to src/antlion/test_utils/bt/configs/non_bond_bt_stack.conf
diff --git a/src/antlion_contrib/test_utils/bt/gatt_test_database.py b/src/antlion/test_utils/bt/gatt_test_database.py
similarity index 99%
rename from src/antlion_contrib/test_utils/bt/gatt_test_database.py
rename to src/antlion/test_utils/bt/gatt_test_database.py
index 666ee96..6c452cd 100644
--- a/src/antlion_contrib/test_utils/bt/gatt_test_database.py
+++ b/src/antlion/test_utils/bt/gatt_test_database.py
@@ -14,12 +14,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic
-from antlion_contrib.test_utils.bt.bt_constants import gatt_descriptor
-from antlion_contrib.test_utils.bt.bt_constants import gatt_service_types
-from antlion_contrib.test_utils.bt.bt_constants import gatt_char_types
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic_value_format
-from antlion_contrib.test_utils.bt.bt_constants import gatt_char_desc_uuids
+from antlion.test_utils.bt.bt_constants import gatt_characteristic
+from antlion.test_utils.bt.bt_constants import gatt_descriptor
+from antlion.test_utils.bt.bt_constants import gatt_service_types
+from antlion.test_utils.bt.bt_constants import gatt_char_types
+from antlion.test_utils.bt.bt_constants import gatt_characteristic_value_format
+from antlion.test_utils.bt.bt_constants import gatt_char_desc_uuids
 
 STRING_512BYTES = '''
 11111222223333344444555556666677777888889999900000
diff --git a/src/antlion_contrib/test_utils/bt/gattc_lib.py b/src/antlion/test_utils/bt/gattc_lib.py
similarity index 95%
rename from src/antlion_contrib/test_utils/bt/gattc_lib.py
rename to src/antlion/test_utils/bt/gattc_lib.py
index 83f0cca..efd0c4a 100644
--- a/src/antlion_contrib/test_utils/bt/gattc_lib.py
+++ b/src/antlion/test_utils/bt/gattc_lib.py
@@ -17,20 +17,20 @@
 GATT Client Libraries
 """
 
-from antlion_contrib.test_utils.bt.bt_constants import default_le_connection_interval_ms
-from antlion_contrib.test_utils.bt.bt_constants import default_bluetooth_socket_timeout_ms
-from antlion_contrib.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_connection
-from antlion_contrib.test_utils.bt.bt_gatt_utils import setup_gatt_mtu
-from antlion_contrib.test_utils.bt.bt_constants import ble_scan_settings_modes
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_strings
-from antlion_contrib.test_utils.bt.bt_constants import gatt_char_desc_uuids
-from antlion_contrib.test_utils.bt.bt_constants import gatt_descriptor
-from antlion_contrib.test_utils.bt.bt_constants import gatt_transport
-from antlion_contrib.test_utils.bt.bt_constants import le_default_supervision_timeout
-from antlion_contrib.test_utils.bt.bt_constants import le_connection_interval_time_step_ms
-from antlion_contrib.test_utils.bt.bt_constants import scan_result
-from antlion_contrib.test_utils.bt.bt_gatt_utils import log_gatt_server_uuids
+from antlion.test_utils.bt.bt_constants import default_le_connection_interval_ms
+from antlion.test_utils.bt.bt_constants import default_bluetooth_socket_timeout_ms
+from antlion.test_utils.bt.bt_gatt_utils import disconnect_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_connection
+from antlion.test_utils.bt.bt_gatt_utils import setup_gatt_mtu
+from antlion.test_utils.bt.bt_constants import ble_scan_settings_modes
+from antlion.test_utils.bt.bt_constants import gatt_cb_strings
+from antlion.test_utils.bt.bt_constants import gatt_char_desc_uuids
+from antlion.test_utils.bt.bt_constants import gatt_descriptor
+from antlion.test_utils.bt.bt_constants import gatt_transport
+from antlion.test_utils.bt.bt_constants import le_default_supervision_timeout
+from antlion.test_utils.bt.bt_constants import le_connection_interval_time_step_ms
+from antlion.test_utils.bt.bt_constants import scan_result
+from antlion.test_utils.bt.bt_gatt_utils import log_gatt_server_uuids
 
 import time
 
diff --git a/src/antlion_contrib/test_utils/bt/gatts_lib.py b/src/antlion/test_utils/bt/gatts_lib.py
similarity index 95%
rename from src/antlion_contrib/test_utils/bt/gatts_lib.py
rename to src/antlion/test_utils/bt/gatts_lib.py
index 052d039..e7828d0 100644
--- a/src/antlion_contrib/test_utils/bt/gatts_lib.py
+++ b/src/antlion/test_utils/bt/gatts_lib.py
@@ -18,16 +18,16 @@
 
 from antlion.keys import Config
 from antlion.utils import rand_ascii_str
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_strings
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic_value_format
-from antlion_contrib.test_utils.bt.bt_constants import gatt_cb_err
-from antlion_contrib.test_utils.bt.bt_constants import gatt_transport
-from antlion_contrib.test_utils.bt.bt_constants import gatt_event
-from antlion_contrib.test_utils.bt.bt_constants import gatt_server_responses
-from antlion_contrib.test_utils.bt.bt_constants import gatt_service_types
-from antlion_contrib.test_utils.bt.bt_constants import small_timeout
-from antlion_contrib.test_utils.bt.gatt_test_database import STRING_512BYTES
+from antlion.test_utils.bt.bt_constants import gatt_cb_strings
+from antlion.test_utils.bt.bt_constants import gatt_characteristic
+from antlion.test_utils.bt.bt_constants import gatt_characteristic_value_format
+from antlion.test_utils.bt.bt_constants import gatt_cb_err
+from antlion.test_utils.bt.bt_constants import gatt_transport
+from antlion.test_utils.bt.bt_constants import gatt_event
+from antlion.test_utils.bt.bt_constants import gatt_server_responses
+from antlion.test_utils.bt.bt_constants import gatt_service_types
+from antlion.test_utils.bt.bt_constants import small_timeout
+from antlion.test_utils.bt.gatt_test_database import STRING_512BYTES
 
 from antlion.utils import exe_cmd
 from math import ceil
diff --git a/src/antlion_contrib/test_utils/bt/native_bt_test_utils.py b/src/antlion/test_utils/bt/native_bt_test_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/native_bt_test_utils.py
rename to src/antlion/test_utils/bt/native_bt_test_utils.py
diff --git a/src/antlion_contrib/test_utils/bt/protos/__init__.py b/src/antlion/test_utils/bt/protos/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/protos/__init__.py
rename to src/antlion/test_utils/bt/protos/__init__.py
diff --git a/src/antlion_contrib/test_utils/bt/protos/bluetooth.proto b/src/antlion/test_utils/bt/protos/bluetooth.proto
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/protos/bluetooth.proto
rename to src/antlion/test_utils/bt/protos/bluetooth.proto
diff --git a/src/antlion_contrib/test_utils/bt/protos/bluetooth_pb2.py b/src/antlion/test_utils/bt/protos/bluetooth_pb2.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/protos/bluetooth_pb2.py
rename to src/antlion/test_utils/bt/protos/bluetooth_pb2.py
diff --git a/src/antlion_contrib/test_utils/bt/pts/fuchsia_pts_ics_lib.py b/src/antlion/test_utils/bt/pts/fuchsia_pts_ics_lib.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/pts/fuchsia_pts_ics_lib.py
rename to src/antlion/test_utils/bt/pts/fuchsia_pts_ics_lib.py
diff --git a/src/antlion_contrib/test_utils/bt/pts/fuchsia_pts_ixit_lib.py b/src/antlion/test_utils/bt/pts/fuchsia_pts_ixit_lib.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/pts/fuchsia_pts_ixit_lib.py
rename to src/antlion/test_utils/bt/pts/fuchsia_pts_ixit_lib.py
diff --git a/src/antlion_contrib/test_utils/bt/pts/pts_base_class.py b/src/antlion/test_utils/bt/pts/pts_base_class.py
similarity index 97%
rename from src/antlion_contrib/test_utils/bt/pts/pts_base_class.py
rename to src/antlion/test_utils/bt/pts/pts_base_class.py
index c709edf..cee0389 100644
--- a/src/antlion_contrib/test_utils/bt/pts/pts_base_class.py
+++ b/src/antlion/test_utils/bt/pts/pts_base_class.py
@@ -28,9 +28,9 @@
 from antlion.controllers.bluetooth_pts_device import VERDICT_STRINGS
 from antlion.controllers.fuchsia_device import FuchsiaDevice
 from antlion.signals import TestSignal
-from antlion_contrib.test_utils.abstract_devices.bluetooth_device import create_bluetooth_device
-from antlion_contrib.test_utils.bt.bt_constants import gatt_transport
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
+from antlion.test_utils.abstract_devices.bluetooth_device import create_bluetooth_device
+from antlion.test_utils.bt.bt_constants import gatt_transport
+from antlion.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
 
 
 class PtsBaseClass(BaseTestClass):
diff --git a/src/antlion_contrib/test_utils/bt/rfcomm_lib.py b/src/antlion/test_utils/bt/rfcomm_lib.py
similarity index 94%
rename from src/antlion_contrib/test_utils/bt/rfcomm_lib.py
rename to src/antlion/test_utils/bt/rfcomm_lib.py
index 08db2fc..62d650c 100644
--- a/src/antlion_contrib/test_utils/bt/rfcomm_lib.py
+++ b/src/antlion/test_utils/bt/rfcomm_lib.py
@@ -17,8 +17,8 @@
 Bluetooth adapter libraries
 """
 
-from antlion_contrib.test_utils.bt.bt_constants import bt_rfcomm_uuids
-from antlion_contrib.test_utils.bt.bt_test_utils import set_bt_scan_mode
+from antlion.test_utils.bt.bt_constants import bt_rfcomm_uuids
+from antlion.test_utils.bt.bt_test_utils import set_bt_scan_mode
 
 
 class RfcommLib():
diff --git a/src/antlion_contrib/test_utils/bt/shell_commands_lib.py b/src/antlion/test_utils/bt/shell_commands_lib.py
similarity index 100%
rename from src/antlion_contrib/test_utils/bt/shell_commands_lib.py
rename to src/antlion/test_utils/bt/shell_commands_lib.py
diff --git a/src/antlion_contrib/test_utils/bt/simulated_carkit_device.py b/src/antlion/test_utils/bt/simulated_carkit_device.py
similarity index 96%
rename from src/antlion_contrib/test_utils/bt/simulated_carkit_device.py
rename to src/antlion/test_utils/bt/simulated_carkit_device.py
index c9840a9..533184e 100644
--- a/src/antlion_contrib/test_utils/bt/simulated_carkit_device.py
+++ b/src/antlion/test_utils/bt/simulated_carkit_device.py
@@ -17,7 +17,7 @@
 from antlion import asserts
 
 from antlion.controllers import android_device
-from antlion_contrib.test_utils.bt.bt_test_utils import bluetooth_enabled_check
+from antlion.test_utils.bt.bt_test_utils import bluetooth_enabled_check
 
 # TODO: This class to be deprecated for
 # ../acts/test_utils/abstract_devices/bluetooth_handsfree_abstract_device.py
diff --git a/src/antlion_contrib/test_utils/fuchsia/__init__.py b/src/antlion/test_utils/fuchsia/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/fuchsia/__init__.py
rename to src/antlion/test_utils/fuchsia/__init__.py
diff --git a/src/antlion_contrib/test_utils/fuchsia/bt_test_utils.py b/src/antlion/test_utils/fuchsia/bt_test_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/fuchsia/bt_test_utils.py
rename to src/antlion/test_utils/fuchsia/bt_test_utils.py
diff --git a/src/antlion_contrib/test_utils/fuchsia/sdp_records.py b/src/antlion/test_utils/fuchsia/sdp_records.py
similarity index 98%
rename from src/antlion_contrib/test_utils/fuchsia/sdp_records.py
rename to src/antlion/test_utils/fuchsia/sdp_records.py
index 21d4f91..84f442e 100644
--- a/src/antlion_contrib/test_utils/fuchsia/sdp_records.py
+++ b/src/antlion/test_utils/fuchsia/sdp_records.py
@@ -14,8 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from antlion_contrib.test_utils.bt.bt_constants import bt_attribute_values
-from antlion_contrib.test_utils.bt.bt_constants import sig_uuid_constants
+from antlion.test_utils.bt.bt_constants import bt_attribute_values
+from antlion.test_utils.bt.bt_constants import sig_uuid_constants
 
 BASE_UUID = sig_uuid_constants['BASE_UUID']
 
diff --git a/src/antlion_contrib/test_utils/fuchsia/utils.py b/src/antlion/test_utils/fuchsia/utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/fuchsia/utils.py
rename to src/antlion/test_utils/fuchsia/utils.py
diff --git a/src/antlion_contrib/test_utils/fuchsia/wmm_test_cases.py b/src/antlion/test_utils/fuchsia/wmm_test_cases.py
similarity index 100%
rename from src/antlion_contrib/test_utils/fuchsia/wmm_test_cases.py
rename to src/antlion/test_utils/fuchsia/wmm_test_cases.py
diff --git a/src/antlion_contrib/test_utils/net/NetstackBaseTest.py b/src/antlion/test_utils/net/NetstackBaseTest.py
similarity index 100%
rename from src/antlion_contrib/test_utils/net/NetstackBaseTest.py
rename to src/antlion/test_utils/net/NetstackBaseTest.py
diff --git a/src/antlion_contrib/test_utils/net/__init__.py b/src/antlion/test_utils/net/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/net/__init__.py
rename to src/antlion/test_utils/net/__init__.py
diff --git a/src/antlion_contrib/test_utils/net/arduino_test_utils.py b/src/antlion/test_utils/net/arduino_test_utils.py
similarity index 96%
rename from src/antlion_contrib/test_utils/net/arduino_test_utils.py
rename to src/antlion/test_utils/net/arduino_test_utils.py
index a9acc6c..45fc21a 100644
--- a/src/antlion_contrib/test_utils/net/arduino_test_utils.py
+++ b/src/antlion/test_utils/net/arduino_test_utils.py
@@ -16,7 +16,7 @@
 
 from antlion import asserts
 from antlion import utils
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
 
 ARDUINO = "/root/arduino/arduino-1.8.5/arduino "
 CONNECT_WIFI = "/arduino/connect_wifi/connect_wifi.ino"
diff --git a/src/antlion_contrib/test_utils/net/connectivity_const.py b/src/antlion/test_utils/net/connectivity_const.py
similarity index 100%
rename from src/antlion_contrib/test_utils/net/connectivity_const.py
rename to src/antlion/test_utils/net/connectivity_const.py
diff --git a/src/antlion_contrib/test_utils/net/connectivity_test_utils.py b/src/antlion/test_utils/net/connectivity_test_utils.py
similarity index 98%
rename from src/antlion_contrib/test_utils/net/connectivity_test_utils.py
rename to src/antlion/test_utils/net/connectivity_test_utils.py
index 92b8849..6841de9 100644
--- a/src/antlion_contrib/test_utils/net/connectivity_test_utils.py
+++ b/src/antlion/test_utils/net/connectivity_test_utils.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 from antlion import asserts
-from antlion_contrib.test_utils.net import connectivity_const as cconst
+from antlion.test_utils.net import connectivity_const as cconst
 from queue import Empty
 
 def _listen_for_keepalive_event(ad, key, msg, ka_event):
diff --git a/src/antlion_contrib/test_utils/net/ipsec_test_utils.py b/src/antlion/test_utils/net/ipsec_test_utils.py
similarity index 98%
rename from src/antlion_contrib/test_utils/net/ipsec_test_utils.py
rename to src/antlion/test_utils/net/ipsec_test_utils.py
index 625b7c4..657aa7f 100644
--- a/src/antlion_contrib/test_utils/net/ipsec_test_utils.py
+++ b/src/antlion/test_utils/net/ipsec_test_utils.py
@@ -16,7 +16,7 @@
 import os
 import re
 
-from antlion_contrib.test_utils.net import connectivity_const as cconst
+from antlion.test_utils.net import connectivity_const as cconst
 from antlion import asserts
 
 PKTS = 5
diff --git a/src/antlion_contrib/test_utils/net/net_test_utils.py b/src/antlion/test_utils/net/net_test_utils.py
similarity index 99%
rename from src/antlion_contrib/test_utils/net/net_test_utils.py
rename to src/antlion/test_utils/net/net_test_utils.py
index 2886fcf..c4b6d0c 100644
--- a/src/antlion_contrib/test_utils/net/net_test_utils.py
+++ b/src/antlion/test_utils/net/net_test_utils.py
@@ -27,7 +27,7 @@
 from antlion.libs.proc import job
 from antlion.utils import start_standing_subprocess
 from antlion.utils import stop_standing_subprocess
-from antlion_contrib.test_utils.net import connectivity_const as cconst
+from antlion.test_utils.net import connectivity_const as cconst
 
 VPN_CONST = cconst.VpnProfile
 VPN_TYPE = cconst.VpnProfileType
diff --git a/src/antlion_contrib/test_utils/net/nsd_const.py b/src/antlion/test_utils/net/nsd_const.py
similarity index 100%
rename from src/antlion_contrib/test_utils/net/nsd_const.py
rename to src/antlion/test_utils/net/nsd_const.py
diff --git a/src/antlion_contrib/test_utils/net/socket_test_utils.py b/src/antlion/test_utils/net/socket_test_utils.py
similarity index 98%
rename from src/antlion_contrib/test_utils/net/socket_test_utils.py
rename to src/antlion/test_utils/net/socket_test_utils.py
index 4bd39f5..a2d695c 100644
--- a/src/antlion_contrib/test_utils/net/socket_test_utils.py
+++ b/src/antlion/test_utils/net/socket_test_utils.py
@@ -16,7 +16,7 @@
 import threading
 import time
 
-from antlion_contrib.test_utils.net import connectivity_const as cconst
+from antlion.test_utils.net import connectivity_const as cconst
 from antlion import asserts
 
 MSG = "Test message "
diff --git a/src/antlion_contrib/test_utils/net/ui_utils.py b/src/antlion/test_utils/net/ui_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/net/ui_utils.py
rename to src/antlion/test_utils/net/ui_utils.py
diff --git a/src/antlion_contrib/test_utils/users/__init__.py b/src/antlion/test_utils/users/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/users/__init__.py
rename to src/antlion/test_utils/users/__init__.py
diff --git a/src/antlion_contrib/test_utils/users/users.py b/src/antlion/test_utils/users/users.py
similarity index 100%
rename from src/antlion_contrib/test_utils/users/users.py
rename to src/antlion/test_utils/users/users.py
diff --git a/src/antlion_contrib/test_utils/wifi/OWNERS b/src/antlion/test_utils/wifi/OWNERS
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/OWNERS
rename to src/antlion/test_utils/wifi/OWNERS
diff --git a/src/antlion_contrib/test_utils/wifi/RttPostFlightTest.py b/src/antlion/test_utils/wifi/RttPostFlightTest.py
similarity index 87%
rename from src/antlion_contrib/test_utils/wifi/RttPostFlightTest.py
rename to src/antlion/test_utils/wifi/RttPostFlightTest.py
index ee03ad0..16d85e2 100644
--- a/src/antlion_contrib/test_utils/wifi/RttPostFlightTest.py
+++ b/src/antlion/test_utils/wifi/RttPostFlightTest.py
@@ -15,10 +15,10 @@
 # limitations under the License.
 
 import time
-import antlion_contrib.test_utils.wifi.rpm_controller_utils as rutils
-import antlion_contrib.test_utils.wifi.wifi_test_utils as wutils
+import antlion.test_utils.wifi.rpm_controller_utils as rutils
+import antlion.test_utils.wifi.wifi_test_utils as wutils
 from antlion import asserts
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 SSID = "DO_NOT_CONNECT"
 TIMEOUT = 60
diff --git a/src/antlion_contrib/test_utils/wifi/RttPreFlightTest.py b/src/antlion/test_utils/wifi/RttPreFlightTest.py
similarity index 87%
rename from src/antlion_contrib/test_utils/wifi/RttPreFlightTest.py
rename to src/antlion/test_utils/wifi/RttPreFlightTest.py
index f0688cd..0ab6d99 100644
--- a/src/antlion_contrib/test_utils/wifi/RttPreFlightTest.py
+++ b/src/antlion/test_utils/wifi/RttPreFlightTest.py
@@ -15,10 +15,10 @@
 # limitations under the License.
 
 import time
-import antlion_contrib.test_utils.wifi.rpm_controller_utils as rutils
-import antlion_contrib.test_utils.wifi.wifi_test_utils as wutils
+import antlion.test_utils.wifi.rpm_controller_utils as rutils
+import antlion.test_utils.wifi.wifi_test_utils as wutils
 from antlion import asserts
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 SSID = "DO_NOT_CONNECT"
 TIMEOUT = 60
diff --git a/src/antlion_contrib/test_utils/wifi/WifiBaseTest.py b/src/antlion/test_utils/wifi/WifiBaseTest.py
similarity index 97%
rename from src/antlion_contrib/test_utils/wifi/WifiBaseTest.py
rename to src/antlion/test_utils/wifi/WifiBaseTest.py
index 36a8a3d..ac770f9 100644
--- a/src/antlion_contrib/test_utils/wifi/WifiBaseTest.py
+++ b/src/antlion/test_utils/wifi/WifiBaseTest.py
@@ -31,8 +31,8 @@
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
 from antlion.keys import Config
-from antlion_contrib.test_utils.net import net_test_utils as nutils
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.net import net_test_utils as nutils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
 
 from mobly.base_test import STAGE_NAME_TEARDOWN_CLASS
 
@@ -43,6 +43,7 @@
 
 
 class WifiBaseTest(BaseTestClass):
+
     def __init__(self, configs):
         super().__init__(configs)
         self.enable_packet_log = False
@@ -173,21 +174,25 @@
         the DHCP and hostapd logs and outputs them to the correct path.
         """
         current_path = context.get_current_context().get_full_output_path()
-        dhcp_full_out_path = os.path.join(current_path, "dhcp_log.txt")
 
         dhcp_log = self.access_point.get_dhcp_logs()
         if dhcp_log:
-            dhcp_log_file = open(dhcp_full_out_path, 'w')
-            dhcp_log_file.write(dhcp_log)
-            dhcp_log_file.close()
+            dhcp_log_path = os.path.join(current_path, "dhcp_log.txt")
+            with open(dhcp_log_path, 'w') as f:
+                f.write(dhcp_log)
 
         hostapd_logs = self.access_point.get_hostapd_logs()
         for interface in hostapd_logs:
-            out_name = interface + "_hostapd_log.txt"
-            hostapd_full_out_path = os.path.join(current_path, out_name)
-            hostapd_log_file = open(hostapd_full_out_path, 'w')
-            hostapd_log_file.write(hostapd_logs[interface])
-            hostapd_log_file.close()
+            hostapd_log_path = os.path.join(current_path,
+                                            f'hostapd_log_{interface}.txt')
+            with open(hostapd_log_path, 'w') as f:
+                f.write(hostapd_logs[interface])
+
+        radvd_log = self.access_point.get_radvd_logs()
+        if radvd_log:
+            radvd_log_path = os.path.join(current_path, "radvd_log.txt")
+            with open(radvd_log_path, 'w') as f:
+                f.write(radvd_log)
 
     def get_psk_network(
             self,
@@ -945,6 +950,7 @@
 
     @staticmethod
     def wifi_test_wrap(fn):
+
         def _safe_wrap_test_case(self, *args, **kwargs):
             test_id = "%s:%s:%s" % (self.__class__.__name__, self.test_name,
                                     self.log_begin_time.replace(' ', '-'))
diff --git a/src/antlion_contrib/test_utils/wifi/__init__.py b/src/antlion/test_utils/wifi/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/__init__.py
rename to src/antlion/test_utils/wifi/__init__.py
diff --git a/src/antlion_contrib/test_utils/wifi/aware/AwareBaseTest.py b/src/antlion/test_utils/wifi/aware/AwareBaseTest.py
similarity index 95%
rename from src/antlion_contrib/test_utils/wifi/aware/AwareBaseTest.py
rename to src/antlion/test_utils/wifi/aware/AwareBaseTest.py
index 8bcce71..45b222d 100644
--- a/src/antlion_contrib/test_utils/wifi/aware/AwareBaseTest.py
+++ b/src/antlion/test_utils/wifi/aware/AwareBaseTest.py
@@ -20,10 +20,10 @@
 from antlion import utils
 from antlion.base_test import BaseTestClass
 from antlion.keys import Config
-from antlion_contrib.test_utils.net import net_test_utils as nutils
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
-from antlion_contrib.test_utils.wifi.aware import aware_const as aconsts
-from antlion_contrib.test_utils.wifi.aware import aware_test_utils as autils
+from antlion.test_utils.net import net_test_utils as nutils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.wifi.aware import aware_const as aconsts
+from antlion.test_utils.wifi.aware import aware_test_utils as autils
 
 
 class AwareBaseTest(BaseTestClass):
diff --git a/src/antlion_contrib/test_utils/wifi/aware/__init__.py b/src/antlion/test_utils/wifi/aware/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/aware/__init__.py
rename to src/antlion/test_utils/wifi/aware/__init__.py
diff --git a/src/antlion_contrib/test_utils/wifi/aware/aware_const.py b/src/antlion/test_utils/wifi/aware/aware_const.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/aware/aware_const.py
rename to src/antlion/test_utils/wifi/aware/aware_const.py
diff --git a/src/antlion_contrib/test_utils/wifi/aware/aware_test_utils.py b/src/antlion/test_utils/wifi/aware/aware_test_utils.py
similarity index 99%
rename from src/antlion_contrib/test_utils/wifi/aware/aware_test_utils.py
rename to src/antlion/test_utils/wifi/aware/aware_test_utils.py
index 2de7a1d..6c54791 100644
--- a/src/antlion_contrib/test_utils/wifi/aware/aware_test_utils.py
+++ b/src/antlion/test_utils/wifi/aware/aware_test_utils.py
@@ -22,9 +22,9 @@
 import time
 from antlion import asserts
 
-from antlion_contrib.test_utils.net import connectivity_const as cconsts
-from antlion_contrib.test_utils.net import socket_test_utils as sutils
-from antlion_contrib.test_utils.wifi.aware import aware_const as aconsts
+from antlion.test_utils.net import connectivity_const as cconsts
+from antlion.test_utils.net import socket_test_utils as sutils
+from antlion.test_utils.wifi.aware import aware_const as aconsts
 
 # arbitrary timeout for events
 EVENT_TIMEOUT = 10
diff --git a/src/antlion_contrib/test_utils/wifi/ota_chamber.py b/src/antlion/test_utils/wifi/ota_chamber.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/ota_chamber.py
rename to src/antlion/test_utils/wifi/ota_chamber.py
diff --git a/src/antlion_contrib/test_utils/wifi/ota_sniffer.py b/src/antlion/test_utils/wifi/ota_sniffer.py
similarity index 99%
rename from src/antlion_contrib/test_utils/wifi/ota_sniffer.py
rename to src/antlion/test_utils/wifi/ota_sniffer.py
index 51d9296..4200d24 100644
--- a/src/antlion_contrib/test_utils/wifi/ota_sniffer.py
+++ b/src/antlion/test_utils/wifi/ota_sniffer.py
@@ -18,7 +18,7 @@
 import os
 import posixpath
 import time
-import antlion_contrib.test_utils.wifi.wifi_test_utils as wutils
+import antlion.test_utils.wifi.wifi_test_utils as wutils
 
 from antlion import context
 from antlion import logger
diff --git a/src/antlion_contrib/test_utils/wifi/p2p/WifiP2pBaseTest.py b/src/antlion/test_utils/wifi/p2p/WifiP2pBaseTest.py
similarity index 96%
rename from src/antlion_contrib/test_utils/wifi/p2p/WifiP2pBaseTest.py
rename to src/antlion/test_utils/wifi/p2p/WifiP2pBaseTest.py
index 2114934..5fb8081 100644
--- a/src/antlion_contrib/test_utils/wifi/p2p/WifiP2pBaseTest.py
+++ b/src/antlion/test_utils/wifi/p2p/WifiP2pBaseTest.py
@@ -23,9 +23,9 @@
 from antlion import utils
 from antlion.base_test import BaseTestClass
 from antlion.keys import Config
-from antlion_contrib.test_utils.net import net_test_utils as nutils
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
-from antlion_contrib.test_utils.wifi.p2p import wifi_p2p_const as p2pconsts
+from antlion.test_utils.net import net_test_utils as nutils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.wifi.p2p import wifi_p2p_const as p2pconsts
 
 WAIT_TIME = 60
 
diff --git a/src/antlion_contrib/test_utils/wifi/p2p/__init__.py b/src/antlion/test_utils/wifi/p2p/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/p2p/__init__.py
rename to src/antlion/test_utils/wifi/p2p/__init__.py
diff --git a/src/antlion_contrib/test_utils/wifi/p2p/wifi_p2p_const.py b/src/antlion/test_utils/wifi/p2p/wifi_p2p_const.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/p2p/wifi_p2p_const.py
rename to src/antlion/test_utils/wifi/p2p/wifi_p2p_const.py
diff --git a/src/antlion_contrib/test_utils/wifi/p2p/wifi_p2p_test_utils.py b/src/antlion/test_utils/wifi/p2p/wifi_p2p_test_utils.py
similarity index 99%
rename from src/antlion_contrib/test_utils/wifi/p2p/wifi_p2p_test_utils.py
rename to src/antlion/test_utils/wifi/p2p/wifi_p2p_test_utils.py
index 2811675..f9144b5 100755
--- a/src/antlion_contrib/test_utils/wifi/p2p/wifi_p2p_test_utils.py
+++ b/src/antlion/test_utils/wifi/p2p/wifi_p2p_test_utils.py
@@ -18,7 +18,7 @@
 
 from antlion import asserts
 from antlion import utils
-from antlion_contrib.test_utils.wifi.p2p import wifi_p2p_const as p2pconsts
+from antlion.test_utils.wifi.p2p import wifi_p2p_const as p2pconsts
 import antlion.utils
 
 
diff --git a/src/antlion_contrib/test_utils/wifi/pdu_controller_utils.py b/src/antlion/test_utils/wifi/pdu_controller_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/pdu_controller_utils.py
rename to src/antlion/test_utils/wifi/pdu_controller_utils.py
diff --git a/src/antlion_contrib/test_utils/wifi/rpm_controller_utils.py b/src/antlion/test_utils/wifi/rpm_controller_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/rpm_controller_utils.py
rename to src/antlion/test_utils/wifi/rpm_controller_utils.py
diff --git a/src/antlion_contrib/test_utils/wifi/rtt/RttBaseTest.py b/src/antlion/test_utils/wifi/rtt/RttBaseTest.py
similarity index 93%
rename from src/antlion_contrib/test_utils/wifi/rtt/RttBaseTest.py
rename to src/antlion/test_utils/wifi/rtt/RttBaseTest.py
index 75368cd..bbd3efd 100644
--- a/src/antlion_contrib/test_utils/wifi/rtt/RttBaseTest.py
+++ b/src/antlion/test_utils/wifi/rtt/RttBaseTest.py
@@ -20,10 +20,10 @@
 from antlion import utils
 from antlion.base_test import BaseTestClass
 from antlion.keys import Config
-from antlion_contrib.test_utils.net import net_test_utils as nutils
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
-from antlion_contrib.test_utils.wifi.rtt import rtt_const as rconsts
-from antlion_contrib.test_utils.wifi.rtt import rtt_test_utils as rutils
+from antlion.test_utils.net import net_test_utils as nutils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.wifi.rtt import rtt_const as rconsts
+from antlion.test_utils.wifi.rtt import rtt_test_utils as rutils
 
 
 class RttBaseTest(BaseTestClass):
diff --git a/src/antlion_contrib/test_utils/wifi/rtt/__init__.py b/src/antlion/test_utils/wifi/rtt/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/rtt/__init__.py
rename to src/antlion/test_utils/wifi/rtt/__init__.py
diff --git a/src/antlion_contrib/test_utils/wifi/rtt/rtt_const.py b/src/antlion/test_utils/wifi/rtt/rtt_const.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/rtt/rtt_const.py
rename to src/antlion/test_utils/wifi/rtt/rtt_const.py
diff --git a/src/antlion_contrib/test_utils/wifi/rtt/rtt_test_utils.py b/src/antlion/test_utils/wifi/rtt/rtt_test_utils.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/rtt/rtt_test_utils.py
rename to src/antlion/test_utils/wifi/rtt/rtt_test_utils.py
index 2e8f707..a0777d8 100644
--- a/src/antlion_contrib/test_utils/wifi/rtt/rtt_test_utils.py
+++ b/src/antlion/test_utils/wifi/rtt/rtt_test_utils.py
@@ -20,8 +20,8 @@
 import time
 
 from antlion import asserts
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
-from antlion_contrib.test_utils.wifi.rtt import rtt_const as rconsts
+from antlion.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.wifi.rtt import rtt_const as rconsts
 
 # arbitrary timeout for events
 EVENT_TIMEOUT = 15
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_constants.py b/src/antlion/test_utils/wifi/wifi_constants.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/wifi_constants.py
rename to src/antlion/test_utils/wifi/wifi_constants.py
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_datastore_utils.py b/src/antlion/test_utils/wifi/wifi_datastore_utils.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_datastore_utils.py
rename to src/antlion/test_utils/wifi/wifi_datastore_utils.py
index 3c922bc..0cd0820 100755
--- a/src/antlion_contrib/test_utils/wifi/wifi_datastore_utils.py
+++ b/src/antlion/test_utils/wifi/wifi_datastore_utils.py
@@ -21,7 +21,7 @@
 from antlion import asserts
 from antlion import signals
 from antlion import utils
-from antlion_contrib.test_utils.wifi import wifi_constants
+from antlion.test_utils.wifi import wifi_constants
 """This file consists of all the helper methods needed to interact with the
    Datastore @ https://chaos-188802.appspot.com/ used for Android Interop
    testing.
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/__init__.py b/src/antlion/test_utils/wifi/wifi_performance_test_utils/__init__.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/__init__.py
rename to src/antlion/test_utils/wifi/wifi_performance_test_utils/__init__.py
index 3ed523e..26466a8 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/__init__.py
+++ b/src/antlion/test_utils/wifi/wifi_performance_test_utils/__init__.py
@@ -25,10 +25,10 @@
 from antlion import utils
 from antlion.controllers.android_device import AndroidDevice
 from antlion.controllers.utils_lib import ssh
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
-from antlion_contrib.test_utils.wifi.wifi_performance_test_utils import ping_utils
-from antlion_contrib.test_utils.wifi.wifi_performance_test_utils import qcom_utils
-from antlion_contrib.test_utils.wifi.wifi_performance_test_utils import brcm_utils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.wifi.wifi_performance_test_utils import ping_utils
+from antlion.test_utils.wifi.wifi_performance_test_utils import qcom_utils
+from antlion.test_utils.wifi.wifi_performance_test_utils import brcm_utils
 
 from concurrent.futures import ThreadPoolExecutor
 
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/bokeh_figure.py b/src/antlion/test_utils/wifi/wifi_performance_test_utils/bokeh_figure.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/bokeh_figure.py
rename to src/antlion/test_utils/wifi/wifi_performance_test_utils/bokeh_figure.py
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/brcm_utils.py b/src/antlion/test_utils/wifi/wifi_performance_test_utils/brcm_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/brcm_utils.py
rename to src/antlion/test_utils/wifi/wifi_performance_test_utils/brcm_utils.py
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/ping_utils.py b/src/antlion/test_utils/wifi/wifi_performance_test_utils/ping_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/ping_utils.py
rename to src/antlion/test_utils/wifi/wifi_performance_test_utils/ping_utils.py
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/qcom_utils.py b/src/antlion/test_utils/wifi/wifi_performance_test_utils/qcom_utils.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/wifi_performance_test_utils/qcom_utils.py
rename to src/antlion/test_utils/wifi/wifi_performance_test_utils/qcom_utils.py
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_power_test_utils.py b/src/antlion/test_utils/wifi/wifi_power_test_utils.py
similarity index 99%
rename from src/antlion_contrib/test_utils/wifi/wifi_power_test_utils.py
rename to src/antlion/test_utils/wifi/wifi_power_test_utils.py
index 54f7d8a..cbd51fc 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_power_test_utils.py
+++ b/src/antlion/test_utils/wifi/wifi_power_test_utils.py
@@ -19,7 +19,7 @@
 from antlion import utils
 from antlion.libs.proc import job
 from antlion.controllers.ap_lib import bridge_interface as bi
-from antlion_contrib.test_utils.wifi import wifi_test_utils as wutils
+from antlion.test_utils.wifi import wifi_test_utils as wutils
 from antlion.controllers.adb_lib.error import AdbCommandError
 from antlion.controllers.ap_lib import hostapd_security
 from antlion.controllers.ap_lib import hostapd_ap_preset
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/__init__.py b/src/antlion/test_utils/wifi/wifi_retail_ap/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/__init__.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/__init__.py
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/brcm_ref.py b/src/antlion/test_utils/wifi/wifi_retail_ap/brcm_ref.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/brcm_ref.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/brcm_ref.py
index ddb5f86..d5461f8 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/brcm_ref.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/brcm_ref.py
@@ -1,8 +1,8 @@
 import collections
 import numpy
 import time
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import WifiRetailAP
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import BlockingBrowser
+from antlion.test_utils.wifi.wifi_retail_ap import WifiRetailAP
+from antlion.test_utils.wifi.wifi_retail_ap import BlockingBrowser
 
 BROWSER_WAIT_SHORT = 1
 BROWSER_WAIT_MED = 3
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/google_wifi.py b/src/antlion/test_utils/wifi/wifi_retail_ap/google_wifi.py
similarity index 99%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/google_wifi.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/google_wifi.py
index f9025c6..ee2a821 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/google_wifi.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/google_wifi.py
@@ -18,7 +18,7 @@
 from antlion.controllers.ap_lib import bridge_interface
 from antlion.controllers.ap_lib import hostapd_security
 from antlion.controllers.ap_lib import hostapd_ap_preset
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import WifiRetailAP
+from antlion.test_utils.wifi.wifi_retail_ap import WifiRetailAP
 
 
 class GoogleWifiAP(WifiRetailAP):
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7000.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7000.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7000.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7000.py
index de950cb..3f73aa6 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7000.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7000.py
@@ -15,8 +15,8 @@
 # limitations under the License.
 
 import time
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import WifiRetailAP
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import BlockingBrowser
+from antlion.test_utils.wifi.wifi_retail_ap import WifiRetailAP
+from antlion.test_utils.wifi.wifi_retail_ap import BlockingBrowser
 
 BROWSER_WAIT_SHORT = 1
 BROWSER_WAIT_MED = 3
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7500.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7500.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7500.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7500.py
index d150146..4c2729e 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7500.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7500.py
@@ -16,8 +16,8 @@
 
 import selenium
 import time
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import WifiRetailAP
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import BlockingBrowser
+from antlion.test_utils.wifi.wifi_retail_ap import WifiRetailAP
+from antlion.test_utils.wifi.wifi_retail_ap import BlockingBrowser
 
 BROWSER_WAIT_SHORT = 1
 BROWSER_WAIT_MED = 3
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7800.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7800.py
similarity index 93%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7800.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7800.py
index 5d89bd6..7528b9c 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r7800.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r7800.py
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import NetgearR7500AP
+from antlion.test_utils.wifi.wifi_retail_ap import NetgearR7500AP
 
 
 class NetgearR7800AP(NetgearR7500AP):
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r8000.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r8000.py
similarity index 97%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r8000.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r8000.py
index 26c4cbe..81b96b8 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_r8000.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_r8000.py
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import NetgearR7000AP
+from antlion.test_utils.wifi.wifi_retail_ap import NetgearR7000AP
 
 
 class NetgearR8000AP(NetgearR7000AP):
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax120.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax120.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax120.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax120.py
index ab1b55d..36ed18d 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax120.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax120.py
@@ -16,8 +16,8 @@
 
 import selenium
 import time
-from antlion_contrib.test_utils.wifi.wifi_retail_ap.netgear_r7500 import NetgearR7500AP
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import BlockingBrowser
+from antlion.test_utils.wifi.wifi_retail_ap.netgear_r7500 import NetgearR7500AP
+from antlion.test_utils.wifi.wifi_retail_ap import BlockingBrowser
 
 BROWSER_WAIT_SHORT = 1
 BROWSER_WAIT_MED = 3
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax200.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax200.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax200.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax200.py
index 191dfde..0034bf3 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax200.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax200.py
@@ -16,8 +16,8 @@
 
 import collections
 import time
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import WifiRetailAP
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import BlockingBrowser
+from antlion.test_utils.wifi.wifi_retail_ap import WifiRetailAP
+from antlion.test_utils.wifi.wifi_retail_ap import BlockingBrowser
 
 BROWSER_WAIT_SHORT = 1
 BROWSER_WAIT_MED = 3
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax80.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax80.py
similarity index 97%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax80.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax80.py
index 39de89e..6c99a3b 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_rax80.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_rax80.py
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import NetgearR7000AP
+from antlion.test_utils.wifi.wifi_retail_ap import NetgearR7000AP
 
 
 class NetgearRAX80AP(NetgearR7000AP):
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_raxe500.py b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_raxe500.py
similarity index 98%
rename from src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_raxe500.py
rename to src/antlion/test_utils/wifi/wifi_retail_ap/netgear_raxe500.py
index 3a3317b..73aeaec 100644
--- a/src/antlion_contrib/test_utils/wifi/wifi_retail_ap/netgear_raxe500.py
+++ b/src/antlion/test_utils/wifi/wifi_retail_ap/netgear_raxe500.py
@@ -18,8 +18,8 @@
 import numpy
 import re
 import time
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import WifiRetailAP
-from antlion_contrib.test_utils.wifi.wifi_retail_ap import BlockingBrowser
+from antlion.test_utils.wifi.wifi_retail_ap import WifiRetailAP
+from antlion.test_utils.wifi.wifi_retail_ap import BlockingBrowser
 
 BROWSER_WAIT_SHORT = 1
 BROWSER_WAIT_MED = 3
diff --git a/src/antlion_contrib/test_utils/wifi/wifi_test_utils.py b/src/antlion/test_utils/wifi/wifi_test_utils.py
similarity index 99%
rename from src/antlion_contrib/test_utils/wifi/wifi_test_utils.py
rename to src/antlion/test_utils/wifi/wifi_test_utils.py
index e512800..3a6105e 100755
--- a/src/antlion_contrib/test_utils/wifi/wifi_test_utils.py
+++ b/src/antlion/test_utils/wifi/wifi_test_utils.py
@@ -20,12 +20,12 @@
 import shutil
 import time
 
-from retry import retry
-
 from collections import namedtuple
 from enum import IntEnum
 from queue import Empty
 
+from tenacity import retry, stop_after_attempt, wait_fixed
+
 from antlion import asserts
 from antlion import context
 from antlion import signals
@@ -35,9 +35,9 @@
 from antlion.controllers.ap_lib import hostapd_ap_preset
 from antlion.controllers.ap_lib.hostapd_constants import BAND_2G
 from antlion.controllers.ap_lib.hostapd_constants import BAND_5G
-from antlion_contrib.test_utils.net import connectivity_const as cconsts
-from antlion_contrib.test_utils.wifi import wifi_constants
-from antlion_contrib.test_utils.wifi.aware import aware_test_utils as autils
+from antlion.test_utils.net import connectivity_const as cconsts
+from antlion.test_utils.wifi import wifi_constants
+from antlion.test_utils.wifi.aware import aware_test_utils as autils
 
 # Default timeout used for reboot, toggle WiFi and Airplane mode,
 # for the system to settle down after the operation.
@@ -2790,7 +2790,7 @@
     return False
 
 
-@retry(tries=5, delay=2)
+@retry(stop=stop_after_attempt(5), wait=wait_fixed(2))
 def validate_ping_between_two_clients(dut1, dut2):
     """Make 2 DUT ping each other.
 
diff --git a/src/antlion_contrib/test_utils_tests/__init__.py b/src/antlion/test_utils_tests/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils_tests/__init__.py
rename to src/antlion/test_utils_tests/__init__.py
diff --git a/src/antlion/test_utils_tests/acts_import_test_utils_test.py b/src/antlion/test_utils_tests/acts_import_test_utils_test.py
new file mode 100755
index 0000000..4e2ce49
--- /dev/null
+++ b/src/antlion/test_utils_tests/acts_import_test_utils_test.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+#
+# Copyright 2022 The Fuchsia Authors
+#
+# 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.
+
+import unittest
+
+
+class ActsImportTestUtilsTest(unittest.TestCase):
+    """This test class has unit tests for the implementation of everything
+    under acts_contrib.test_utils.*
+    """
+
+    def test_import_successful(self):
+        """ Test to return true if all imports were successful.
+
+        This test will fail if any import was unsuccessful.
+        """
+        try:
+            from antlion import utils
+
+            from antlion.test_utils.bt import BleEnum
+            from antlion.test_utils.bt import BluetoothBaseTest
+            from antlion.test_utils.bt import BluetoothCarHfpBaseTest
+            from antlion.test_utils.bt import BtEnum
+            from antlion.test_utils.bt import GattConnectedBaseTest
+            from antlion.test_utils.bt import GattEnum
+            from antlion.test_utils.bt import bt_contacts_utils
+            from antlion.test_utils.bt import bt_gatt_utils
+            from antlion.test_utils.bt import bt_test_utils
+            from antlion.test_utils.bt import native_bt_test_utils
+
+            from antlion.test_utils.net import connectivity_const
+            from antlion.test_utils.net import connectivity_const
+
+            from antlion.test_utils.wifi import wifi_constants
+            from antlion.test_utils.wifi import wifi_test_utils
+
+        except Exception:
+            self.fail('Unable to import all supported test_utils')
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/src/antlion_contrib/test_utils_tests/audio_analysis_integrationtest.py b/src/antlion/test_utils_tests/audio_analysis_integrationtest.py
similarity index 98%
rename from src/antlion_contrib/test_utils_tests/audio_analysis_integrationtest.py
rename to src/antlion/test_utils_tests/audio_analysis_integrationtest.py
index d7e5e81..e7c17a2 100644
--- a/src/antlion_contrib/test_utils_tests/audio_analysis_integrationtest.py
+++ b/src/antlion/test_utils_tests/audio_analysis_integrationtest.py
@@ -21,8 +21,8 @@
 import os
 import unittest
 
-import antlion_contrib.test_utils.audio_analysis_lib.audio_analysis as audio_analysis
-import antlion_contrib.test_utils.audio_analysis_lib.audio_data as audio_data
+import antlion.test_utils.audio_analysis_lib.audio_analysis as audio_analysis
+import antlion.test_utils.audio_analysis_lib.audio_data as audio_data
 
 
 class SpectralAnalysisTest(unittest.TestCase):
diff --git a/src/antlion_contrib/test_utils_tests/audio_quality_measurement_integrationtest.py b/src/antlion/test_utils_tests/audio_quality_measurement_integrationtest.py
similarity index 98%
rename from src/antlion_contrib/test_utils_tests/audio_quality_measurement_integrationtest.py
rename to src/antlion/test_utils_tests/audio_quality_measurement_integrationtest.py
index fd156a7..824bd60 100644
--- a/src/antlion_contrib/test_utils_tests/audio_quality_measurement_integrationtest.py
+++ b/src/antlion/test_utils_tests/audio_quality_measurement_integrationtest.py
@@ -22,7 +22,7 @@
 import numpy
 import unittest
 
-import antlion_contrib.test_utils.audio_analysis_lib.audio_quality_measurement as audio_quality_measurement
+import antlion.test_utils.audio_analysis_lib.audio_quality_measurement as audio_quality_measurement
 
 
 class NoiseLevelTest(unittest.TestCase):
diff --git a/src/antlion_contrib/test_utils_tests/instrumentation/__init__.py b/src/antlion/test_utils_tests/instrumentation/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils_tests/instrumentation/__init__.py
rename to src/antlion/test_utils_tests/instrumentation/__init__.py
diff --git a/src/antlion_contrib/test_utils_tests/instrumentation/device/__init__.py b/src/antlion/test_utils_tests/instrumentation/device/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils_tests/instrumentation/device/__init__.py
rename to src/antlion/test_utils_tests/instrumentation/device/__init__.py
diff --git a/src/antlion_contrib/test_utils_tests/instrumentation/device/command/__init__.py b/src/antlion/test_utils_tests/instrumentation/device/command/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils_tests/instrumentation/device/command/__init__.py
rename to src/antlion/test_utils_tests/instrumentation/device/command/__init__.py
diff --git a/src/antlion_contrib/test_utils_tests/instrumentation/device/command/instrumentation_command_builder_test.py b/src/antlion/test_utils_tests/instrumentation/device/command/instrumentation_command_builder_test.py
similarity index 95%
rename from src/antlion_contrib/test_utils_tests/instrumentation/device/command/instrumentation_command_builder_test.py
rename to src/antlion/test_utils_tests/instrumentation/device/command/instrumentation_command_builder_test.py
index 08d284a..6afae91 100755
--- a/src/antlion_contrib/test_utils_tests/instrumentation/device/command/instrumentation_command_builder_test.py
+++ b/src/antlion/test_utils_tests/instrumentation/device/command/instrumentation_command_builder_test.py
@@ -16,8 +16,8 @@
 
 import unittest
 
-from antlion_contrib.test_utils.instrumentation.device.command.instrumentation_command_builder import InstrumentationCommandBuilder
-from antlion_contrib.test_utils.instrumentation.device.command.instrumentation_command_builder import InstrumentationTestCommandBuilder
+from antlion.test_utils.instrumentation.device.command.instrumentation_command_builder import InstrumentationCommandBuilder
+from antlion.test_utils.instrumentation.device.command.instrumentation_command_builder import InstrumentationTestCommandBuilder
 
 
 class InstrumentationCommandBuilderTest(unittest.TestCase):
diff --git a/src/antlion_contrib/test_utils_tests/power/__init__.py b/src/antlion/test_utils_tests/power/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils_tests/power/__init__.py
rename to src/antlion/test_utils_tests/power/__init__.py
diff --git a/src/antlion_contrib/test_utils_tests/power/tel/__init__.py b/src/antlion/test_utils_tests/power/tel/__init__.py
similarity index 100%
rename from src/antlion_contrib/test_utils_tests/power/tel/__init__.py
rename to src/antlion/test_utils_tests/power/tel/__init__.py
diff --git a/src/antlion_contrib/test_utils_tests/power/tel/lab/consume_parameter_test.py b/src/antlion/test_utils_tests/power/tel/lab/consume_parameter_test.py
similarity index 96%
rename from src/antlion_contrib/test_utils_tests/power/tel/lab/consume_parameter_test.py
rename to src/antlion/test_utils_tests/power/tel/lab/consume_parameter_test.py
index 7d9e137..ca26e53 100644
--- a/src/antlion_contrib/test_utils_tests/power/tel/lab/consume_parameter_test.py
+++ b/src/antlion/test_utils_tests/power/tel/lab/consume_parameter_test.py
@@ -26,7 +26,7 @@
     """
     @classmethod
     def setUpClass(self):
-        from antlion_contrib.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
+        from antlion.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
         self.PCBT = PCBT
         PCBT.log = mock.Mock()
         PCBT.log_path = ''
diff --git a/src/antlion_contrib/test_utils_tests/power/tel/lab/ensure_valid_calibration_table_test.py b/src/antlion/test_utils_tests/power/tel/lab/ensure_valid_calibration_table_test.py
similarity index 96%
rename from src/antlion_contrib/test_utils_tests/power/tel/lab/ensure_valid_calibration_table_test.py
rename to src/antlion/test_utils_tests/power/tel/lab/ensure_valid_calibration_table_test.py
index 348b3fd..1aa9361 100644
--- a/src/antlion_contrib/test_utils_tests/power/tel/lab/ensure_valid_calibration_table_test.py
+++ b/src/antlion/test_utils_tests/power/tel/lab/ensure_valid_calibration_table_test.py
@@ -31,7 +31,7 @@
 
     @classmethod
     def setUpClass(self):
-        from antlion_contrib.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
+        from antlion.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
         self.PCBT = PCBT
         PCBT.log = mock.Mock()
         PCBT.log_path = ''
diff --git a/src/antlion_contrib/test_utils_tests/power/tel/lab/init_simulation_test.py b/src/antlion/test_utils_tests/power/tel/lab/init_simulation_test.py
similarity index 96%
rename from src/antlion_contrib/test_utils_tests/power/tel/lab/init_simulation_test.py
rename to src/antlion/test_utils_tests/power/tel/lab/init_simulation_test.py
index b07b54e..c7c4285 100644
--- a/src/antlion_contrib/test_utils_tests/power/tel/lab/init_simulation_test.py
+++ b/src/antlion/test_utils_tests/power/tel/lab/init_simulation_test.py
@@ -28,7 +28,7 @@
     """
     @classmethod
     def setUpClass(self):
-        from antlion_contrib.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
+        from antlion.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
         self.PCBT = PCBT
         PCBT.log = mock.Mock()
         PCBT.log_path = ''
diff --git a/src/antlion_contrib/test_utils_tests/power/tel/lab/initialize_simulator_test.py b/src/antlion/test_utils_tests/power/tel/lab/initialize_simulator_test.py
similarity index 97%
rename from src/antlion_contrib/test_utils_tests/power/tel/lab/initialize_simulator_test.py
rename to src/antlion/test_utils_tests/power/tel/lab/initialize_simulator_test.py
index f474f91..cd23f4b 100644
--- a/src/antlion_contrib/test_utils_tests/power/tel/lab/initialize_simulator_test.py
+++ b/src/antlion/test_utils_tests/power/tel/lab/initialize_simulator_test.py
@@ -28,7 +28,7 @@
     """
     @classmethod
     def setUpClass(self):
-        from antlion_contrib.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
+        from antlion.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
         self.PCBT = PCBT
         PCBT.log = mock.Mock()
         PCBT.log_path = ''
diff --git a/src/antlion_contrib/test_utils_tests/power/tel/lab/power_tel_traffic_e2e_test.py b/src/antlion/test_utils_tests/power/tel/lab/power_tel_traffic_e2e_test.py
similarity index 97%
rename from src/antlion_contrib/test_utils_tests/power/tel/lab/power_tel_traffic_e2e_test.py
rename to src/antlion/test_utils_tests/power/tel/lab/power_tel_traffic_e2e_test.py
index 7fe4e81..be71fee 100644
--- a/src/antlion_contrib/test_utils_tests/power/tel/lab/power_tel_traffic_e2e_test.py
+++ b/src/antlion/test_utils_tests/power/tel/lab/power_tel_traffic_e2e_test.py
@@ -17,7 +17,7 @@
 import unittest
 from unittest import mock
 
-import antlion_contrib.test_utils.power.cellular.cellular_traffic_power_test as ctpt
+import antlion.test_utils.power.cellular.cellular_traffic_power_test as ctpt
 import mobly.config_parser as mobly_config_parser
 from antlion.controllers.cellular_lib.LteSimulation import LteSimulation
 from antlion.controllers.rohdeschwarz_lib import cmw500_cellular_simulator as cmw
diff --git a/src/antlion_contrib/test_utils_tests/power/tel/lab/save_summary_to_file_test.py b/src/antlion/test_utils_tests/power/tel/lab/save_summary_to_file_test.py
similarity index 93%
rename from src/antlion_contrib/test_utils_tests/power/tel/lab/save_summary_to_file_test.py
rename to src/antlion/test_utils_tests/power/tel/lab/save_summary_to_file_test.py
index 853e4cd..556cfdb 100644
--- a/src/antlion_contrib/test_utils_tests/power/tel/lab/save_summary_to_file_test.py
+++ b/src/antlion/test_utils_tests/power/tel/lab/save_summary_to_file_test.py
@@ -29,7 +29,7 @@
 
     @classmethod
     def setUpClass(self):
-        from antlion_contrib.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
+        from antlion.test_utils.power.cellular.cellular_power_base_test import PowerCellularLabBaseTest as PCBT
         self.PCBT = PCBT
         PCBT.log = mock.Mock()
         PCBT.log_path = ''
diff --git a/tests/bt/BleFuchsiaAndroidTest.py b/src/antlion/tests/bt/BleFuchsiaAndroidTest.py
similarity index 90%
rename from tests/bt/BleFuchsiaAndroidTest.py
rename to src/antlion/tests/bt/BleFuchsiaAndroidTest.py
index d360262..982c3ac 100644
--- a/tests/bt/BleFuchsiaAndroidTest.py
+++ b/src/antlion/tests/bt/BleFuchsiaAndroidTest.py
@@ -20,14 +20,14 @@
 import pprint
 
 from antlion.controllers import android_device
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
-from antlion_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
-from antlion_contrib.test_utils.bt.bt_constants import ble_advertise_settings_modes
-from antlion_contrib.test_utils.bt.bt_constants import adv_succ
-from antlion_contrib.test_utils.bt.bt_constants import ble_scan_settings_modes
-from antlion_contrib.test_utils.bt.bt_constants import scan_result
-from antlion_contrib.test_utils.bt.bt_test_utils import cleanup_scanners_and_advertisers
-from antlion_contrib.test_utils.bt.bt_test_utils import reset_bluetooth
+from antlion.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
+from antlion.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
+from antlion.test_utils.bt.bt_constants import ble_advertise_settings_modes
+from antlion.test_utils.bt.bt_constants import adv_succ
+from antlion.test_utils.bt.bt_constants import ble_scan_settings_modes
+from antlion.test_utils.bt.bt_constants import scan_result
+from antlion.test_utils.bt.bt_test_utils import cleanup_scanners_and_advertisers
+from antlion.test_utils.bt.bt_test_utils import reset_bluetooth
 
 
 class BleFuchsiaAndroidTest(BluetoothBaseTest):
diff --git a/tests/bt/BleFuchsiaTest.py b/src/antlion/tests/bt/BleFuchsiaTest.py
similarity index 97%
rename from tests/bt/BleFuchsiaTest.py
rename to src/antlion/tests/bt/BleFuchsiaTest.py
index f7f7dbe..6730924 100644
--- a/tests/bt/BleFuchsiaTest.py
+++ b/src/antlion/tests/bt/BleFuchsiaTest.py
@@ -19,7 +19,7 @@
 import random
 
 from antlion.base_test import BaseTestClass
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
+from antlion.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
 
 
 class BleFuchsiaTest(BaseTestClass):
diff --git a/tests/bt/BluetoothCmdLineTest.py b/src/antlion/tests/bt/BluetoothCmdLineTest.py
similarity index 100%
rename from tests/bt/BluetoothCmdLineTest.py
rename to src/antlion/tests/bt/BluetoothCmdLineTest.py
diff --git a/tests/bt/FuchsiaBtMacAddressTest.py b/src/antlion/tests/bt/FuchsiaBtMacAddressTest.py
similarity index 96%
rename from tests/bt/FuchsiaBtMacAddressTest.py
rename to src/antlion/tests/bt/FuchsiaBtMacAddressTest.py
index f069a81..67ee6dd 100644
--- a/tests/bt/FuchsiaBtMacAddressTest.py
+++ b/src/antlion/tests/bt/FuchsiaBtMacAddressTest.py
@@ -24,7 +24,7 @@
 from antlion import signals
 from antlion.base_test import BaseTestClass
 from antlion.test_decorators import test_tracker_info
-from antlion_contrib.test_utils.bt.bt_test_utils import generate_id_by_size
+from antlion.test_utils.bt.bt_test_utils import generate_id_by_size
 
 
 class FuchsiaBtMacAddressTest(BaseTestClass):
diff --git a/tests/bt/FuchsiaBtScanTest.py b/src/antlion/tests/bt/FuchsiaBtScanTest.py
similarity index 97%
rename from tests/bt/FuchsiaBtScanTest.py
rename to src/antlion/tests/bt/FuchsiaBtScanTest.py
index 3acc0a1..fd659a0 100644
--- a/tests/bt/FuchsiaBtScanTest.py
+++ b/src/antlion/tests/bt/FuchsiaBtScanTest.py
@@ -26,7 +26,7 @@
 from antlion import signals
 from antlion.base_test import BaseTestClass
 from antlion.test_decorators import test_tracker_info
-from antlion_contrib.test_utils.bt.bt_test_utils import generate_id_by_size
+from antlion.test_utils.bt.bt_test_utils import generate_id_by_size
 
 
 class FuchsiaBtScanTest(BaseTestClass):
diff --git a/tests/bt/GapSecSemTest.py b/src/antlion/tests/bt/GapSecSemTest.py
similarity index 96%
rename from tests/bt/GapSecSemTest.py
rename to src/antlion/tests/bt/GapSecSemTest.py
index 6c3888b..71a21c1 100644
--- a/tests/bt/GapSecSemTest.py
+++ b/src/antlion/tests/bt/GapSecSemTest.py
@@ -24,10 +24,10 @@
 from antlion import signals
 from antlion.base_test import BaseTestClass
 from antlion.test_decorators import test_tracker_info
-from antlion_contrib.test_utils.bt.bt_test_utils import generate_id_by_size
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import get_link_keys
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import unbond_all_known_devices
+from antlion.test_utils.bt.bt_test_utils import generate_id_by_size
+from antlion.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
+from antlion.test_utils.fuchsia.bt_test_utils import get_link_keys
+from antlion.test_utils.fuchsia.bt_test_utils import unbond_all_known_devices
 from contextlib import suppress
 import inspect
 
diff --git a/tests/bt/command_input.py b/src/antlion/tests/bt/command_input.py
similarity index 98%
rename from tests/bt/command_input.py
rename to src/antlion/tests/bt/command_input.py
index 26ed8f1..46e0e3f 100644
--- a/tests/bt/command_input.py
+++ b/src/antlion/tests/bt/command_input.py
@@ -43,16 +43,16 @@
 
 """
 
-from antlion_contrib.test_utils.audio_analysis_lib.check_quality import quality_analysis
-from antlion_contrib.test_utils.bt.bt_constants import audio_bits_per_sample_32
-from antlion_contrib.test_utils.bt.bt_constants import audio_sample_rate_48000
-from antlion_contrib.test_utils.abstract_devices.bluetooth_device import create_bluetooth_device
-from antlion_contrib.test_utils.bt.bt_constants import bt_attribute_values
-from antlion_contrib.test_utils.bt.bt_constants import sig_appearance_constants
-from antlion_contrib.test_utils.bt.bt_constants import sig_uuid_constants
-from antlion_contrib.test_utils.fuchsia.sdp_records import sdp_pts_record_list
+from antlion.test_utils.audio_analysis_lib.check_quality import quality_analysis
+from antlion.test_utils.bt.bt_constants import audio_bits_per_sample_32
+from antlion.test_utils.bt.bt_constants import audio_sample_rate_48000
+from antlion.test_utils.abstract_devices.bluetooth_device import create_bluetooth_device
+from antlion.test_utils.bt.bt_constants import bt_attribute_values
+from antlion.test_utils.bt.bt_constants import sig_appearance_constants
+from antlion.test_utils.bt.bt_constants import sig_uuid_constants
+from antlion.test_utils.fuchsia.sdp_records import sdp_pts_record_list
 
-import antlion_contrib.test_utils.bt.gatt_test_database as gatt_test_database
+import antlion.test_utils.bt.gatt_test_database as gatt_test_database
 
 import cmd
 import pprint
diff --git a/tests/bt/ep/BtFuchsiaEPTest.py b/src/antlion/tests/bt/ep/BtFuchsiaEPTest.py
similarity index 96%
rename from tests/bt/ep/BtFuchsiaEPTest.py
rename to src/antlion/tests/bt/ep/BtFuchsiaEPTest.py
index d190f75..626c259 100644
--- a/tests/bt/ep/BtFuchsiaEPTest.py
+++ b/src/antlion/tests/bt/ep/BtFuchsiaEPTest.py
@@ -22,11 +22,11 @@
 from antlion.base_test import BaseTestClass
 from antlion.controllers.fuchsia_lib.ssh import FuchsiaSSHError
 from antlion.test_decorators import test_tracker_info
-from antlion_contrib.test_utils.bt.bt_test_utils import generate_id_by_size
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import bredr_scan_for_device_by_name
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import unbond_all_known_devices
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import verify_device_state_by_name
+from antlion.test_utils.bt.bt_test_utils import generate_id_by_size
+from antlion.test_utils.fuchsia.bt_test_utils import bredr_scan_for_device_by_name
+from antlion.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
+from antlion.test_utils.fuchsia.bt_test_utils import unbond_all_known_devices
+from antlion.test_utils.fuchsia.bt_test_utils import verify_device_state_by_name
 import time
 
 
diff --git a/tests/bt/gatt/GattConnectionStressTest.py b/src/antlion/tests/bt/gatt/GattConnectionStressTest.py
similarity index 96%
rename from tests/bt/gatt/GattConnectionStressTest.py
rename to src/antlion/tests/bt/gatt/GattConnectionStressTest.py
index ff693b1..42e2f92 100644
--- a/tests/bt/gatt/GattConnectionStressTest.py
+++ b/src/antlion/tests/bt/gatt/GattConnectionStressTest.py
@@ -30,8 +30,8 @@
 from antlion import signals
 from antlion.base_test import BaseTestClass
 from antlion.test_decorators import test_tracker_info
-from antlion_contrib.test_utils.bt.bt_test_utils import generate_id_by_size
-from antlion_contrib.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
+from antlion.test_utils.bt.bt_test_utils import generate_id_by_size
+from antlion.test_utils.fuchsia.bt_test_utils import le_scan_for_device_by_name
 
 
 class GattConnectionStressTest(BaseTestClass):
diff --git a/tests/bt/gatt/GattServerSetupTest.py b/src/antlion/tests/bt/gatt/GattServerSetupTest.py
similarity index 100%
rename from tests/bt/gatt/GattServerSetupTest.py
rename to src/antlion/tests/bt/gatt/GattServerSetupTest.py
diff --git a/tests/bt/gatt/gatt_server_databases.py b/src/antlion/tests/bt/gatt/gatt_server_databases.py
similarity index 99%
rename from tests/bt/gatt/gatt_server_databases.py
rename to src/antlion/tests/bt/gatt/gatt_server_databases.py
index b50c141..ecdf40d 100644
--- a/tests/bt/gatt/gatt_server_databases.py
+++ b/src/antlion/tests/bt/gatt/gatt_server_databases.py
@@ -17,12 +17,12 @@
 GATT server dictionaries which will be setup in various tests.
 """
 
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic
-from antlion_contrib.test_utils.bt.bt_constants import gatt_descriptor
-from antlion_contrib.test_utils.bt.bt_constants import gatt_service_types
-from antlion_contrib.test_utils.bt.bt_constants import gatt_char_types
-from antlion_contrib.test_utils.bt.bt_constants import gatt_characteristic_value_format
-from antlion_contrib.test_utils.bt.bt_constants import gatt_char_desc_uuids
+from antlion.test_utils.bt.bt_constants import gatt_characteristic
+from antlion.test_utils.bt.bt_constants import gatt_descriptor
+from antlion.test_utils.bt.bt_constants import gatt_service_types
+from antlion.test_utils.bt.bt_constants import gatt_char_types
+from antlion.test_utils.bt.bt_constants import gatt_characteristic_value_format
+from antlion.test_utils.bt.bt_constants import gatt_char_desc_uuids
 
 SINGLE_PRIMARY_SERVICE = {
     'services': [{
diff --git a/tests/bt/pts/GATT_PTS_INSTRUCTIONS b/src/antlion/tests/bt/pts/GATT_PTS_INSTRUCTIONS
similarity index 100%
rename from tests/bt/pts/GATT_PTS_INSTRUCTIONS
rename to src/antlion/tests/bt/pts/GATT_PTS_INSTRUCTIONS
diff --git a/tests/dhcp/Dhcpv4InteropTest.py b/src/antlion/tests/dhcp/Dhcpv4InteropTest.py
similarity index 98%
rename from tests/dhcp/Dhcpv4InteropTest.py
rename to src/antlion/tests/dhcp/Dhcpv4InteropTest.py
index 09d6ea4..89aef29 100644
--- a/tests/dhcp/Dhcpv4InteropTest.py
+++ b/src/antlion/tests/dhcp/Dhcpv4InteropTest.py
@@ -26,8 +26,8 @@
 from antlion.controllers.ap_lib.hostapd_security import Security
 from antlion.controllers.ap_lib.hostapd_utils import generate_random_password
 from antlion.controllers.utils_lib.commands import ip
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 
 class Dhcpv4InteropFixture(WifiBaseTest):
diff --git a/tests/examples/Sl4fSanityTest.py b/src/antlion/tests/examples/Sl4fSanityTest.py
similarity index 95%
rename from tests/examples/Sl4fSanityTest.py
rename to src/antlion/tests/examples/Sl4fSanityTest.py
index 5921966..b8429af 100644
--- a/tests/examples/Sl4fSanityTest.py
+++ b/src/antlion/tests/examples/Sl4fSanityTest.py
@@ -18,15 +18,15 @@
 can communicate to ACTS successfully.
 
 """
-from antlion.base_test import BaseTestClass
+from typing import List
 
 from antlion import asserts
-
+from antlion.base_test import BaseTestClass
 from antlion.controllers.fuchsia_device import FuchsiaDevice
 
 
 class Sl4fSanityTest(BaseTestClass):
-    fuchsia_devices: list[FuchsiaDevice]
+    fuchsia_devices: List[FuchsiaDevice]
 
     def setup_class(self):
         super().setup_class()
diff --git a/tests/flash/FlashTest.py b/src/antlion/tests/flash/FlashTest.py
similarity index 100%
rename from tests/flash/FlashTest.py
rename to src/antlion/tests/flash/FlashTest.py
diff --git a/tests/logging/FuchsiaLoggingTest.py b/src/antlion/tests/logging/FuchsiaLoggingTest.py
similarity index 100%
rename from tests/logging/FuchsiaLoggingTest.py
rename to src/antlion/tests/logging/FuchsiaLoggingTest.py
diff --git a/tests/netstack/NetstackIfaceTest.py b/src/antlion/tests/netstack/NetstackIfaceTest.py
similarity index 100%
rename from tests/netstack/NetstackIfaceTest.py
rename to src/antlion/tests/netstack/NetstackIfaceTest.py
diff --git a/tests/netstack/NetstackIxiaTest.py b/src/antlion/tests/netstack/NetstackIxiaTest.py
similarity index 98%
rename from tests/netstack/NetstackIxiaTest.py
rename to src/antlion/tests/netstack/NetstackIxiaTest.py
index 6d1b8d1..bbe90a6 100644
--- a/tests/netstack/NetstackIxiaTest.py
+++ b/src/antlion/tests/netstack/NetstackIxiaTest.py
@@ -20,7 +20,7 @@
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
 
-from antlion_contrib.test_utils.net.NetstackBaseTest import NetstackBaseTest
+from antlion.test_utils.net.NetstackBaseTest import NetstackBaseTest
 
 from antlion.utils import rand_ascii_str
 
diff --git a/tests/netstack/ToggleWlanInterfaceStressTest.py b/src/antlion/tests/netstack/ToggleWlanInterfaceStressTest.py
similarity index 97%
rename from tests/netstack/ToggleWlanInterfaceStressTest.py
rename to src/antlion/tests/netstack/ToggleWlanInterfaceStressTest.py
index 05798fc..5ce5fda 100644
--- a/tests/netstack/ToggleWlanInterfaceStressTest.py
+++ b/src/antlion/tests/netstack/ToggleWlanInterfaceStressTest.py
@@ -17,7 +17,7 @@
 from antlion import signals
 import time
 from antlion.base_test import BaseTestClass
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 
 class ToggleWlanInterfaceStressTest(BaseTestClass):
diff --git a/tests/wlan/compliance/VapeInteropTest.py b/src/antlion/tests/wlan/compliance/VapeInteropTest.py
similarity index 99%
rename from tests/wlan/compliance/VapeInteropTest.py
rename to src/antlion/tests/wlan/compliance/VapeInteropTest.py
index 33449e1..86bc3e3 100644
--- a/tests/wlan/compliance/VapeInteropTest.py
+++ b/src/antlion/tests/wlan/compliance/VapeInteropTest.py
@@ -19,8 +19,8 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib.hostapd_security import Security
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 
 class VapeInteropTest(WifiBaseTest):
diff --git a/tests/wlan/compliance/WlanPhyCompliance11ACTest.py b/src/antlion/tests/wlan/compliance/WlanPhyCompliance11ACTest.py
similarity index 98%
rename from tests/wlan/compliance/WlanPhyCompliance11ACTest.py
rename to src/antlion/tests/wlan/compliance/WlanPhyCompliance11ACTest.py
index c5eb58c..5efe1f4 100644
--- a/tests/wlan/compliance/WlanPhyCompliance11ACTest.py
+++ b/src/antlion/tests/wlan/compliance/WlanPhyCompliance11ACTest.py
@@ -21,8 +21,8 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib.hostapd_security import Security
 from antlion.controllers.ap_lib import hostapd_constants
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 from antlion.utils import rand_ascii_str
 
 # AC Capabilities
diff --git a/tests/wlan/compliance/WlanPhyCompliance11NTest.py b/src/antlion/tests/wlan/compliance/WlanPhyCompliance11NTest.py
similarity index 98%
rename from tests/wlan/compliance/WlanPhyCompliance11NTest.py
rename to src/antlion/tests/wlan/compliance/WlanPhyCompliance11NTest.py
index 61ae80e..d30982c 100644
--- a/tests/wlan/compliance/WlanPhyCompliance11NTest.py
+++ b/src/antlion/tests/wlan/compliance/WlanPhyCompliance11NTest.py
@@ -23,8 +23,8 @@
 from antlion.controllers.ap_lib import hostapd_config
 from antlion.controllers.ap_lib.hostapd_security import Security
 from antlion.controllers.ap_lib.hostapd_utils import generate_random_password
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 FREQUENCY_24 = ['2.4GHz']
 FREQUENCY_5 = ['5GHz']
diff --git a/tests/wlan/compliance/WlanPhyComplianceABGTest.py b/src/antlion/tests/wlan/compliance/WlanPhyComplianceABGTest.py
similarity index 99%
rename from tests/wlan/compliance/WlanPhyComplianceABGTest.py
rename to src/antlion/tests/wlan/compliance/WlanPhyComplianceABGTest.py
index a1d4c9f..dc2116e 100644
--- a/tests/wlan/compliance/WlanPhyComplianceABGTest.py
+++ b/src/antlion/tests/wlan/compliance/WlanPhyComplianceABGTest.py
@@ -19,8 +19,8 @@
 
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 
 class WlanPhyComplianceABGTest(WifiBaseTest):
diff --git a/tests/wlan/compliance/WlanSecurityComplianceABGTest.py b/src/antlion/tests/wlan/compliance/WlanSecurityComplianceABGTest.py
similarity index 99%
rename from tests/wlan/compliance/WlanSecurityComplianceABGTest.py
rename to src/antlion/tests/wlan/compliance/WlanSecurityComplianceABGTest.py
index 50a1d9f..ade2036 100644
--- a/tests/wlan/compliance/WlanSecurityComplianceABGTest.py
+++ b/src/antlion/tests/wlan/compliance/WlanSecurityComplianceABGTest.py
@@ -23,8 +23,8 @@
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib.hostapd_security import Security
 from antlion.controllers.ap_lib.hostapd_utils import generate_random_password
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 AP_11ABG_PROFILE_NAME = 'whirlwind_11ag_legacy'
 SSID_LENGTH_DEFAULT = 15
diff --git a/tests/wlan/facade/WlanDeprecatedConfigurationTest.py b/src/antlion/tests/wlan/facade/WlanDeprecatedConfigurationTest.py
similarity index 97%
rename from tests/wlan/facade/WlanDeprecatedConfigurationTest.py
rename to src/antlion/tests/wlan/facade/WlanDeprecatedConfigurationTest.py
index 8c4feac..843d18f 100644
--- a/tests/wlan/facade/WlanDeprecatedConfigurationTest.py
+++ b/src/antlion/tests/wlan/facade/WlanDeprecatedConfigurationTest.py
@@ -16,8 +16,8 @@
 
 from antlion import asserts
 from antlion import utils
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 AP_ROLE = 'Ap'
 DEFAULT_SSID = 'testssid'
diff --git a/tests/wlan/facade/WlanFacadeTest.py b/src/antlion/tests/wlan/facade/WlanFacadeTest.py
similarity index 93%
rename from tests/wlan/facade/WlanFacadeTest.py
rename to src/antlion/tests/wlan/facade/WlanFacadeTest.py
index be9cac8..5a1d133 100644
--- a/tests/wlan/facade/WlanFacadeTest.py
+++ b/src/antlion/tests/wlan/facade/WlanFacadeTest.py
@@ -20,8 +20,8 @@
 import array
 
 from antlion import asserts, signals
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 
 class WlanFacadeTest(WifiBaseTest):
diff --git a/tests/wlan/facade/WlanStatusTest.py b/src/antlion/tests/wlan/facade/WlanStatusTest.py
similarity index 97%
rename from tests/wlan/facade/WlanStatusTest.py
rename to src/antlion/tests/wlan/facade/WlanStatusTest.py
index f9ab2cd..4c35c1e 100644
--- a/tests/wlan/facade/WlanStatusTest.py
+++ b/src/antlion/tests/wlan/facade/WlanStatusTest.py
@@ -18,7 +18,7 @@
 """
 
 from antlion import signals
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 
 class WlanStatusTest(WifiBaseTest):
diff --git a/tests/wlan/functional/BeaconLossTest.py b/src/antlion/tests/wlan/functional/BeaconLossTest.py
similarity index 96%
rename from tests/wlan/functional/BeaconLossTest.py
rename to src/antlion/tests/wlan/functional/BeaconLossTest.py
index 44dba3d..6c8b74a 100644
--- a/tests/wlan/functional/BeaconLossTest.py
+++ b/src/antlion/tests/wlan/functional/BeaconLossTest.py
@@ -30,8 +30,8 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 from antlion.utils import rand_ascii_str
 
 
diff --git a/tests/wlan/functional/ChannelSwitchTest.py b/src/antlion/tests/wlan/functional/ChannelSwitchTest.py
similarity index 98%
rename from tests/wlan/functional/ChannelSwitchTest.py
rename to src/antlion/tests/wlan/functional/ChannelSwitchTest.py
index 644e037..1c62919 100644
--- a/tests/wlan/functional/ChannelSwitchTest.py
+++ b/src/antlion/tests/wlan/functional/ChannelSwitchTest.py
@@ -24,8 +24,8 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.utils import rand_ascii_str
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 from typing import Sequence
 
 
diff --git a/tests/wlan/functional/ConnectionStressTest.py b/src/antlion/tests/wlan/functional/ConnectionStressTest.py
similarity index 97%
rename from tests/wlan/functional/ConnectionStressTest.py
rename to src/antlion/tests/wlan/functional/ConnectionStressTest.py
index 2e70a83..635c902 100644
--- a/tests/wlan/functional/ConnectionStressTest.py
+++ b/src/antlion/tests/wlan/functional/ConnectionStressTest.py
@@ -24,8 +24,8 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 from antlion.utils import rand_ascii_str
 
 
diff --git a/tests/wlan/functional/DownloadStressTest.py b/src/antlion/tests/wlan/functional/DownloadStressTest.py
similarity index 96%
rename from tests/wlan/functional/DownloadStressTest.py
rename to src/antlion/tests/wlan/functional/DownloadStressTest.py
index be87b98..e376539 100644
--- a/tests/wlan/functional/DownloadStressTest.py
+++ b/src/antlion/tests/wlan/functional/DownloadStressTest.py
@@ -22,9 +22,9 @@
 from antlion import signals
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.fuchsia import utils
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.fuchsia import utils
 from antlion.utils import rand_ascii_str
 
 
diff --git a/tests/wlan/functional/PingStressTest.py b/src/antlion/tests/wlan/functional/PingStressTest.py
similarity index 97%
rename from tests/wlan/functional/PingStressTest.py
rename to src/antlion/tests/wlan/functional/PingStressTest.py
index 510cfc9..1653205 100644
--- a/tests/wlan/functional/PingStressTest.py
+++ b/src/antlion/tests/wlan/functional/PingStressTest.py
@@ -29,8 +29,8 @@
 
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 from antlion.utils import rand_ascii_str
 
 LOOPBACK_IPV4 = '127.0.0.1'
diff --git a/tests/wlan/functional/SoftApTest.py b/src/antlion/tests/wlan/functional/SoftApTest.py
similarity index 99%
rename from tests/wlan/functional/SoftApTest.py
rename to src/antlion/tests/wlan/functional/SoftApTest.py
index baf85e9..7255b0c 100644
--- a/tests/wlan/functional/SoftApTest.py
+++ b/src/antlion/tests/wlan/functional/SoftApTest.py
@@ -27,8 +27,8 @@
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
 from antlion.controllers.ap_lib.hostapd_utils import generate_random_password
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 CONNECTIVITY_MODE_LOCAL = 'local_only'
 CONNECTIVITY_MODE_UNRESTRICTED = 'unrestricted'
diff --git a/tests/wlan/functional/WlanRebootTest.py b/src/antlion/tests/wlan/functional/WlanRebootTest.py
similarity index 93%
rename from tests/wlan/functional/WlanRebootTest.py
rename to src/antlion/tests/wlan/functional/WlanRebootTest.py
index 85e5ab8..ed305c7 100644
--- a/tests/wlan/functional/WlanRebootTest.py
+++ b/src/antlion/tests/wlan/functional/WlanRebootTest.py
@@ -25,16 +25,13 @@
 from antlion import utils
 from antlion.controllers import iperf_client
 from antlion.controllers import iperf_server
-from antlion.controllers.access_point import setup_ap
+from antlion.controllers.access_point import AccessPoint, setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib.hostapd_security import Security
 from antlion.controllers.ap_lib.hostapd_utils import generate_random_password
-from antlion.controllers.ap_lib.radvd import Radvd
-from antlion.controllers.ap_lib import radvd_constants
-from antlion.controllers.ap_lib.radvd_config import RadvdConfig
-from antlion.controllers.fuchsia_device import IP_ADDRESS_TIMEOUT
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.controllers.fuchsia_lib.utils_lib import wait_for_port
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 # Constants, for readibility
 AP = 'ap'
@@ -66,6 +63,7 @@
 DEFAULT_IPERF_TIMEOUT = 30
 
 DUT_NETWORK_CONNECTION_TIMEOUT = 60
+DUT_IP_ADDRESS_TIMEOUT = 30  # max time for DAD to complete
 
 # Constants for Custom Reboot Tests
 ALL = 'all'
@@ -122,7 +120,7 @@
             # Default is an android device, just like the other tests
             self.dut = create_wlan_device(self.android_devices[0])
 
-        self.access_point = self.access_points[0]
+        self.access_point: AccessPoint = self.access_points[0]
 
         self.iperf_server_on_ap = None
         self.iperf_client_on_dut = None
@@ -136,31 +134,18 @@
                 'Skipping iperf throughput validation as requested by ACTS '
                 'config')
 
-        self.router_adv_daemon = None
-
     def setup_test(self):
         self.access_point.stop_all_aps()
-        if self.router_adv_daemon:
-            self.router_adv_daemon.stop()
         self.dut.wifi_toggle_state(True)
         for ad in self.android_devices:
             ad.droid.wakeLockAcquireBright()
             ad.droid.wakeUpNow()
         self.dut.disconnect()
-        self.router_adv_daemon = None
         self.ssid = utils.rand_ascii_str(hostapd_constants.AP_SSID_LENGTH_2G)
 
     def teardown_test(self):
         self.download_ap_logs()
         self.access_point.stop_all_aps()
-        if self.router_adv_daemon:
-            output_path = context.get_current_context().get_base_output_path()
-            full_output_path = os.path.join(output_path, "radvd_log.txt")
-            radvd_log_file = open(full_output_path, 'w')
-            radvd_log_file.write(self.router_adv_daemon.pull_logs())
-            radvd_log_file.close()
-            self.router_adv_daemon.stop()
-            self.router_adv_daemon = None
         self.dut.disconnect()
         for ad in self.android_devices:
             ad.droid.wakeLockRelease()
@@ -193,29 +178,23 @@
                      profile_name='whirlwind',
                      channel=11,
                      ssid=ssid,
-                     security=security_profile)
+                     security=security_profile,
+                     is_ipv6_enabled=ipv6)
         elif band == BAND_5G:
             setup_ap(access_point=self.access_point,
                      profile_name='whirlwind',
                      channel=36,
                      ssid=ssid,
-                     security=security_profile)
+                     security=security_profile,
+                     is_ipv6_enabled=ipv6)
 
         if not ipv4:
             self.access_point.stop_dhcp()
-        if ipv6:
-            if band == BAND_2G:
-                self.router_adv_daemon = Radvd(self.access_point.ssh,
-                                               self.access_point.wlan_2g)
-            elif band == BAND_5G:
-                self.router_adv_daemon = Radvd(self.access_point.ssh,
-                                               self.access_point.wlan_5g)
-            radvd_config = RadvdConfig()
-            self.router_adv_daemon.start(radvd_config)
 
         self.log.info('Network (SSID: %s) is up.' % ssid)
 
-    def setup_iperf_server_on_ap(self, band):
+    def setup_iperf_server_on_ap(self,
+                                 band) -> iperf_server.IPerfServerOverSsh:
         """Configures iperf server based on the tests band.
 
         Args:
@@ -522,15 +501,12 @@
 
             self.iperf_server_on_ap = self.setup_iperf_server_on_ap(band)
             self.iperf_server_on_ap.start()
+            wait_for_port(self.iperf_server_on_ap.ssh_settings.hostname, 5201)
 
-            if ipv4:
-                self.verify_traffic_between_dut_and_ap(
-                    self.iperf_server_on_ap, self.iperf_client_on_dut)
-            if ipv6:
-                self.verify_traffic_between_dut_and_ap(
-                    self.iperf_server_on_ap,
-                    self.iperf_client_on_dut,
-                    ip_version=IPV6)
+            ip_version = IPV6 if ipv6 else IPV4
+            self.verify_traffic_between_dut_and_ap(self.iperf_server_on_ap,
+                                                   self.iperf_client_on_dut,
+                                                   ip_version=ip_version)
 
         # Looping reboots for stress testing
         for run in range(iterations):
@@ -784,4 +760,4 @@
         self.dut_network_connection_timeout = self.wlan_reboot_test_params.get(
             'dut_network_connection_timeout', DUT_NETWORK_CONNECTION_TIMEOUT)
         self.dut_ip_address_timeout = self.wlan_reboot_test_params.get(
-            'dut_ip_address_timeout', IP_ADDRESS_TIMEOUT)
+            'dut_ip_address_timeout', DUT_IP_ADDRESS_TIMEOUT)
diff --git a/tests/wlan/functional/WlanScanTest.py b/src/antlion/tests/wlan/functional/WlanScanTest.py
similarity index 99%
rename from tests/wlan/functional/WlanScanTest.py
rename to src/antlion/tests/wlan/functional/WlanScanTest.py
index a9b2545..ed5d08a 100644
--- a/tests/wlan/functional/WlanScanTest.py
+++ b/src/antlion/tests/wlan/functional/WlanScanTest.py
@@ -26,7 +26,7 @@
 from antlion.controllers.ap_lib import hostapd_bss_settings
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 
 class WlanScanTest(WifiBaseTest):
diff --git a/tests/wlan/functional/WlanTargetSecurityTest.py b/src/antlion/tests/wlan/functional/WlanTargetSecurityTest.py
similarity index 98%
rename from tests/wlan/functional/WlanTargetSecurityTest.py
rename to src/antlion/tests/wlan/functional/WlanTargetSecurityTest.py
index cc759e1..631df3b 100644
--- a/tests/wlan/functional/WlanTargetSecurityTest.py
+++ b/src/antlion/tests/wlan/functional/WlanTargetSecurityTest.py
@@ -19,8 +19,8 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib.hostapd_security import Security
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 
 # TODO(fxb/68956): Add security protocol check to mixed mode tests when info is
diff --git a/tests/wlan/functional/WlanWirelessNetworkManagementTest.py b/src/antlion/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
similarity index 97%
rename from tests/wlan/functional/WlanWirelessNetworkManagementTest.py
rename to src/antlion/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
index b17511f..ffd41e2 100644
--- a/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
+++ b/src/antlion/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
@@ -19,8 +19,8 @@
 from datetime import datetime, timedelta, timezone
 from typing import FrozenSet
 
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 from antlion import asserts
 from antlion import signals
 from antlion import utils
diff --git a/tests/wlan/misc/WlanInterfaceTest.py b/src/antlion/tests/wlan/misc/WlanInterfaceTest.py
similarity index 92%
rename from tests/wlan/misc/WlanInterfaceTest.py
rename to src/antlion/tests/wlan/misc/WlanInterfaceTest.py
index d4773a3..352f704 100644
--- a/tests/wlan/misc/WlanInterfaceTest.py
+++ b/src/antlion/tests/wlan/misc/WlanInterfaceTest.py
@@ -16,8 +16,8 @@
 
 from antlion import signals
 
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 
 class WlanInterfaceTest(WifiBaseTest):
diff --git a/tests/wlan/misc/WlanMiscScenarioTest.py b/src/antlion/tests/wlan/misc/WlanMiscScenarioTest.py
similarity index 96%
rename from tests/wlan/misc/WlanMiscScenarioTest.py
rename to src/antlion/tests/wlan/misc/WlanMiscScenarioTest.py
index 72be614..ee4efa1 100644
--- a/tests/wlan/misc/WlanMiscScenarioTest.py
+++ b/src/antlion/tests/wlan/misc/WlanMiscScenarioTest.py
@@ -20,8 +20,8 @@
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib.hostapd_utils import generate_random_password
 from antlion.controllers.ap_lib.hostapd_security import Security
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 
 class WlanMiscScenarioTest(WifiBaseTest):
diff --git a/tests/wlan/performance/ChannelSweepTest.py b/src/antlion/tests/wlan/performance/ChannelSweepTest.py
similarity index 98%
rename from tests/wlan/performance/ChannelSweepTest.py
rename to src/antlion/tests/wlan/performance/ChannelSweepTest.py
index 893770e..4c84213 100644
--- a/tests/wlan/performance/ChannelSweepTest.py
+++ b/src/antlion/tests/wlan/performance/ChannelSweepTest.py
@@ -19,11 +19,6 @@
 
 from statistics import pstdev
 
-from bokeh.plotting import ColumnDataSource
-from bokeh.plotting import figure
-from bokeh.plotting import output_file
-from bokeh.plotting import save
-
 from antlion import asserts
 from antlion import context
 from antlion import utils
@@ -32,8 +27,8 @@
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib.hostapd_security import Security
 from antlion.controllers.iperf_server import IPerfResult
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 N_CAPABILITIES_DEFAULT = [
     hostapd_constants.N_CAPABILITY_LDPC, hostapd_constants.N_CAPABILITY_SGI20,
@@ -399,6 +394,18 @@
         # If performance measurement is skipped
         if not self.iperf_server:
             return
+
+        try:
+            from bokeh.plotting import ColumnDataSource
+            from bokeh.plotting import figure
+            from bokeh.plotting import output_file
+            from bokeh.plotting import save
+        except ImportError as e:
+            self.log.warn("bokeh is not installed: skipping creation of graphs. "
+                          "Note CSV files are still available. If graphs are "
+                          "desired, install antlion with the \"bokeh\" feature.")
+            return
+
         output_path = context.get_current_context().get_base_output_path()
         test_name = self.throughput_data['test']
         channel_bandwidth = self.throughput_data['channel_bandwidth']
@@ -660,7 +667,7 @@
                 'Getting ip address for DUT. Will retry for %s seconds.' %
                 self.time_to_wait_for_ip_addr)
             iperf_client_address = self.get_and_verify_iperf_address(
-                channel, self.dut, self.iperf_client.test_interface)
+                channel, self.dut.device, self.iperf_client.test_interface)
             tx_throughput = self.get_iperf_throughput(iperf_server_address,
                                                       iperf_client_address)
             rx_throughput = self.get_iperf_throughput(iperf_server_address,
diff --git a/tests/wlan/performance/WlanRvrTest.py b/src/antlion/tests/wlan/performance/WlanRvrTest.py
similarity index 97%
rename from tests/wlan/performance/WlanRvrTest.py
rename to src/antlion/tests/wlan/performance/WlanRvrTest.py
index 2ee500e..0c11c4b 100644
--- a/tests/wlan/performance/WlanRvrTest.py
+++ b/src/antlion/tests/wlan/performance/WlanRvrTest.py
@@ -15,26 +15,20 @@
 # limitations under the License.
 import os
 import time
+import logging
 
-from antlion import asserts
-from antlion import context
+from antlion import asserts, context
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib.radvd import Radvd
-from antlion.controllers.ap_lib import radvd_constants
 from antlion.controllers.ap_lib.radvd_config import RadvdConfig
 from antlion.controllers.ap_lib.hostapd_security import Security
 from antlion.controllers.attenuator import get_attenuators_for_device
 from antlion.controllers.iperf_server import IPerfResult
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 from antlion.utils import rand_ascii_str
 
-from bokeh.plotting import ColumnDataSource
-from bokeh.plotting import figure
-from bokeh.plotting import output_file
-from bokeh.plotting import save
-
 AP_11ABG_PROFILE_NAME = 'whirlwind_11ag_legacy'
 REPORTING_SPEED_UNITS = 'Mbps'
 
@@ -53,6 +47,17 @@
     Returns:
         A list of bokeh graph objects.
         """
+    try:
+        from bokeh.plotting import ColumnDataSource
+        from bokeh.plotting import figure
+        from bokeh.plotting import output_file
+        from bokeh.plotting import save
+    except ImportError as e:
+        logging.warn("bokeh is not installed: skipping creation of graphs. "
+                     "Note CSV files are still available. If graphs are "
+                     "desired, install antlion with the \"bokeh\" feature.")
+        return []
+
     output_file('%srvr_throughput_vs_attn_%s.html' % (graph_path, test_name),
                 title=test_name)
     throughput_vs_attn_data = ColumnDataSource(data=dict(
@@ -201,12 +206,19 @@
         if self.router_adv_daemon:
             self.router_adv_daemon.stop()
         try:
+            from bokeh.plotting import output_file
+            from bokeh.plotting import save
+
             output_path = context.get_current_context().get_base_output_path()
             test_class_name = context.get_current_context().test_class_name
 
             output_file(f'{output_path}/{test_class_name}/rvr_summary.html',
                         title='RvR Sumamry')
             save(list(self.rvr_graph_summary))
+        except ImportError as e:
+            logging.warn("bokeh is not installed: skipping creation of graphs. "
+                         "Note CSV files are still available. If graphs are "
+                         "desired, install antlion with the \"bokeh\" feature.")
         except Exception as e:
             self.log.error(f'Unable to generate RvR summary file: {e}')
 
diff --git a/tests/wlan/performance/WlanWmmTest.py b/src/antlion/tests/wlan/performance/WlanWmmTest.py
similarity index 96%
rename from tests/wlan/performance/WlanWmmTest.py
rename to src/antlion/tests/wlan/performance/WlanWmmTest.py
index 72049ae..2094232 100644
--- a/tests/wlan/performance/WlanWmmTest.py
+++ b/src/antlion/tests/wlan/performance/WlanWmmTest.py
@@ -17,20 +17,16 @@
 import operator
 import time
 
-from bokeh.palettes import Category10
-from bokeh.plotting import ColumnDataSource, figure, output_file, save
-from bokeh.models import Span, Label
-
 from antlion import asserts
 from antlion import context
 from antlion import utils
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
-from antlion_contrib.test_utils.abstract_devices import wmm_transceiver
-from antlion_contrib.test_utils.fuchsia import wmm_test_cases
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
-from antlion_contrib.test_utils.abstract_devices.wlan_device import create_wlan_device
+from antlion.test_utils.abstract_devices import wmm_transceiver
+from antlion.test_utils.fuchsia import wmm_test_cases
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.abstract_devices.wlan_device import create_wlan_device
 
 DEFAULT_N_CAPABILITIES_20_MHZ = [
     hostapd_constants.N_CAPABILITY_LDPC, hostapd_constants.N_CAPABILITY_SGI20,
@@ -404,6 +400,16 @@
 
         """
 
+        try:
+            from bokeh.palettes import Category10
+            from bokeh.plotting import ColumnDataSource, figure, output_file, save
+            from bokeh.models import Span, Label
+        except ImportError as e:
+            self.log.warn("bokeh is not installed: skipping creation of graphs. "
+                          "Note CSV files are still available. If graphs are "
+                          "desired, install antlion with the \"bokeh\" feature.")
+            return
+
         output_path = context.get_current_context().get_base_output_path()
         output_file_name = '%s/WlanWmmTest/%s.html' % (output_path,
                                                        self.test_name)
@@ -451,12 +457,12 @@
                     dict(time=[
                         x for x in range(start_time, start_time + stream_time)
                     ],
-                         instantaneous_bws=instantaneous_rates,
-                         avg_bw=[avg_rate for _ in range(stream_time)],
-                         stream_id=[stream_id for _ in range(stream_time)],
-                         attempted_bw=[
-                             stream_bw_formula_str for _ in range(stream_time)
-                         ]))
+                        instantaneous_bws=instantaneous_rates,
+                        avg_bw=[avg_rate for _ in range(stream_time)],
+                        stream_id=[stream_id for _ in range(stream_time)],
+                        attempted_bw=[
+                        stream_bw_formula_str for _ in range(stream_time)
+                    ]))
                 line = {
                     'x_axis': 'time',
                     'y_axis': 'instantaneous_bws',
diff --git a/tests/wlan_policy/HiddenNetworksTest.py b/src/antlion/tests/wlan_policy/HiddenNetworksTest.py
similarity index 98%
rename from tests/wlan_policy/HiddenNetworksTest.py
rename to src/antlion/tests/wlan_policy/HiddenNetworksTest.py
index e4a2f6c..aa2c7ba 100644
--- a/tests/wlan_policy/HiddenNetworksTest.py
+++ b/src/antlion/tests/wlan_policy/HiddenNetworksTest.py
@@ -20,7 +20,7 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 from antlion.utils import rand_ascii_str
 
 # These tests should have a longer timeout for connecting than normal connect
diff --git a/tests/wlan_policy/PolicyScanTest.py b/src/antlion/tests/wlan_policy/PolicyScanTest.py
similarity index 98%
rename from tests/wlan_policy/PolicyScanTest.py
rename to src/antlion/tests/wlan_policy/PolicyScanTest.py
index e38cdfe..ca05e6a 100644
--- a/tests/wlan_policy/PolicyScanTest.py
+++ b/src/antlion/tests/wlan_policy/PolicyScanTest.py
@@ -21,7 +21,7 @@
 from antlion import signals
 from antlion.controllers.ap_lib import (hostapd_ap_preset, hostapd_bss_settings,
                                      hostapd_constants, hostapd_security)
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 
 class PolicyScanTest(WifiBaseTest):
diff --git a/tests/wlan_policy/RegulatoryRecoveryTest.py b/src/antlion/tests/wlan_policy/RegulatoryRecoveryTest.py
similarity index 98%
rename from tests/wlan_policy/RegulatoryRecoveryTest.py
rename to src/antlion/tests/wlan_policy/RegulatoryRecoveryTest.py
index e5b770c..3e308bb 100644
--- a/tests/wlan_policy/RegulatoryRecoveryTest.py
+++ b/src/antlion/tests/wlan_policy/RegulatoryRecoveryTest.py
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 from antlion import signals
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 
 
 class RegulatoryRecoveryTest(WifiBaseTest):
diff --git a/tests/wlan_policy/SavedNetworksTest.py b/src/antlion/tests/wlan_policy/SavedNetworksTest.py
similarity index 99%
rename from tests/wlan_policy/SavedNetworksTest.py
rename to src/antlion/tests/wlan_policy/SavedNetworksTest.py
index 8b174c2..ca9ade2 100644
--- a/tests/wlan_policy/SavedNetworksTest.py
+++ b/src/antlion/tests/wlan_policy/SavedNetworksTest.py
@@ -22,7 +22,7 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 from antlion.utils import rand_ascii_str, rand_hex_str
 
 PSK_LEN = 64
diff --git a/tests/wlan_policy/StartStopClientConnectionsTest.py b/src/antlion/tests/wlan_policy/StartStopClientConnectionsTest.py
similarity index 98%
rename from tests/wlan_policy/StartStopClientConnectionsTest.py
rename to src/antlion/tests/wlan_policy/StartStopClientConnectionsTest.py
index c80e5b8..01a3094 100644
--- a/tests/wlan_policy/StartStopClientConnectionsTest.py
+++ b/src/antlion/tests/wlan_policy/StartStopClientConnectionsTest.py
@@ -20,7 +20,7 @@
 from antlion.controllers.access_point import setup_ap
 from antlion.controllers.ap_lib import hostapd_constants
 from antlion.controllers.ap_lib import hostapd_security
-from antlion_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+from antlion.test_utils.wifi.WifiBaseTest import WifiBaseTest
 from antlion.utils import rand_ascii_str
 
 DISCONNECTED = "Disconnected"
diff --git a/unit_tests/AttenuatorSanityTest.py b/src/antlion/unit_tests/AttenuatorSanityTest.py
similarity index 100%
rename from unit_tests/AttenuatorSanityTest.py
rename to src/antlion/unit_tests/AttenuatorSanityTest.py
diff --git a/unit_tests/IntegrationTest.py b/src/antlion/unit_tests/IntegrationTest.py
similarity index 100%
rename from unit_tests/IntegrationTest.py
rename to src/antlion/unit_tests/IntegrationTest.py
diff --git a/unit_tests/Sl4aSanityTest.py b/src/antlion/unit_tests/Sl4aSanityTest.py
similarity index 100%
rename from unit_tests/Sl4aSanityTest.py
rename to src/antlion/unit_tests/Sl4aSanityTest.py
diff --git a/unit_tests/SnifferSanityTest.py b/src/antlion/unit_tests/SnifferSanityTest.py
similarity index 100%
rename from unit_tests/SnifferSanityTest.py
rename to src/antlion/unit_tests/SnifferSanityTest.py
diff --git a/src/antlion_contrib/__init__.py b/src/antlion/unit_tests/__init__.py
similarity index 100%
rename from src/antlion_contrib/__init__.py
rename to src/antlion/unit_tests/__init__.py
diff --git a/unit_tests/acts_adb_test.py b/src/antlion/unit_tests/acts_adb_test.py
similarity index 100%
rename from unit_tests/acts_adb_test.py
rename to src/antlion/unit_tests/acts_adb_test.py
diff --git a/unit_tests/acts_android_device_test.py b/src/antlion/unit_tests/acts_android_device_test.py
similarity index 100%
rename from unit_tests/acts_android_device_test.py
rename to src/antlion/unit_tests/acts_android_device_test.py
diff --git a/unit_tests/acts_asserts_test.py b/src/antlion/unit_tests/acts_asserts_test.py
similarity index 100%
rename from unit_tests/acts_asserts_test.py
rename to src/antlion/unit_tests/acts_asserts_test.py
diff --git a/unit_tests/acts_base_class_test.py b/src/antlion/unit_tests/acts_base_class_test.py
similarity index 100%
rename from unit_tests/acts_base_class_test.py
rename to src/antlion/unit_tests/acts_base_class_test.py
diff --git a/unit_tests/acts_confidence_test_config.json b/src/antlion/unit_tests/acts_confidence_test_config.json
similarity index 100%
rename from unit_tests/acts_confidence_test_config.json
rename to src/antlion/unit_tests/acts_confidence_test_config.json
diff --git a/unit_tests/acts_context_test.py b/src/antlion/unit_tests/acts_context_test.py
similarity index 100%
rename from unit_tests/acts_context_test.py
rename to src/antlion/unit_tests/acts_context_test.py
diff --git a/unit_tests/acts_error_test.py b/src/antlion/unit_tests/acts_error_test.py
similarity index 100%
rename from unit_tests/acts_error_test.py
rename to src/antlion/unit_tests/acts_error_test.py
diff --git a/unit_tests/acts_host_utils_test.py b/src/antlion/unit_tests/acts_host_utils_test.py
similarity index 100%
rename from unit_tests/acts_host_utils_test.py
rename to src/antlion/unit_tests/acts_host_utils_test.py
diff --git a/unit_tests/acts_import_unit_test.py b/src/antlion/unit_tests/acts_import_unit_test.py
similarity index 100%
rename from unit_tests/acts_import_unit_test.py
rename to src/antlion/unit_tests/acts_import_unit_test.py
diff --git a/unit_tests/acts_job_test.py b/src/antlion/unit_tests/acts_job_test.py
similarity index 97%
rename from unit_tests/acts_job_test.py
rename to src/antlion/unit_tests/acts_job_test.py
index 84d5c7f..12ff68f 100755
--- a/unit_tests/acts_job_test.py
+++ b/src/antlion/unit_tests/acts_job_test.py
@@ -14,9 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Import the python3 compatible bytes()
-from builtins import bytes
-
 import mock
 import os
 import sys
diff --git a/unit_tests/acts_logger_test.py b/src/antlion/unit_tests/acts_logger_test.py
similarity index 100%
rename from unit_tests/acts_logger_test.py
rename to src/antlion/unit_tests/acts_logger_test.py
diff --git a/unit_tests/acts_records_test.py b/src/antlion/unit_tests/acts_records_test.py
similarity index 100%
rename from unit_tests/acts_records_test.py
rename to src/antlion/unit_tests/acts_records_test.py
diff --git a/unit_tests/acts_relay_controller_test.py b/src/antlion/unit_tests/acts_relay_controller_test.py
similarity index 100%
rename from unit_tests/acts_relay_controller_test.py
rename to src/antlion/unit_tests/acts_relay_controller_test.py
diff --git a/unit_tests/acts_sanity_test_config.json b/src/antlion/unit_tests/acts_sanity_test_config.json
similarity index 100%
rename from unit_tests/acts_sanity_test_config.json
rename to src/antlion/unit_tests/acts_sanity_test_config.json
diff --git a/unit_tests/acts_sniffer_test_config.json b/src/antlion/unit_tests/acts_sniffer_test_config.json
similarity index 100%
rename from unit_tests/acts_sniffer_test_config.json
rename to src/antlion/unit_tests/acts_sniffer_test_config.json
diff --git a/unit_tests/acts_test_decorators_test.py b/src/antlion/unit_tests/acts_test_decorators_test.py
similarity index 100%
rename from unit_tests/acts_test_decorators_test.py
rename to src/antlion/unit_tests/acts_test_decorators_test.py
diff --git a/unit_tests/acts_test_runner_test.py b/src/antlion/unit_tests/acts_test_runner_test.py
similarity index 100%
rename from unit_tests/acts_test_runner_test.py
rename to src/antlion/unit_tests/acts_test_runner_test.py
diff --git a/unit_tests/acts_utils_test.py b/src/antlion/unit_tests/acts_utils_test.py
similarity index 96%
rename from unit_tests/acts_utils_test.py
rename to src/antlion/unit_tests/acts_utils_test.py
index bf55ec6..1c8b21f 100755
--- a/unit_tests/acts_utils_test.py
+++ b/src/antlion/unit_tests/acts_utils_test.py
@@ -280,8 +280,8 @@
         values returned from each individual callable in the order passed in.
         """
         ret_values = utils.run_concurrent_actions_no_raise(
-            lambda: self.function_returns_passed_in_arg(
-                'ARG1'), lambda: self.function_returns_passed_in_arg('ARG2'),
+            lambda: self.function_returns_passed_in_arg('ARG1'),
+            lambda: self.function_returns_passed_in_arg('ARG2'),
             lambda: self.function_returns_passed_in_arg('ARG3'))
 
         self.assertEqual(len(ret_values), 3)
@@ -312,8 +312,8 @@
         """
 
         ret_values = utils.run_concurrent_actions(
-            lambda: self.function_returns_passed_in_arg(
-                'ARG1'), lambda: self.function_returns_passed_in_arg('ARG2'),
+            lambda: self.function_returns_passed_in_arg('ARG1'),
+            lambda: self.function_returns_passed_in_arg('ARG2'),
             lambda: self.function_returns_passed_in_arg('ARG3'))
 
         self.assertEqual(len(ret_values), 3)
@@ -370,6 +370,7 @@
 
 
 class IpAddressUtilTest(unittest.TestCase):
+
     def test_positive_ipv4_normal_address(self):
         ip_address = "192.168.1.123"
         self.assertTrue(utils.is_valid_ipv4_address(ip_address))
@@ -432,7 +433,8 @@
         self.assertEqual(utils.get_interface_ip_addresses(job, 'wlan1'),
                          CORRECT_EMPTY_IP_LIST)
 
-    @mock.patch('antlion.controllers.utils_lib.ssh.connection.SshConnection.run')
+    @mock.patch(
+        'antlion.controllers.utils_lib.ssh.connection.SshConnection.run')
     def test_ssh_get_interface_ip_addresses_full(self, ssh_mock):
         ssh_mock.side_effect = [
             job.Result(stdout=bytes(MOCK_ENO1_IP_ADDRESSES, 'utf-8'),
@@ -442,7 +444,8 @@
             utils.get_interface_ip_addresses(SshConnection('mock_settings'),
                                              'eno1'), CORRECT_FULL_IP_LIST)
 
-    @mock.patch('antlion.controllers.utils_lib.ssh.connection.SshConnection.run')
+    @mock.patch(
+        'antlion.controllers.utils_lib.ssh.connection.SshConnection.run')
     def test_ssh_get_interface_ip_addresses_empty(self, ssh_mock):
         ssh_mock.side_effect = [
             job.Result(stdout=bytes(MOCK_WLAN1_IP_ADDRESSES, 'utf-8'),
@@ -483,14 +486,14 @@
     @mock.patch(
         'antlion.controllers.fuchsia_lib.sl4f.SL4F._verify_sl4f_connection')
     @mock.patch('antlion.controllers.fuchsia_device.'
-                'FuchsiaDevice._set_control_path_config')
+                'FuchsiaDevice._generate_ssh_config')
     @mock.patch('antlion.controllers.'
                 'fuchsia_lib.netstack.netstack_lib.'
                 'FuchsiaNetstackLib.netstackListInterfaces')
     def test_fuchsia_get_interface_ip_addresses_full(
-            self, list_interfaces_mock, control_path_mock,
-            verify_sl4f_conn_mock, ssh_run_mock, wait_for_port_mock,
-            ffx_mock, sl4f_mock):
+            self, list_interfaces_mock, generate_ssh_config_mock,
+            verify_sl4f_conn_mock, ssh_run_mock, wait_for_port_mock, ffx_mock,
+            sl4f_mock):
         # Configure the log path which is required by ACTS logger.
         logging.log_path = '/tmp/unit_test_garbage'
 
@@ -519,14 +522,14 @@
     @mock.patch(
         'antlion.controllers.fuchsia_lib.sl4f.SL4F._verify_sl4f_connection')
     @mock.patch('antlion.controllers.fuchsia_device.'
-                'FuchsiaDevice._set_control_path_config')
+                'FuchsiaDevice._generate_ssh_config')
     @mock.patch('antlion.controllers.'
                 'fuchsia_lib.netstack.netstack_lib.'
                 'FuchsiaNetstackLib.netstackListInterfaces')
     def test_fuchsia_get_interface_ip_addresses_empty(
-            self, list_interfaces_mock, control_path_mock,
-            verify_sl4f_conn_mock, ssh_run_mock, wait_for_port_mock,
-            ffx_mock, sl4f_mock):
+            self, list_interfaces_mock, generate_ssh_config_mock,
+            verify_sl4f_conn_mock, ssh_run_mock, wait_for_port_mock, ffx_mock,
+            sl4f_mock):
         # Configure the log path which is required by ACTS logger.
         logging.log_path = '/tmp/unit_test_garbage'
 
@@ -548,7 +551,9 @@
 
 
 class GetDeviceTest(unittest.TestCase):
+
     class TestDevice:
+
         def __init__(self, id, device_type=None) -> None:
             self.id = id
             if device_type:
diff --git a/unit_tests/controllers/__init__.py b/src/antlion/unit_tests/controllers/__init__.py
similarity index 100%
rename from unit_tests/controllers/__init__.py
rename to src/antlion/unit_tests/controllers/__init__.py
diff --git a/unit_tests/controllers/abstract_inst_test.py b/src/antlion/unit_tests/controllers/abstract_inst_test.py
similarity index 100%
rename from unit_tests/controllers/abstract_inst_test.py
rename to src/antlion/unit_tests/controllers/abstract_inst_test.py
diff --git a/unit_tests/controllers/android_lib/__init__.py b/src/antlion/unit_tests/controllers/android_lib/__init__.py
similarity index 100%
rename from unit_tests/controllers/android_lib/__init__.py
rename to src/antlion/unit_tests/controllers/android_lib/__init__.py
diff --git a/unit_tests/controllers/android_lib/logcat_test.py b/src/antlion/unit_tests/controllers/android_lib/logcat_test.py
similarity index 100%
rename from unit_tests/controllers/android_lib/logcat_test.py
rename to src/antlion/unit_tests/controllers/android_lib/logcat_test.py
diff --git a/unit_tests/controllers/android_lib/services_test.py b/src/antlion/unit_tests/controllers/android_lib/services_test.py
similarity index 100%
rename from unit_tests/controllers/android_lib/services_test.py
rename to src/antlion/unit_tests/controllers/android_lib/services_test.py
diff --git a/unit_tests/controllers/ap_lib/__init__.py b/src/antlion/unit_tests/controllers/ap_lib/__init__.py
similarity index 100%
rename from unit_tests/controllers/ap_lib/__init__.py
rename to src/antlion/unit_tests/controllers/ap_lib/__init__.py
diff --git a/unit_tests/controllers/ap_lib/dhcp_config_test.py b/src/antlion/unit_tests/controllers/ap_lib/dhcp_config_test.py
similarity index 100%
rename from unit_tests/controllers/ap_lib/dhcp_config_test.py
rename to src/antlion/unit_tests/controllers/ap_lib/dhcp_config_test.py
diff --git a/unit_tests/controllers/ap_lib/radio_measurement_test.py b/src/antlion/unit_tests/controllers/ap_lib/radio_measurement_test.py
similarity index 100%
rename from unit_tests/controllers/ap_lib/radio_measurement_test.py
rename to src/antlion/unit_tests/controllers/ap_lib/radio_measurement_test.py
diff --git a/unit_tests/controllers/ap_lib/radvd_test.py b/src/antlion/unit_tests/controllers/ap_lib/radvd_test.py
similarity index 100%
rename from unit_tests/controllers/ap_lib/radvd_test.py
rename to src/antlion/unit_tests/controllers/ap_lib/radvd_test.py
diff --git a/unit_tests/controllers/ap_lib/wireless_network_management_test.py b/src/antlion/unit_tests/controllers/ap_lib/wireless_network_management_test.py
similarity index 100%
rename from unit_tests/controllers/ap_lib/wireless_network_management_test.py
rename to src/antlion/unit_tests/controllers/ap_lib/wireless_network_management_test.py
diff --git a/unit_tests/controllers/bits_lib/__init__.py b/src/antlion/unit_tests/controllers/bits_lib/__init__.py
similarity index 100%
rename from unit_tests/controllers/bits_lib/__init__.py
rename to src/antlion/unit_tests/controllers/bits_lib/__init__.py
diff --git a/unit_tests/controllers/bits_lib/bits_client_test.py b/src/antlion/unit_tests/controllers/bits_lib/bits_client_test.py
similarity index 100%
rename from unit_tests/controllers/bits_lib/bits_client_test.py
rename to src/antlion/unit_tests/controllers/bits_lib/bits_client_test.py
diff --git a/unit_tests/controllers/bits_lib/bits_service_config_test.py b/src/antlion/unit_tests/controllers/bits_lib/bits_service_config_test.py
similarity index 100%
rename from unit_tests/controllers/bits_lib/bits_service_config_test.py
rename to src/antlion/unit_tests/controllers/bits_lib/bits_service_config_test.py
diff --git a/unit_tests/controllers/bits_lib/bits_service_test.py b/src/antlion/unit_tests/controllers/bits_lib/bits_service_test.py
similarity index 100%
rename from unit_tests/controllers/bits_lib/bits_service_test.py
rename to src/antlion/unit_tests/controllers/bits_lib/bits_service_test.py
diff --git a/unit_tests/controllers/bits_test.py b/src/antlion/unit_tests/controllers/bits_test.py
similarity index 100%
rename from unit_tests/controllers/bits_test.py
rename to src/antlion/unit_tests/controllers/bits_test.py
diff --git a/unit_tests/controllers/data/sample_monsoon_data b/src/antlion/unit_tests/controllers/data/sample_monsoon_data
similarity index 100%
rename from unit_tests/controllers/data/sample_monsoon_data
rename to src/antlion/unit_tests/controllers/data/sample_monsoon_data
diff --git a/unit_tests/controllers/iperf_client_test.py b/src/antlion/unit_tests/controllers/iperf_client_test.py
similarity index 100%
rename from unit_tests/controllers/iperf_client_test.py
rename to src/antlion/unit_tests/controllers/iperf_client_test.py
diff --git a/unit_tests/controllers/iperf_server_test.py b/src/antlion/unit_tests/controllers/iperf_server_test.py
similarity index 100%
rename from unit_tests/controllers/iperf_server_test.py
rename to src/antlion/unit_tests/controllers/iperf_server_test.py
diff --git a/unit_tests/controllers/monsoon_lib/__init__.py b/src/antlion/unit_tests/controllers/monsoon_lib/__init__.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/__init__.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/__init__.py
diff --git a/unit_tests/controllers/monsoon_lib/api/__init__.py b/src/antlion/unit_tests/controllers/monsoon_lib/api/__init__.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/api/__init__.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/api/__init__.py
diff --git a/unit_tests/controllers/monsoon_lib/api/hvpm/__init__.py b/src/antlion/unit_tests/controllers/monsoon_lib/api/hvpm/__init__.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/api/hvpm/__init__.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/api/hvpm/__init__.py
diff --git a/unit_tests/controllers/monsoon_lib/api/hvpm/monsoon_test.py b/src/antlion/unit_tests/controllers/monsoon_lib/api/hvpm/monsoon_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/api/hvpm/monsoon_test.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/api/hvpm/monsoon_test.py
diff --git a/unit_tests/controllers/monsoon_lib/api/lvpm_stock/__init__.py b/src/antlion/unit_tests/controllers/monsoon_lib/api/lvpm_stock/__init__.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/api/lvpm_stock/__init__.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/api/lvpm_stock/__init__.py
diff --git a/unit_tests/controllers/monsoon_lib/api/lvpm_stock/monsoon_test.py b/src/antlion/unit_tests/controllers/monsoon_lib/api/lvpm_stock/monsoon_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/api/lvpm_stock/monsoon_test.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/api/lvpm_stock/monsoon_test.py
diff --git a/unit_tests/controllers/monsoon_lib/api/monsoon_test.py b/src/antlion/unit_tests/controllers/monsoon_lib/api/monsoon_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/api/monsoon_test.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/api/monsoon_test.py
diff --git a/unit_tests/controllers/monsoon_lib/sampling/__init__.py b/src/antlion/unit_tests/controllers/monsoon_lib/sampling/__init__.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/sampling/__init__.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/sampling/__init__.py
diff --git a/unit_tests/controllers/monsoon_lib/sampling/engine/__init__.py b/src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/__init__.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/sampling/engine/__init__.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/__init__.py
diff --git a/unit_tests/controllers/monsoon_lib/sampling/engine/assembly_line_test.py b/src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/assembly_line_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/sampling/engine/assembly_line_test.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/assembly_line_test.py
diff --git a/unit_tests/controllers/monsoon_lib/sampling/engine/calibration_test.py b/src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/calibration_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/sampling/engine/calibration_test.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/calibration_test.py
diff --git a/unit_tests/controllers/monsoon_lib/sampling/engine/transformer_test.py b/src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/transformer_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/sampling/engine/transformer_test.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/transformer_test.py
diff --git a/unit_tests/controllers/monsoon_lib/sampling/engine/transformers_test.py b/src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/transformers_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_lib/sampling/engine/transformers_test.py
rename to src/antlion/unit_tests/controllers/monsoon_lib/sampling/engine/transformers_test.py
diff --git a/unit_tests/controllers/monsoon_test.py b/src/antlion/unit_tests/controllers/monsoon_test.py
similarity index 100%
rename from unit_tests/controllers/monsoon_test.py
rename to src/antlion/unit_tests/controllers/monsoon_test.py
diff --git a/unit_tests/controllers/pdu_lib/__init__.py b/src/antlion/unit_tests/controllers/pdu_lib/__init__.py
similarity index 100%
rename from unit_tests/controllers/pdu_lib/__init__.py
rename to src/antlion/unit_tests/controllers/pdu_lib/__init__.py
diff --git a/unit_tests/controllers/pdu_lib/synaccess/__init__.py b/src/antlion/unit_tests/controllers/pdu_lib/synaccess/__init__.py
similarity index 100%
rename from unit_tests/controllers/pdu_lib/synaccess/__init__.py
rename to src/antlion/unit_tests/controllers/pdu_lib/synaccess/__init__.py
diff --git a/unit_tests/controllers/pdu_lib/synaccess/np02b_test.py b/src/antlion/unit_tests/controllers/pdu_lib/synaccess/np02b_test.py
similarity index 100%
rename from unit_tests/controllers/pdu_lib/synaccess/np02b_test.py
rename to src/antlion/unit_tests/controllers/pdu_lib/synaccess/np02b_test.py
diff --git a/unit_tests/controllers/power_metrics_test.py b/src/antlion/unit_tests/controllers/power_metrics_test.py
similarity index 100%
rename from unit_tests/controllers/power_metrics_test.py
rename to src/antlion/unit_tests/controllers/power_metrics_test.py
diff --git a/unit_tests/controllers/power_monitor_test.py b/src/antlion/unit_tests/controllers/power_monitor_test.py
similarity index 100%
rename from unit_tests/controllers/power_monitor_test.py
rename to src/antlion/unit_tests/controllers/power_monitor_test.py
diff --git a/unit_tests/controllers/rohdeschwarz_lib/__init__.py b/src/antlion/unit_tests/controllers/rohdeschwarz_lib/__init__.py
similarity index 100%
rename from unit_tests/controllers/rohdeschwarz_lib/__init__.py
rename to src/antlion/unit_tests/controllers/rohdeschwarz_lib/__init__.py
diff --git a/unit_tests/controllers/rohdeschwarz_lib/contest_test.py b/src/antlion/unit_tests/controllers/rohdeschwarz_lib/contest_test.py
similarity index 100%
rename from unit_tests/controllers/rohdeschwarz_lib/contest_test.py
rename to src/antlion/unit_tests/controllers/rohdeschwarz_lib/contest_test.py
diff --git a/unit_tests/controllers/sl4a_lib/__init__.py b/src/antlion/unit_tests/controllers/sl4a_lib/__init__.py
similarity index 100%
rename from unit_tests/controllers/sl4a_lib/__init__.py
rename to src/antlion/unit_tests/controllers/sl4a_lib/__init__.py
diff --git a/unit_tests/controllers/sl4a_lib/rpc_client_test.py b/src/antlion/unit_tests/controllers/sl4a_lib/rpc_client_test.py
similarity index 100%
rename from unit_tests/controllers/sl4a_lib/rpc_client_test.py
rename to src/antlion/unit_tests/controllers/sl4a_lib/rpc_client_test.py
diff --git a/unit_tests/controllers/sl4a_lib/rpc_connection_test.py b/src/antlion/unit_tests/controllers/sl4a_lib/rpc_connection_test.py
similarity index 100%
rename from unit_tests/controllers/sl4a_lib/rpc_connection_test.py
rename to src/antlion/unit_tests/controllers/sl4a_lib/rpc_connection_test.py
diff --git a/unit_tests/controllers/sl4a_lib/sl4a_manager_test.py b/src/antlion/unit_tests/controllers/sl4a_lib/sl4a_manager_test.py
similarity index 100%
rename from unit_tests/controllers/sl4a_lib/sl4a_manager_test.py
rename to src/antlion/unit_tests/controllers/sl4a_lib/sl4a_manager_test.py
diff --git a/unit_tests/controllers/sl4a_lib/sl4a_session_test.py b/src/antlion/unit_tests/controllers/sl4a_lib/sl4a_session_test.py
similarity index 100%
rename from unit_tests/controllers/sl4a_lib/sl4a_session_test.py
rename to src/antlion/unit_tests/controllers/sl4a_lib/sl4a_session_test.py
diff --git a/unit_tests/event/__init__.py b/src/antlion/unit_tests/event/__init__.py
similarity index 100%
rename from unit_tests/event/__init__.py
rename to src/antlion/unit_tests/event/__init__.py
diff --git a/unit_tests/event/decorators_test.py b/src/antlion/unit_tests/event/decorators_test.py
similarity index 100%
rename from unit_tests/event/decorators_test.py
rename to src/antlion/unit_tests/event/decorators_test.py
diff --git a/unit_tests/event/event_bus_integration_test.py b/src/antlion/unit_tests/event/event_bus_integration_test.py
similarity index 100%
rename from unit_tests/event/event_bus_integration_test.py
rename to src/antlion/unit_tests/event/event_bus_integration_test.py
diff --git a/unit_tests/event/event_bus_test.py b/src/antlion/unit_tests/event/event_bus_test.py
similarity index 100%
rename from unit_tests/event/event_bus_test.py
rename to src/antlion/unit_tests/event/event_bus_test.py
diff --git a/unit_tests/event/event_subscription_test.py b/src/antlion/unit_tests/event/event_subscription_test.py
similarity index 100%
rename from unit_tests/event/event_subscription_test.py
rename to src/antlion/unit_tests/event/event_subscription_test.py
diff --git a/unit_tests/event/subscription_bundle_test.py b/src/antlion/unit_tests/event/subscription_bundle_test.py
similarity index 100%
rename from unit_tests/event/subscription_bundle_test.py
rename to src/antlion/unit_tests/event/subscription_bundle_test.py
diff --git a/unit_tests/libs/__init__.py b/src/antlion/unit_tests/libs/__init__.py
similarity index 100%
rename from unit_tests/libs/__init__.py
rename to src/antlion/unit_tests/libs/__init__.py
diff --git a/unit_tests/libs/logging/__init__.py b/src/antlion/unit_tests/libs/logging/__init__.py
similarity index 100%
rename from unit_tests/libs/logging/__init__.py
rename to src/antlion/unit_tests/libs/logging/__init__.py
diff --git a/unit_tests/libs/logging/log_stream_test.py b/src/antlion/unit_tests/libs/logging/log_stream_test.py
similarity index 100%
rename from unit_tests/libs/logging/log_stream_test.py
rename to src/antlion/unit_tests/libs/logging/log_stream_test.py
diff --git a/unit_tests/libs/ota/__init__.py b/src/antlion/unit_tests/libs/ota/__init__.py
similarity index 100%
rename from unit_tests/libs/ota/__init__.py
rename to src/antlion/unit_tests/libs/ota/__init__.py
diff --git a/unit_tests/libs/ota/dummy_ota_package.zip b/src/antlion/unit_tests/libs/ota/dummy_ota_package.zip
similarity index 100%
rename from unit_tests/libs/ota/dummy_ota_package.zip
rename to src/antlion/unit_tests/libs/ota/dummy_ota_package.zip
Binary files differ
diff --git a/unit_tests/libs/ota/ota_runners/__init__.py b/src/antlion/unit_tests/libs/ota/ota_runners/__init__.py
similarity index 100%
rename from unit_tests/libs/ota/ota_runners/__init__.py
rename to src/antlion/unit_tests/libs/ota/ota_runners/__init__.py
diff --git a/unit_tests/libs/ota/ota_runners/ota_runner_factory_test.py b/src/antlion/unit_tests/libs/ota/ota_runners/ota_runner_factory_test.py
similarity index 100%
rename from unit_tests/libs/ota/ota_runners/ota_runner_factory_test.py
rename to src/antlion/unit_tests/libs/ota/ota_runners/ota_runner_factory_test.py
diff --git a/unit_tests/libs/ota/ota_runners/ota_runner_test.py b/src/antlion/unit_tests/libs/ota/ota_runners/ota_runner_test.py
similarity index 100%
rename from unit_tests/libs/ota/ota_runners/ota_runner_test.py
rename to src/antlion/unit_tests/libs/ota/ota_runners/ota_runner_test.py
diff --git a/unit_tests/libs/ota/ota_tools/__init__.py b/src/antlion/unit_tests/libs/ota/ota_tools/__init__.py
similarity index 100%
rename from unit_tests/libs/ota/ota_tools/__init__.py
rename to src/antlion/unit_tests/libs/ota/ota_tools/__init__.py
diff --git a/unit_tests/libs/ota/ota_tools/adb_sideload_ota_tool_test.py b/src/antlion/unit_tests/libs/ota/ota_tools/adb_sideload_ota_tool_test.py
similarity index 100%
rename from unit_tests/libs/ota/ota_tools/adb_sideload_ota_tool_test.py
rename to src/antlion/unit_tests/libs/ota/ota_tools/adb_sideload_ota_tool_test.py
diff --git a/unit_tests/libs/ota/ota_tools/ota_tool_factory_test.py b/src/antlion/unit_tests/libs/ota/ota_tools/ota_tool_factory_test.py
similarity index 100%
rename from unit_tests/libs/ota/ota_tools/ota_tool_factory_test.py
rename to src/antlion/unit_tests/libs/ota/ota_tools/ota_tool_factory_test.py
diff --git a/unit_tests/libs/ota/ota_tools/ota_tool_test.py b/src/antlion/unit_tests/libs/ota/ota_tools/ota_tool_test.py
similarity index 100%
rename from unit_tests/libs/ota/ota_tools/ota_tool_test.py
rename to src/antlion/unit_tests/libs/ota/ota_tools/ota_tool_test.py
diff --git a/unit_tests/libs/ota/ota_tools/update_device_ota_tool_test.py b/src/antlion/unit_tests/libs/ota/ota_tools/update_device_ota_tool_test.py
similarity index 100%
rename from unit_tests/libs/ota/ota_tools/update_device_ota_tool_test.py
rename to src/antlion/unit_tests/libs/ota/ota_tools/update_device_ota_tool_test.py
diff --git a/unit_tests/libs/ota/ota_updater_test.py b/src/antlion/unit_tests/libs/ota/ota_updater_test.py
similarity index 100%
rename from unit_tests/libs/ota/ota_updater_test.py
rename to src/antlion/unit_tests/libs/ota/ota_updater_test.py
diff --git a/unit_tests/libs/proc/__init__.py b/src/antlion/unit_tests/libs/proc/__init__.py
similarity index 100%
rename from unit_tests/libs/proc/__init__.py
rename to src/antlion/unit_tests/libs/proc/__init__.py
diff --git a/unit_tests/libs/proc/process_test.py b/src/antlion/unit_tests/libs/proc/process_test.py
similarity index 100%
rename from unit_tests/libs/proc/process_test.py
rename to src/antlion/unit_tests/libs/proc/process_test.py
diff --git a/unit_tests/libs/test_bindings/__init__.py b/src/antlion/unit_tests/libs/test_bindings/__init__.py
similarity index 100%
rename from unit_tests/libs/test_bindings/__init__.py
rename to src/antlion/unit_tests/libs/test_bindings/__init__.py
diff --git a/unit_tests/libs/test_bindings/all_tests_decorator_test.py b/src/antlion/unit_tests/libs/test_bindings/all_tests_decorator_test.py
similarity index 100%
rename from unit_tests/libs/test_bindings/all_tests_decorator_test.py
rename to src/antlion/unit_tests/libs/test_bindings/all_tests_decorator_test.py
diff --git a/unit_tests/libs/test_bindings/binding_test.py b/src/antlion/unit_tests/libs/test_bindings/binding_test.py
similarity index 100%
rename from unit_tests/libs/test_bindings/binding_test.py
rename to src/antlion/unit_tests/libs/test_bindings/binding_test.py
diff --git a/unit_tests/libs/uicd/__init__.py b/src/antlion/unit_tests/libs/uicd/__init__.py
similarity index 100%
rename from unit_tests/libs/uicd/__init__.py
rename to src/antlion/unit_tests/libs/uicd/__init__.py
diff --git a/unit_tests/libs/uicd/uicd_cli_test.py b/src/antlion/unit_tests/libs/uicd/uicd_cli_test.py
similarity index 100%
rename from unit_tests/libs/uicd/uicd_cli_test.py
rename to src/antlion/unit_tests/libs/uicd/uicd_cli_test.py
diff --git a/unit_tests/libs/version_selector_test.py b/src/antlion/unit_tests/libs/version_selector_test.py
similarity index 99%
rename from unit_tests/libs/version_selector_test.py
rename to src/antlion/unit_tests/libs/version_selector_test.py
index 5a4879f..7abfbe7 100755
--- a/unit_tests/libs/version_selector_test.py
+++ b/src/antlion/unit_tests/libs/version_selector_test.py
@@ -13,8 +13,6 @@
 # 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.
-from __future__ import absolute_import
-
 import os
 import sys
 
diff --git a/unit_tests/mock_controller.py b/src/antlion/unit_tests/mock_controller.py
similarity index 100%
rename from unit_tests/mock_controller.py
rename to src/antlion/unit_tests/mock_controller.py
diff --git a/unit_tests/test_data/1k_2k.raw b/src/antlion/unit_tests/test_data/1k_2k.raw
similarity index 100%
rename from unit_tests/test_data/1k_2k.raw
rename to src/antlion/unit_tests/test_data/1k_2k.raw
Binary files differ
diff --git a/unit_tests/test_runner_test.py b/src/antlion/unit_tests/test_runner_test.py
similarity index 100%
rename from unit_tests/test_runner_test.py
rename to src/antlion/unit_tests/test_runner_test.py
diff --git a/unit_tests/test_suite.py b/src/antlion/unit_tests/test_suite.py
similarity index 100%
rename from unit_tests/test_suite.py
rename to src/antlion/unit_tests/test_suite.py
diff --git a/src/antlion/utils.py b/src/antlion/utils.py
index ff6ded5..5782c84 100755
--- a/src/antlion/utils.py
+++ b/src/antlion/utils.py
@@ -24,7 +24,6 @@
 import logging
 import os
 import platform
-import psutil
 import random
 import re
 import signal
@@ -1820,6 +1819,7 @@
     Returns:
         string, IPv6 link-local address
     """
+    import psutil
     from zeroconf import IPVersion, Zeroconf
 
     if not device_mdns_name:
diff --git a/src/antlion_contrib/test_utils_tests/acts_import_test_utils_test.py b/src/antlion_contrib/test_utils_tests/acts_import_test_utils_test.py
deleted file mode 100755
index 531db1c..0000000
--- a/src/antlion_contrib/test_utils_tests/acts_import_test_utils_test.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright 2022 The Fuchsia Authors
-#
-# 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.
-
-import unittest
-
-
-class ActsImportTestUtilsTest(unittest.TestCase):
-    """This test class has unit tests for the implementation of everything
-    under acts_contrib.test_utils.*
-    """
-
-    def test_import_successful(self):
-        """ Test to return true if all imports were successful.
-
-        This test will fail if any import was unsuccessful.
-        """
-        try:
-            from antlion import utils
-
-            from antlion_contrib.test_utils.bt import BleEnum
-            from antlion_contrib.test_utils.bt import BluetoothBaseTest
-            from antlion_contrib.test_utils.bt import BluetoothCarHfpBaseTest
-            from antlion_contrib.test_utils.bt import BtEnum
-            from antlion_contrib.test_utils.bt import GattConnectedBaseTest
-            from antlion_contrib.test_utils.bt import GattEnum
-            from antlion_contrib.test_utils.bt import bt_contacts_utils
-            from antlion_contrib.test_utils.bt import bt_gatt_utils
-            from antlion_contrib.test_utils.bt import bt_test_utils
-            from antlion_contrib.test_utils.bt import native_bt_test_utils
-
-            from antlion_contrib.test_utils.net import connectivity_const
-            from antlion_contrib.test_utils.net import connectivity_const
-
-            from antlion_contrib.test_utils.wifi import wifi_constants
-            from antlion_contrib.test_utils.wifi import wifi_test_utils
-
-        except Exception:
-            self.fail('Unable to import all supported test_utils')
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/unit_tests/__init__.py b/unit_tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/unit_tests/__init__.py
+++ /dev/null