diff --git a/.pylintrc b/.pylintrc
index 505656610cd89992ffac096564313cc51da3f2ab..b525115dfdbae35c577421c23b5d06fe6dd748f8 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -16,10 +16,6 @@ ignore-patterns=
 # Python code to execute, usually for sys.path manipulation such as
 # pygtk.require().
 #init-hook=
-# FIXME These init-hooks should be removed, they are presently needed due to namespace problems with this repo
-init-hook='sys.path.append("./skabase/SKABaseDevice");
-	sys.path.append("./skabase/auxiliary");
-	sys.path.append("./skabase/SKAObsDevice")'
 
 # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
 # number of processors available to use.
diff --git a/.release b/.release
index 7d9b5377be3c06be82ba3abd1f3cde409c1e4210..61d1eb95066e530d4bc84129d89e0e04cdccec96 100644
--- a/.release
+++ b/.release
@@ -1,2 +1,2 @@
-release=0.4.1
-tag=lmcbaseclasses-0.4.1
+release=0.5.0
+tag=lmcbaseclasses-0.5.0
diff --git a/Dockerfile b/Dockerfile
index 95534ea7fc2a4b9c3fb061f072a37f977409a9c6..032adbf30f3c1d2959126c6021c82a3820fc8533 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,6 +5,11 @@ FROM nexus.engageska-portugal.pt/ska-docker/ska-python-runtime:9.3.1 AS runtime
 # create ipython profile to so that itango doesn't fail if ipython hasn't run yet
 RUN ipython profile create
 
+# TODO: move this dependency to ska-docker/docker/tango/ska-python-buildenv/requirements.txt
+RUN python3 -m pip install --user pytest-forked
+
 # Note: working dir is `/app` which will have a copy of our repo
-RUN python3 -m pip install -e . --extra-index-url https://nexus.engageska-portugal.pt/repository/pypi/simple
-CMD ["python3", "/app/skabase/SKABaseDevice/SKABaseDevice.py"]
+# The pip install will be a "user installation" so update path to access console scripts
+ENV PATH=/home/tango/.local/bin:$PATH
+RUN python3 -m pip install -e . --user --extra-index-url https://nexus.engageska-portugal.pt/repository/pypi/simple
+CMD ["SKABaseDevice"]
diff --git a/README.md b/README.md
index 6d1ad22af5a33323197c41af6bff2e0b474b9fdd..062964ced0f34336acd40a4e59eb9c1a432b1c0f 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,18 @@ The lmc-base-classe repository contains set of eight classes as mentioned in SKA
 
 ## Version History
 
+#### 0.5.0
+- Breaking change:  Major restructuring of the package to simplify imports and reduce confusion.  
+  - The single word `skabase` module has now changed to two words: `ska.base`.
+  - Instead of `from skabase.SKABaseDevice.SKABaseDevice import SKABaseDevice` to import the
+    class, just use `from ska.base import SKABaseDevice`.  
+  - Instead of `skabase.control_mode` use `ska.base.control_mode`.
+  - The `SKATestDevice` was removed.  Note that this class was only intended
+    for internal use in lmc-base-classes and is no longer needed.
+  - Removed unused scripts and modules.
+- Removed `TangoLoggingLevel` which was deprecated in 0.4.0.  Use `ska.base.control_model.LoggingLevel`
+  instead.
+
 #### 0.4.1
 - Fix lost properties when re-initialising test device (remove `get_name` mock).
 - Fix Sphinx doc building.
@@ -111,9 +123,9 @@ code analysis is also done and code coverage report is prepared.
 After testing is done, the containers are taken down.
 
 ## Usage
-The base classes are installed as python package in the system. The intended usage of the base classes is to inherit the class according to the requirement. The class needs to be imported in the module. e.g.
+The base classes are installed as a Python package in the system. The intended usage of the base classes is to inherit the class according to the requirement. The class needs to be imported in the module. e.g.
 ```
-from skabase.SKABaseDevice.SKABaseDevice import SKABaseDevice
+from ska.base import SKABaseDevice
 
 class DishLeafNode(SKABaseDevice):
 .
@@ -121,13 +133,28 @@ class DishLeafNode(SKABaseDevice):
 .
 ```
 
-**Note: The lmc-base-classes repository will be repackaged soon. That will change the way of importing it.**
+## Development
+
+### PyCharm
+
+The Docker integration is recommended.  For development, use the
+`nexus.engageska-portugal.pt/tango-example/lmcbaseclasses:latest` image
+as the Python Interpreter for the project.  Note that if `make` is
+run with targets like `build`, `up`, or `test`, that image will be
+rebuilt by Docker using the local code, and tagged as `latest`.  
+
+As this project uses a `src` [folder structure](https://blog.ionelmc.ro/2014/05/25/python-packaging/#the-structure),
+so under _Preferences > Project Structure_, the `src` folder needs to be marked as "Sources".  That will
+allow the interpreter to be aware of the package from folders like `tests` that are outside of `src`.
+When adding Run/Debug configurations, make sure "Add content roots to PYTHONPATH" and
+"Add source roots to PYTHONPATH" are checked.
 
 ## Docs
+- Online:  [Read The Docs](https://developerskatelescopeorg.readthedocs.io/projects/lmc-base-classes/en/latest)
 - SKA Control System guidelines:  [Google docs folder](https://drive.google.com/drive/folders/0B8fhAW5QnZQWQ2ZlcjhVS0NmRms)
 - Old LEvPro work area: [Google docs folder](https://drive.google.com/drive/folders/0B8fhAW5QnZQWVHVFVGVXT2Via28)
 
 
 
 ## Contribute
-Contributions are always welcome! Please ensure that you adhere to our coding standards [CAM_Style_guide](https://docs.google.com/document/d/1aZoIyR9tz5rCWr2qJKuMTmKp2IzHlFjrCFrpDDHFypM/edit?usp=sharing).  Use [flake8](http://flake8.pycqa.org/en/latest/) for linting (default settings, except maximum line length of 90 characters).
+Contributions are always welcome! Please refer to the [SKA Developer Portal](https://developer.skatelescope.org/en/latest/).
diff --git a/docker-compose.yml b/docker-compose.yml
index 79923c01ec9dea8dc33d141d5e63faefac76d179..6858167c160f3bc607ab6b28b332a1e0676deb4e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -13,7 +13,7 @@
 #   - obsdevice: Container having SKAObsDevice class
 #   - subarray: Container having SKASubarray class
 #   - telstate: Container having SKATelState class
-#   - testdevice: Container having SKATestDevice class
+#   - logtest: Container having SKASubarray class for SKALogger testing
 #
 # Requires:
 #   - None
@@ -72,7 +72,7 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKABaseDevice/01 SKABaseDevice ska/basedevice/01 &&\
-             /venv/bin/python /app/skabase/SKABaseDevice/SKABaseDevice.py 01"
+             SKABaseDevice 01"
 
   alarmhandler:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
@@ -86,7 +86,7 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKAAlarmHandler/01 SKAAlarmhandler ska/alarmhandler/01 &&\
-             /venv/bin/python /app/skabase/SKAAlarmHandler/SKAAlarmHandler.py 01"
+             SKAAlarmHandler 01"
 
   capability:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
@@ -100,7 +100,7 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKACapability/01 SKACapability ska/capability/01 &&\
-             /venv/bin/python /app/skabase/SKACapability/SKACapability.py 01"
+             SKACapability 01"
 
   logger:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
@@ -114,7 +114,7 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKALogger/01 SKALogger ska/logger/01 &&\
-             /venv/bin/python /app/skabase/SKALogger/SKALogger.py 01"
+             SKALogger 01"
 
   master:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
@@ -128,7 +128,7 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKAMaster/01 SKAMaster ska/master/01 &&\
-             /venv/bin/python /app/skabase/SKAMaster/SKAMaster.py 01"
+             SKAMaster 01"
 
   obsdevice:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
@@ -142,7 +142,7 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKAObsDevice/01 SKAObsDevice ska/obsdevice/01 &&\
-             /venv/bin/python /app/skabase/SKAObsDevice/SKAObsDevice.py 01"
+             SKAObsDevice 01"
 
   subarray:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
@@ -156,7 +156,7 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKASubarray/01 SKASubarray ska/subarray/01 &&\
-             /venv/bin/python /app/skabase/SKASubarray/SKASubarray.py 01"
+             SKASubarray 01"
 
   telstate:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
@@ -170,9 +170,9 @@ services:
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
              tango_admin --add-server SKATelState/01 SKATelState ska/telstate/01 &&\
-            /venv/bin/python /app/skabase/SKATelState/SKATelState.py 01"
+             SKATelState 01"
 
-  testdevice:
+  logtest:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/lmcbaseclasses:latest
     restart: unless-stopped
     depends_on:
@@ -183,5 +183,5 @@ services:
       - TANGO_HOST=${TANGO_HOST}
     command: >
       sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
-             tango_admin --add-server SKATestDevice/01 SKATestDevice logger/test/1 &&\
-             /venv/bin/python /app/skabase/SKATestDevice/SKATestDevice.py 01"
+             tango_admin --add-server SKASubarray/02 SKASubarray logger/test/1 &&\
+             SKASubarray 02"
diff --git a/docs/source/Control_Model.rst b/docs/source/Control_Model.rst
index 194db835741791a4aa675462382dabe25573e2a4..945631028ad6ac2f9da4d25ca5909fc36d330da4 100644
--- a/docs/source/Control_Model.rst
+++ b/docs/source/Control_Model.rst
@@ -9,7 +9,7 @@ SKA Control Model
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: control_model
+.. automodule:: ska.base.control_model
     :members:
     :undoc-members:
 
diff --git a/docs/source/SKAAlarmHandler.rst b/docs/source/SKAAlarmHandler.rst
index ecf3845d19b13e207df81cfc3ca7dff7d026a4e7..9b0297fb4c35dd7a49b9bac3cf216e01c7fc048e 100644
--- a/docs/source/SKAAlarmHandler.rst
+++ b/docs/source/SKAAlarmHandler.rst
@@ -9,7 +9,7 @@ SKA AlarmHandler
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKAAlarmHandler
-.. autoclass:: SKAAlarmHandler
+.. automodule:: ska.base.alarm_handler_device
+.. autoclass:: ska.base.SKAAlarmHandler
    :members:
    :undoc-members:
diff --git a/docs/source/SKABaseDevice.rst b/docs/source/SKABaseDevice.rst
index 3bcc419bdcc27addda0d8391f8b6e7bdd5b69cca..9d41032725d5449356f3100f4035213ed5a81c07 100644
--- a/docs/source/SKABaseDevice.rst
+++ b/docs/source/SKABaseDevice.rst
@@ -9,7 +9,7 @@ SKA BaseDevice
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKABaseDevice
-.. autoclass:: SKABaseDevice
+.. automodule:: ska.base.base_device
+.. autoclass:: ska.base.SKABaseDevice
    :members:
    :undoc-members:
diff --git a/docs/source/SKACapability.rst b/docs/source/SKACapability.rst
index c63c6019bde331ad25bbb64a3cfc45018d75a34b..f749103fdbc75885130c2acf6fcb3423be7e994d 100644
--- a/docs/source/SKACapability.rst
+++ b/docs/source/SKACapability.rst
@@ -9,7 +9,7 @@ SKA Capability
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKACapability
-.. autoclass:: SKACapability
+.. automodule:: ska.base.capability_device
+.. autoclass:: ska.base.SKACapability
    :members:
    :undoc-members:
diff --git a/docs/source/SKALogger.rst b/docs/source/SKALogger.rst
index 0a333cc8f83f8c94384227008d82fd86c6724c84..98415a3276b51c11f24ccb440a7edf517cf6d36a 100644
--- a/docs/source/SKALogger.rst
+++ b/docs/source/SKALogger.rst
@@ -9,7 +9,7 @@ SKA Logger
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKALogger
-.. autoclass:: SKALogger
+.. automodule:: ska.base.logger_device
+.. autoclass:: ska.base.SKALogger
    :members:
    :undoc-members:
diff --git a/docs/source/SKAMaster.rst b/docs/source/SKAMaster.rst
index 345f70fbb8e2ddf9d2768fd9ec10041f3f44bbf5..3788821bf0e871c886c86a62d651d35313fba59b 100644
--- a/docs/source/SKAMaster.rst
+++ b/docs/source/SKAMaster.rst
@@ -9,7 +9,7 @@ SKA Master
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKAMaster
-.. autoclass:: SKAMaster
+.. automodule:: ska.base.master_device
+.. autoclass:: ska.base.SKAMaster
    :members:
    :undoc-members:
diff --git a/docs/source/SKAObsDevice.rst b/docs/source/SKAObsDevice.rst
index 18197923049f059310f17fc6401a3efa1940a50f..013c6af966345185240fc655373d3868af13567e 100644
--- a/docs/source/SKAObsDevice.rst
+++ b/docs/source/SKAObsDevice.rst
@@ -9,7 +9,7 @@ SKA ObsDevice
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKAObsDevice
-.. autoclass:: SKAObsDevice
+.. automodule:: ska.base.obs_device
+.. autoclass:: ska.base.SKAObsDevice
    :members:
    :undoc-members:
diff --git a/docs/source/SKASubarray.rst b/docs/source/SKASubarray.rst
index 1a6fd122405721d757f9e91190a9fbde2d1c43f6..4db79893338aa3fbdf320ff54c852e1896d79b03 100644
--- a/docs/source/SKASubarray.rst
+++ b/docs/source/SKASubarray.rst
@@ -9,7 +9,7 @@ SKA Subarray
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKASubarray
-.. autoclass:: SKASubarray
+.. automodule:: ska.base.subarray_device
+.. autoclass:: ska.base.SKASubarray
    :members:
    :undoc-members:
diff --git a/docs/source/SKATelState.rst b/docs/source/SKATelState.rst
index aa091637a896138027f4fea3600edbc1e6318b9a..acd145f96a09b127fdb21b266768a125d6482104 100644
--- a/docs/source/SKATelState.rst
+++ b/docs/source/SKATelState.rst
@@ -9,7 +9,7 @@ SKA TelState
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: SKATelState
-.. autoclass:: SKATelState
+.. automodule:: ska.base.tel_state_device
+.. autoclass:: ska.base.SKATelState
    :members:
    :undoc-members:
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 0a5669a6cefa2c8067f5eae3308e74f67620e2d6..7623d2adfe6b0d536cad355d6444be4dc4b29a97 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -46,9 +46,8 @@ sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.insert(0, os.path.abspath('../../'))
-sys.path.append(os.path.abspath('../../skabase'))
-from skabase import release
+sys.path.insert(0, os.path.abspath('../../src'))
+from ska.base import release
 # -- General configuration ------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
diff --git a/skabase/SKAAlarmHandler/SKAAlarmHandler.xmi b/pogo/SKAAlarmHandler.xmi
similarity index 96%
rename from skabase/SKAAlarmHandler/SKAAlarmHandler.xmi
rename to pogo/SKAAlarmHandler.xmi
index 4a058909c9c13b7d8165fea5337023388effcf02..dd03cbdc27904a443c912d3e329ed0456cb5338b 100644
--- a/skabase/SKAAlarmHandler/SKAAlarmHandler.xmi
+++ b/pogo/SKAAlarmHandler.xmi
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKAAlarmHandler" pogoRevision="9.6">
-    <description description="A generic base device for Alarms for SKA." title="SKAAlarmHandler" sourcePath="/home/pogo/src/lmc-base-classes/skabase/SKAAlarmHandler" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="A generic base device for Alarms for SKA." title="SKAAlarmHandler" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKABaseDevice" sourcePath="../SKABaseDevice"/>
+      <inheritances classname="SKABaseDevice" sourcePath="./"/>
       <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="OtherInstruments" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="SKASA" reference="SKA-SKAAlarmHandler"/>
     </description>
     <deviceProperties name="SubAlarmHandlers" description="List of sub-element AlarmHandlers:&#xA;name1:FQDN1,name2:FQDN2">
@@ -28,7 +28,7 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
@@ -225,11 +225,10 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="List of active alarms" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
@@ -257,6 +256,6 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="true" concrete="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
   </classes>
 </pogoDsl:PogoSystem>
diff --git a/skabase/SKABaseDevice/SKABaseDevice.xmi b/pogo/SKABaseDevice.xmi
similarity index 96%
rename from skabase/SKABaseDevice/SKABaseDevice.xmi
rename to pogo/SKABaseDevice.xmi
index 081e4c5651cfb6bdd70d2187c15acc1722dc4149..ef62353029e7084f3431e35b36f4566ecaa5d3fb 100644
--- a/skabase/SKABaseDevice/SKABaseDevice.xmi
+++ b/pogo/SKABaseDevice.xmi
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKABaseDevice" pogoRevision="9.6">
-    <description description="A generic base device for SKA." title="SKABASE" sourcePath="/home/pogo/src/lmc-base-classes/skabase/SKABaseDevice" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="A generic base device for SKA." title="SKABASE" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
       <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="OtherInstruments" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="SKASA" reference="SKA-SKABaseDevice"/>
     </description>
@@ -19,7 +19,7 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </deviceProperties>
@@ -162,6 +162,6 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
   </classes>
 </pogoDsl:PogoSystem>
diff --git a/skabase/SKACapability/SKACapability.xmi b/pogo/SKACapability.xmi
similarity index 94%
rename from skabase/SKACapability/SKACapability.xmi
rename to pogo/SKACapability.xmi
index 22e171401b666ae2387ad5964d30bed99e87df73..b9ee668a4ee84f265cb9e613763c4a32ce6bc7ad 100644
--- a/skabase/SKACapability/SKACapability.xmi
+++ b/pogo/SKACapability.xmi
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKACapability" pogoRevision="9.6">
-    <description description="Subarray handling device" title="SKACapability" sourcePath="/home/pogo/src/lmc-base-classes/skabase/SKACapability" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="true" hasAbstractAttribute="false">
+    <description description="Subarray handling device" title="SKACapability" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="true" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKAObsDevice" sourcePath="../SKAObsDevice"/>
+      <inheritances classname="SKAObsDevice" sourcePath="./"/>
       <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="SkaBase" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="none" reference=""/>
     </description>
     <deviceProperties name="SkaLevel" description="Indication of importance of the device in the SKA hierarchy &#xA;to support drill-down navigation: 1..6, with 1 highest.&#xA;Default is 4, making provision for &#xA;EltMaster, EltAlarms, EltTelState = 1&#xA;SubEltMaster = 2&#xA;Subarray, Capability = 2/3&#xA;Others = 4 (or 5 or 6)">
@@ -16,7 +16,7 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
@@ -168,11 +168,10 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="Number of instances of this Capability Type currently in use on this subarray." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
@@ -208,14 +207,11 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="true" concrete="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
     <overlodedPollPeriodObject name="obsState" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="obsMode" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="configurationProgress" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="configurationDelayExpected" type="attribute" pollPeriod="0"/>
-    <overlodedPollPeriodObject name="centralLoggingLevel" type="attribute" pollPeriod="0"/>
-    <overlodedPollPeriodObject name="elementLoggingLevel" type="attribute" pollPeriod="0"/>
-    <overlodedPollPeriodObject name="storageLoggingLevel" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="healthState" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="adminMode" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="controlMode" type="attribute" pollPeriod="0"/>
diff --git a/skabase/SKALogger/SKALogger.xmi b/pogo/SKALogger.xmi
similarity index 94%
rename from skabase/SKALogger/SKALogger.xmi
rename to pogo/SKALogger.xmi
index decb758c4cd7609df721987bbe163c3939d6a61e..d7c3d9d066122948e2fff94f51719c5c363cdc24 100644
--- a/skabase/SKALogger/SKALogger.xmi
+++ b/pogo/SKALogger.xmi
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKALogger" pogoRevision="9.6">
-    <description description="A generic base device for Logging for SKA." title="SKALogger" sourcePath="/home/tango-cs/src/lmc-base-classes/skabase/SKALogger" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="A generic base device for Logging for SKA." title="SKALogger" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKABaseDevice" sourcePath="../SKABaseDevice"/>
+      <inheritances classname="SKABaseDevice" sourcePath="./"/>
       <identification contact="at gmail.com - lochanb.ska" author="lochanb.ska" emailDomain="gmail.com" classFamily="SKA Base Class" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="SKA" reference="SKA-SKALogger"/>
     </description>
     <deviceProperties name="SkaLevel" description="Indication of importance of the device in the SKA hierarchy &#xA;to support drill-down navigation: 1..6, with 1 highest.&#xA;Default is 4, making provision for &#xA;EltMaster, EltAlarms, EltTelState = 1&#xA;SubEltMaster = 2&#xA;Subarray, Capability = 2/3&#xA;Others = 4 (or 5 or 6)">
@@ -20,7 +20,7 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
@@ -111,11 +111,10 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="The test mode of the device. &#xA;Either no test mode (empty string) or an indication of the test mode." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
@@ -143,6 +142,6 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="true" concrete="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
   </classes>
 </pogoDsl:PogoSystem>
diff --git a/skabase/SKAMaster/SKAMaster.xmi b/pogo/SKAMaster.xmi
similarity index 96%
rename from skabase/SKAMaster/SKAMaster.xmi
rename to pogo/SKAMaster.xmi
index 0aa080b1d918654d0300372e2c71459d872b3dff..4849959f8ca42e2a6c19c5744f07817354d53322 100644
--- a/skabase/SKAMaster/SKAMaster.xmi
+++ b/pogo/SKAMaster.xmi
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKAMaster" pogoRevision="9.6">
-    <description description="A master test" title="SKAMaster" sourcePath="/home/pogo/src/lmc-base-classes/skabase/SKAMaster" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="A master test" title="SKAMaster" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKABaseDevice" sourcePath="../SKABaseDevice"/>
+      <inheritances classname="SKABaseDevice" sourcePath="./"/>
       <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="SkaBase" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="none" reference=""/>
     </description>
     <deviceProperties name="SkaLevel" description="Indication of importance of the device in the SKA hierarchy &#xA;to support drill-down navigation: 1..6, with 1 highest.&#xA;Default is 4, making provision for &#xA;EltMaster, EltAlarms, EltTelState = 1&#xA;SubEltMaster = 2&#xA;Subarray, Capability = 2/3&#xA;Others = 4 (or 5 or 6)">
@@ -16,7 +16,7 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
@@ -186,11 +186,10 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="A list of available number of instances of each capability type, e.g. 'CORRELATOR:512', 'PSS-BEAMS:4'." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
@@ -218,6 +217,6 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="true" concrete="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
   </classes>
 </pogoDsl:PogoSystem>
diff --git a/skabase/SKAObsDevice/SKAObsDevice.xmi b/pogo/SKAObsDevice.xmi
similarity index 95%
rename from skabase/SKAObsDevice/SKAObsDevice.xmi
rename to pogo/SKAObsDevice.xmi
index 4d3e4dad9d3b3ed68bb581d696dbba0377c90bb7..2e953df66c0590ba3a7d0a78ce77db781b77a274 100644
--- a/skabase/SKAObsDevice/SKAObsDevice.xmi
+++ b/pogo/SKAObsDevice.xmi
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKAObsDevice" pogoRevision="9.6">
-    <description description="A generic base device for Observations for SKA." title="SKAObsDevice" sourcePath="/home/tango-cs/src/lmc-base-classes/skabase/SKAObsDevice" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="false" hasAbstractCommand="true" hasAbstractAttribute="false">
+    <description description="A generic base device for Observations for SKA." title="SKAObsDevice" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="false" hasAbstractCommand="true" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKABaseDevice" sourcePath="../SKABaseDevice"/>
+      <inheritances classname="SKABaseDevice" sourcePath="./"/>
       <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="OtherInstruments" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="SKASA" reference="SKA-SKAObsDevice"/>
     </description>
     <deviceProperties name="SkaLevel" description="Indication of importance of the device in the SKA hierarchy &#xA;to support drill-down navigation: 1..6, with 1 highest.&#xA;Default is 4, making provision for &#xA;EltMaster, EltAlarms, EltTelState = 1&#xA;SubEltMaster = 2&#xA;Subarray, Capability = 2/3&#xA;Others = 4 (or 5 or 6)">
@@ -16,7 +16,7 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
@@ -152,11 +152,10 @@
       <status abstract="false" inherited="true" concrete="true" concreteHere="false"/>
       <properties description="The test mode of the device. &#xA;Either no test mode (empty string) or an indication of the test mode." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
@@ -184,6 +183,6 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="true" concrete="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
   </classes>
 </pogoDsl:PogoSystem>
diff --git a/skabase/SKASubarray/SKASubarray.xmi b/pogo/SKASubarray.xmi
similarity index 96%
rename from skabase/SKASubarray/SKASubarray.xmi
rename to pogo/SKASubarray.xmi
index 45a541f3d3b1323e2d94fc507cdb9c1840148095..3778c15038c8da5d5ec58346836e6d0d46a129a2 100644
--- a/skabase/SKASubarray/SKASubarray.xmi
+++ b/pogo/SKASubarray.xmi
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKASubarray" pogoRevision="9.6">
-    <description description="SubArray handling device" title="SKASubarray" sourcePath="/home/pogo/src/lmc-base-classes/skabase/SKASubarray" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="SubArray handling device" title="SKASubarray" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKAObsDevice" sourcePath="../SKAObsDevice"/>
+      <inheritances classname="SKAObsDevice" sourcePath="./"/>
       <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="SkaBase" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="none" reference=""/>
     </description>
     <deviceProperties name="CapabilityTypes" description="List of Capability types e.g. capCorr, capPss,&#xA;capPstBf, capVlbi, this will be used to dynamically&#xA;define groups for subarray.">
@@ -15,7 +15,7 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
@@ -271,11 +271,10 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="A list of capability types with no. of instances in use on this subarray; e.g.&#xA;Correlators:512, PssBeams:4, PstBeams:4, VlbiBeams:0." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
@@ -303,7 +302,7 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="true" concrete="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
     <overlodedPollPeriodObject name="adminMode" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="configurationDelayExpected" type="attribute" pollPeriod="0"/>
     <overlodedPollPeriodObject name="configurationProgress" type="attribute" pollPeriod="0"/>
diff --git a/skabase/SKATelState/SKATelState.xmi b/pogo/SKATelState.xmi
similarity index 94%
rename from skabase/SKATelState/SKATelState.xmi
rename to pogo/SKATelState.xmi
index 503ad91b7a2fcf78543bd52f04e90f893462768a..90b2540108106243177c391e5a49a40d4a8d3a05 100644
--- a/skabase/SKATelState/SKATelState.xmi
+++ b/pogo/SKATelState.xmi
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="SKATelState" pogoRevision="9.6">
-    <description description="A generic base device for Telescope State for SKA." title="SKATelState" sourcePath="/home/pogo/src/lmc-base-classes/skabase/SKATelState" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="A generic base device for Telescope State for SKA." title="SKATelState" sourcePath="/home/tango/src/lmc-base-classes/pogo" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKABaseDevice" sourcePath="../SKABaseDevice"/>
+      <inheritances classname="SKABaseDevice" sourcePath="./"/>
       <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="OtherInstruments" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="SKASA" reference="SKA-SKATelState"/>
     </description>
     <deviceProperties name="TelStateConfigFile" description="JSON file with forwarded attributes to expose.">
@@ -24,7 +24,7 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <DefaultPropValue>4</DefaultPropValue>
     </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
+    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&lt;address>',&#xA;  where &lt;address> is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&lt;path>',&#xA;  where &lt;path> is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
       <type xsi:type="pogoDsl:StringVectorType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
@@ -106,11 +106,10 @@
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="The test mode of the device. &#xA;Either no test mode (empty string) or an indication of the test mode." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="true" concrete="true"/>
       <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
@@ -138,6 +137,6 @@
     <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
       <status abstract="false" inherited="true" concrete="true"/>
     </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
+    <preferences docHome="./doc_html" makefileHome="/usr/local/share/pogo/preferences"/>
   </classes>
 </pogoDsl:PogoSystem>
diff --git a/scripts/elt_ctl.py b/scripts/elt_ctl.py
deleted file mode 100644
index 202257618ee49d6024c11a7b8136567ea55ebc7c..0000000000000000000000000000000000000000
--- a/scripts/elt_ctl.py
+++ /dev/null
@@ -1,264 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-import platform
-import argparse
-
-import PyTango
-import psutil
-import json
-import logging
-from logging import config
-
-from time import sleep
-from PyTango import Database, DbDevInfo, DeviceProxy
-
-sys.path.append('..')
-from eltbase.config import config, CONFIG_FILE
-
-LOGGING = {
-    'version': 1,
-    'formatters': {
-        'verbose': {
-            'format': '%(asctime)s [%(process)s] [%(levelname)s] [%(module)s] %(message)s',
-            'datefmt': "%Y-%m-%d %H:%M:%S"
-        },
-        'simple': {
-            'format': '%(message)s'
-        },
-    },
-    'handlers': {
-        'console': {
-            'level': 'DEBUG',
-            'class': 'logging.StreamHandler',
-            'formatter': 'simple'
-        }
-    },
-    'loggers': {
-        'aavs.ctl': {
-            'handlers': ['console'],
-            'level': 'DEBUG',
-        },
-        'aavs.none': {
-            'handlers': [],
-            'level': 'DEBUG',
-        }
-    }
-}
-logging.config.dictConfig(LOGGING)
-
-db = Database()
-
-
-def setup_tango_config(loaded_config):
-    """ Set up tango configuration """
-    devices = loaded_config["devices"]
-    domain = loaded_config["domain"]
-    default_logging_target = loaded_config["default_logging_target"]
-    default_logging_level = loaded_config["default_logging_level"]
-
-    for group_name, instances in devices.iteritems():
-        for device_id, config in instances.iteritems():
-
-            device_class = config["class"]
-            full_device_name = "/".join([domain, group_name, device_id])
-            device_server_name = config.get("server", None)
-            device_server_id = config.get("server_id", domain)
-
-            db.put_device_property(full_device_name, {"logging_level": default_logging_level,
-                                                      "logging_target": default_logging_target})
-
-            # Set up all properties, substituting the actual value of domain for {domain}
-            for property_name, property_value in config["properties"].iteritems():
-                if type(property_value) is list:
-                    formatted_val = map(lambda x: x.format(domain=domain), property_value)
-                else:
-                    try:
-                        formatted_val = property_value.format(domain=domain)
-                    except Exception as e:
-                        formatted_val = property_value
-                db.put_device_property(full_device_name, {str(property_name): formatted_val})
-
-            if group_name == "rack" and config.get("components"):
-                db.put_device_property(full_device_name, {"rack_components": json.dumps(config["components"])})
-
-            if device_server_name is None:
-                print "No device server specified for %s" % device_class
-                exit()
-
-            dev_info = DbDevInfo()
-            dev_info._class = device_class
-            dev_info.server = '%s/%s' % (device_server_name, device_server_id)
-            dev_info.name = full_device_name
-            db.add_device(dev_info)
-
-
-def _get_servers(loaded_config):
-    """ Get list of servers from configuration """
-    devices = loaded_config["devices"]
-    priorities = loaded_config["server_priorities"]
-    default_priority = max(priorities.itervalues()) + 1
-
-    servers = set()
-    server_names = set()
-
-    for group_name, instances in devices.iteritems():
-        for device_id, config in instances.iteritems():
-            device_server_name = config.get("server", None)
-            is_python_server = config.get("python_server", True)
-            priority = priorities.get(device_server_name, default_priority)
-
-            if device_server_name not in server_names:
-                servers.add((device_server_name, is_python_server, priority))
-                server_names.add(device_server_name)
-
-    sorted_servers = sorted(servers, key=lambda x: x[2])
-    return sorted_servers
-
-
-def status(use_json=False):
-    """ Check server configuration """
-    hostname = platform.uname()[1]
-    starter = "tango/admin/" + hostname
-    starter_dp = DeviceProxy(starter)
-    log_file_location = starter_dp.get_property("LogFileHome")["LogFileHome"][0]
-
-    running_servers = set(starter_dp.DevGetRunningServers(True))
-    domain = config["domain"]
-    if servers.issubset(running_servers):
-        info = json.dumps({
-            "config_file": CONFIG_FILE,
-            "log_location": log_file_location,
-            "status": "OK",
-            "servers_configured": list(servers),
-            "servers_running": list(running_servers),
-        }, indent=4)
-        if use_json:
-            print info
-        else:
-            log.info(info)
-    else:
-        not_running = servers.difference(running_servers)
-
-        if use_json:
-            print json.dumps({
-                "config_file": CONFIG_FILE,
-                "log_location": log_file_location,
-                "servers_configured": list(servers),
-                "servers_running": list(running_servers),
-                "servers_not_running": list(not_running),
-                "status": "FAULT"
-            }, indent=4)
-        else:
-            for s in not_running:
-                log.info("Configured server {} is not running".format(s))
-
-
-def kill_everything(starter_dp, servers):
-    """ Kill all running servers and remove from database """
-
-    # Get list of running servers and stop them
-    running_servers = starter_dp.DevGetRunningServers(True)
-    for server in running_servers:
-        starter_dp.DevStop(server)
-
-    # Wait for servers to stop
-    while starter_dp.DevGetRunningServers(True):
-        log.info("Waiting for servers to stop")
-        sleep(2)
-
-    # Get list of processes which are still running
-    existing_processes = [p for p in psutil.process_iter()
-                          if len(p.cmdline()) > 1
-                          and p.name() in {s[0] for s in servers}]
-
-    # Kill these processes
-    for p in existing_processes:
-        log.info("Process {} pid {} is not dead. Killing".format(" ".join(p.cmdline()), p.pid))
-        try:
-            p.kill()
-        except psutil.AccessDenied as ad:
-            log.info("Could not kill process {}. Try running as root".format(p.pid))
-
-    # Get list of device servers registered in database (and remove list of default tango servers)
-    servers = set(db.get_server_list().value_string) - {'DataBaseds/2', 'TangoAccessControl/1', 'TangoTest/test',
-                                                        'Starter/%s' % platform.uname()[1]}
-    # Remove servers from database
-    for server in servers:
-        try:
-            db.delete_server(server)
-        except Exception as e:
-            print e.message
-
-# Script entry point
-if __name__ == '__main__':
-
-    parser = argparse.ArgumentParser(description='Bootstrap')
-    group = parser.add_mutually_exclusive_group(required=True)
-    group.add_argument('--run', action="store_true", default=False, help="Stop all devices, reconfigure and run")
-    group.add_argument('--status', action="store_true", default=False, help="Print the status of the tango servers")
-    group.add_argument('--config', action="store_true", default=False, help="Stop all devices and reconfigure")
-    group.add_argument('--stop', action="store_true", default=False, help="Print the status of the tango servers")
-    parser.add_argument('--use_json', action="store_true", default=False, help="Return output as json")
-
-    args = parser.parse_args()
-    domain = config["domain"]
-    servers = _get_servers(config)
-
-    log = logging.getLogger('aavs.ctl')
-    if args.use_json:
-        log.disabled = True
-
-    # TODO move prints to logging, output to json for all branches
-    hostname = platform.uname()[1]
-    starter = "tango/admin/" + hostname
-    starter_dp = DeviceProxy(starter)
-
-    if args.status:
-        status(args.use_json)
-        exit()
-    elif args.stop:
-        kill_everything(starter_dp, servers)
-        exit()
-    elif args.config or args.run:
-        kill_everything(starter_dp, servers)
-        # Setup all configuration
-        setup_tango_config(config)
-
-        if args.use_json:
-            exit()
-        else:
-            log.info("Configured with {}".format(CONFIG_FILE))
-
-    if args.run:
-        db = PyTango.Database()
-
-        # Start all required device servers
-        for server, _, priority in servers:
-            server_name = server + "/" + domain
-            server_info = db.get_server_info(server_name)
-            server_info.level = priority
-            server_info.mode = 1
-            server_info.host = hostname
-            db.put_server_info(server_info)
-            try:
-                # Start device server
-                starter_dp.DevStart(server_name)
-
-                # Wait for server to finish loading
-                class_name = db.get_device_class_list(server_name).value_string[3]
-                sleep(0.5)
-                retries = 0
-                while len(db.get_device_exported_for_class(class_name).value_string) == 0 and retries < 20:
-                    log.info("Waiting for {} to start".format(server_name))
-                    retries += 1
-                    sleep(1)
-
-                if retries == 20:
-		    raise Exception("Could not load {}".format(server_name))
-
-            except Exception as e:
-                print e
-            else:
-                log.info("Started {}".format(server_name))
diff --git a/scripts/gen_csv_info.py b/scripts/gen_csv_info.py
deleted file mode 100644
index b7c734d17016be3787115f4588195f2124c39d1d..0000000000000000000000000000000000000000
--- a/scripts/gen_csv_info.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python
-
-"""A utility script we can make use of to convert the xmi files to a simple csv file."""
-
-
-import csv
-import subprocess
-
-from tango_simlib import sim_xmi_parser
-
-# Find the xmi files in the repo and store their paths
-output = subprocess.check_output(["kat-search.py -f *.xmi"], shell=True)
-
-# Create a list of of all the file paths.
-strings = output.split("\n")
-# Remove the string "DEFAULT", which is always the first output of 'kat-search.py'.
-strings.remove("DEFAULTS")
-
-# Create a csv file object.
-with open("csv_file.csv", 'wb') as myfile:
-    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
-    print csv.QUOTE_ALL
-    for fiel in strings:
-       
-        xmi_parser = sim_xmi_parser.XmiParser()
-        try:
-            xmi_parser.parse(fiel)
-        except AttributeError:
-            continue
-        
-        print fiel 
-        attr_info = xmi_parser.get_reformatted_device_attr_metadata()
-        #cmd_info = xmi_parser.get_reformatted_cmd_metadata()
-        #dev_props = xmi_parser.get_reformatted_properties_metadata('deviceProperties')
-        #class_props = xmi_parser.get_reformatted_properties_metadata('classProperties')
-        for attr_name, attr_props in attr_info.items():
-            print attr_props
-
-            
-            break
-
-        del xmi_parser
-        break
-
-        
-    
-    
diff --git a/scripts/purge_xmi_tree.py b/scripts/purge_xmi_tree.py
index 1ae88e5ef3d2a02743d2ffde0cceb5d79fbb603a..698f2b9cdf1212dce359bd0774c6acd7fe98b1c0 100755
--- a/scripts/purge_xmi_tree.py
+++ b/scripts/purge_xmi_tree.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
 """
 Utility to purge orphaned elements from the XMI file tree.
 
diff --git a/setup.cfg b/setup.cfg
index a1866d77ee688730f57a302bc91ed0017ba99c77..b7420bf3b0879bdec0f0c66bff6966316bc211fd 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -3,10 +3,18 @@ test=pytest
 
 [coverage:run]
 branch = True
-source = skabase
+source = ska.base
 
 [tool:pytest]
-testpaths = skabase
-addopts = --forked --verbose --json-report --json-report-file=htmlcov/report.json --cov-report term --cov-report html --cov-report xml --cov=skabase --junitxml=/build/reports/unit-tests.xml
+testpaths = tests
+addopts = --forked
+          --verbose
+          --json-report
+          --json-report-file=htmlcov/report.json
+          --cov-report term
+          --cov-report html
+          --cov-report xml
+          --cov=ska.base
+          --junitxml=/build/reports/unit-tests.xml
 console_output_style = progress
 junit_family = legacy
diff --git a/setup.py b/setup.py
index 2e6b65e08c281fc776c6981600af4391e0d3d814..4fa43b546c40887008c42c0325eefe3fe6633c8d 100644
--- a/setup.py
+++ b/setup.py
@@ -6,42 +6,50 @@ import sys
 import setuptools
 
 setup_dir = os.path.dirname(os.path.abspath(__file__))
-release_filename = os.path.join(setup_dir, 'skabase', 'release.py')
+release_filename = os.path.join(setup_dir, "src", "ska", "base", "release.py")
 exec(open(release_filename).read())
 
 # prevent unnecessary installation of pytest-runner
-needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv)
-pytest_runner = ['pytest-runner'] if needs_pytest else []
+needs_pytest = {"pytest", "test", "ptr"}.intersection(sys.argv)
+pytest_runner = ["pytest-runner"] if needs_pytest else []
 
 setuptools.setup(
-      name=name,
-      description=description,
-      version=version,
-      author=author,
-      author_email=author_email,
-      license=license,
-      packages=setuptools.find_packages(),
-      include_package_data=True,
-      url='https://www.skatelescope.org/',
-      classifiers=[
-          "Development Status :: 3 - Alpha",
-          "Intended Audience :: Developers",
-          "License :: Other/Proprietary License",
-          "Operating System :: OS Independent",
-          "Programming Language :: Python",
-          "Topic :: Software Development :: Libraries :: Python Modules",
-          "Topic :: Scientific/Engineering :: Astronomy"],
-      platforms=["OS Independent"],
-      setup_requires=[] + pytest_runner,
-      install_requires=[
-          "future",
-          "ska_logging >= 0.2.0"
-      ],
-      tests_require=[
-          "pytest",
-          "coverage",
-          "pytest-json-report",
-          "pytest-forked",
-        ],
-      keywords="lmc base classes ska",
-      zip_safe=False)
+    name=name,
+    description=description,
+    version=version,
+    author=author,
+    author_email=author_email,
+    license=license,
+    packages=setuptools.find_packages(where="src"),
+    package_dir={"": "src"},
+    include_package_data=True,
+    url="https://www.skatelescope.org/",
+    classifiers=[
+        "Development Status :: 3 - Alpha",
+        "Intended Audience :: Developers",
+        "License :: Other/Proprietary License",
+        "Operating System :: OS Independent",
+        "Programming Language :: Python",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        "Topic :: Scientific/Engineering :: Astronomy",
+    ],
+    platforms=["OS Independent"],
+    setup_requires=[] + pytest_runner,
+    install_requires=["future", "ska_logging >= 0.2.0"],
+    tests_require=["pytest", "coverage", "pytest-json-report", "pytest-forked"],
+    entry_points={
+        "console_scripts": [
+            "SKAAlarmHandler=ska.base.alarm_handler_device:main",
+            "SKABaseDevice=ska.base.base_device:main",
+            "SKACapability=ska.base.capability_device:main",
+            "SKAExampleDevice=ska.base.example_device:main",
+            "SKALogger=ska.base.logger_device:main",
+            "SKAMaster=ska.base.master_device:main",
+            "SKAObsDevice=ska.base.obs_device:main",
+            "SKASubarray=ska.base.subarray_device:main",
+            "SKATelState=ska.base.tel_state_device:main",
+        ]
+    },
+    keywords="lmc base classes ska",
+    zip_safe=False,
+)
diff --git a/skabase/SKAAlarmHandler/MANIFEST.in b/skabase/SKAAlarmHandler/MANIFEST.in
deleted file mode 100644
index 905caa2cdaa6afe0b8aa9593f2aeab83d7a5ae48..0000000000000000000000000000000000000000
--- a/skabase/SKAAlarmHandler/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKAAlarmHandler *.py
-recursive-include test *.py
-include *.rst
-include SKAAlarmHandler.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKAAlarmHandler/README.rst b/skabase/SKAAlarmHandler/README.rst
deleted file mode 100644
index 971758ed6c339d739ddcd8d79f011936d2f3c77b..0000000000000000000000000000000000000000
--- a/skabase/SKAAlarmHandler/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKAAlarmHandler
-
-A generic base device for Alarms for SKA.
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKAAlarmHandler instance_name
diff --git a/skabase/SKAAlarmHandler/__init__.py b/skabase/SKAAlarmHandler/__init__.py
deleted file mode 100644
index 85f9df138b88950c71e447414984f64759caa77f..0000000000000000000000000000000000000000
--- a/skabase/SKAAlarmHandler/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKAAlarmHandler project
-#
-#
-#
-"""SKAAlarmHandler
-
-A generic base device for Alarms for SKA. It exposes SKA alarms and SKA alerts as TANGO attributes.
-SKA Alarms and SKA/Element Alerts are rules-based configurable conditions that can be defined over multiple
-attribute values and quality factors, and are separate from the "built-in" TANGO attribute alarms.
-"""
-
-__all__ = ["SKAAlarmHandler", "main"]
-from skabase import release
-from .SKAAlarmHandler import SKAAlarmHandler, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKAAlarmHandler/__main__.py b/skabase/SKAAlarmHandler/__main__.py
deleted file mode 100644
index 711db7bdc3c9cd32ec2a72dd89e8fcdd7f499ec0..0000000000000000000000000000000000000000
--- a/skabase/SKAAlarmHandler/__main__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKAAlarmHandler project
-#
-#
-#
-
-""" __main__
-Main module of SKAAlarmHandler base class.
-"""
-from .SKAAlarmHandler import main
-main()
diff --git a/skabase/SKABaseDevice/MANIFEST.in b/skabase/SKABaseDevice/MANIFEST.in
deleted file mode 100644
index 7cb65a1009f04263be2ebc5f8bf83537cc831d11..0000000000000000000000000000000000000000
--- a/skabase/SKABaseDevice/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKABaseDevice *.py
-recursive-include test *.py
-include *.rst
-include SKABaseDevice.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKABaseDevice/README.rst b/skabase/SKABaseDevice/README.rst
deleted file mode 100644
index 9a932093b8afc7512b4e804b66ccdca45513505a..0000000000000000000000000000000000000000
--- a/skabase/SKABaseDevice/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKABASE
-
-A generic base device for SKA.
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKABaseDevice instance_name
diff --git a/skabase/SKABaseDevice/__init__.py b/skabase/SKABaseDevice/__init__.py
deleted file mode 100644
index 5267121f247b0331d54e1696165257e6cbe8a23c..0000000000000000000000000000000000000000
--- a/skabase/SKABaseDevice/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKABaseDevice project
-#
-#
-#
-"""SKABaseDevice
-
-A generic base device for SKA. It exposes the attributes, properties and commands of
-a device that are common for all the SKA devices.
-"""
-
-__all__ = ["SKABaseDevice", "TangoLoggingLevel", "main"]
-from skabase import release
-from .SKABaseDevice import SKABaseDevice, main, TangoLoggingLevel
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKABaseDevice/__main__.py b/skabase/SKABaseDevice/__main__.py
deleted file mode 100644
index 8e8669d84fd66422ecb98ed8966bd6abdccefb26..0000000000000000000000000000000000000000
--- a/skabase/SKABaseDevice/__main__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKABaseDevice project
-#
-#
-#
-"""
-Main module of SKABaseDevice
-"""
-
-from .SKABaseDevice import main
-main()
diff --git a/skabase/SKABaseDevice/test/__init__.py b/skabase/SKABaseDevice/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/SKACapability/MANIFEST.in b/skabase/SKACapability/MANIFEST.in
deleted file mode 100644
index 7db899ed71779be15435762fb2e9b23a8794b515..0000000000000000000000000000000000000000
--- a/skabase/SKACapability/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKACapability *.py
-recursive-include test *.py
-include *.rst
-include SKACapability.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKACapability/README.rst b/skabase/SKACapability/README.rst
deleted file mode 100644
index 1bf2019499d08cf7658fa1ebd8fafab5b3750c7a..0000000000000000000000000000000000000000
--- a/skabase/SKACapability/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKACapability
-
-Subarray handling device
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKACapability instance_name
diff --git a/skabase/SKACapability/__init__.py b/skabase/SKACapability/__init__.py
deleted file mode 100644
index d04376a49ff7db24262b6577ec6b0451338fa548..0000000000000000000000000000000000000000
--- a/skabase/SKACapability/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKACapability project
-#
-#
-#
-"""SKACapability
-
-A Subarray handling device. It exposes the instances of configured capabilities.
-"""
-__all__ = ["SKACapability", "main"]
-from skabase import release
-from .SKACapability import SKACapability, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKACapability/__main__.py b/skabase/SKACapability/__main__.py
deleted file mode 100644
index ce6e1d6fa94a5dc58e2bea6718743f2265005c8f..0000000000000000000000000000000000000000
--- a/skabase/SKACapability/__main__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKACapability project
-#
-#
-#
-""" __main__ module of the SKACapability base class"""
-from .SKACapability import main
-main()
diff --git a/skabase/SKACapability/test/__init__.py b/skabase/SKACapability/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/SKALogger/MANIFEST.in b/skabase/SKALogger/MANIFEST.in
deleted file mode 100644
index 33ad0fe3ed14049abecc56534bd07f37402d7389..0000000000000000000000000000000000000000
--- a/skabase/SKALogger/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKALogger *.py
-recursive-include test *.py
-include *.rst
-include SKALogger.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKALogger/README.rst b/skabase/SKALogger/README.rst
deleted file mode 100644
index fdd24b6ed198adb5bdb4d724b3df1c6f810c63ff..0000000000000000000000000000000000000000
--- a/skabase/SKALogger/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKALogger
-
-A generic base device for Logging for SKA.
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKALogger instance_name
diff --git a/skabase/SKALogger/__init__.py b/skabase/SKALogger/__init__.py
deleted file mode 100644
index f3fb8a93e13189d52594f9cb6164cc3182f29902..0000000000000000000000000000000000000000
--- a/skabase/SKALogger/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKALogger project
-#
-#
-#
-"""SKALogger
-
-A generic base device for Logging for SKA. It enables to view on-line logs through the TANGO Logging Services
-and to store logs using Python logging. It configures the log levels of remote logging for selected devices.
-"""
-
-__all__ = ["SKALogger", "main"]
-
-from skabase import release
-from .SKALogger import SKALogger, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKALogger/__main__.py b/skabase/SKALogger/__main__.py
deleted file mode 100644
index dd5565c8ac2f7b41fb5ae619baab7264000e498e..0000000000000000000000000000000000000000
--- a/skabase/SKALogger/__main__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKALogger project
-#
-#
-#
-from .SKALogger import main
-main()
diff --git a/skabase/SKALogger/test/__init__.py b/skabase/SKALogger/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/SKAMaster/MANIFEST.in b/skabase/SKAMaster/MANIFEST.in
deleted file mode 100644
index 8dfd89c2012dc1a6ec7d52f47735c90d03877190..0000000000000000000000000000000000000000
--- a/skabase/SKAMaster/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKAMaster *.py
-recursive-include test *.py
-include *.rst
-include SKAMaster.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKAMaster/README.rst b/skabase/SKAMaster/README.rst
deleted file mode 100644
index 36fd717a9ca964e4346185e109ec84167b525e58..0000000000000000000000000000000000000000
--- a/skabase/SKAMaster/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKAMaster
-
-A master test
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKAMaster instance_name
diff --git a/skabase/SKAMaster/__init__.py b/skabase/SKAMaster/__init__.py
deleted file mode 100644
index 83ea1724a039fe7f9893f5738cfb9af65a91df56..0000000000000000000000000000000000000000
--- a/skabase/SKAMaster/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKAMaster project
-#
-#
-#
-"""SKAMaster
-
-A generic master device for SKA Element Master.
-"""
-
-__all__ = ["SKAMaster", "main"]
-
-from skabase import release
-from .SKAMaster import SKAMaster, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKAMaster/__main__.py b/skabase/SKAMaster/__main__.py
deleted file mode 100644
index f8c10b167593565ee8cab3f7511c644873bf23ce..0000000000000000000000000000000000000000
--- a/skabase/SKAMaster/__main__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKAMaster project
-#
-#
-#
-from .SKAMaster import main
-main()
diff --git a/skabase/SKAMaster/test/__init__.py b/skabase/SKAMaster/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/SKAObsDevice/MANIFEST.in b/skabase/SKAObsDevice/MANIFEST.in
deleted file mode 100644
index 580fedddb913aaeaefaf81e97dfb0c35c3e2a5cd..0000000000000000000000000000000000000000
--- a/skabase/SKAObsDevice/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKAObsDevice *.py
-recursive-include test *.py
-include *.rst
-include SKAObsDevice.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKAObsDevice/README.rst b/skabase/SKAObsDevice/README.rst
deleted file mode 100644
index 1caf2cd3866c7ce4cefb49353c81a5175fd4bd87..0000000000000000000000000000000000000000
--- a/skabase/SKAObsDevice/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKAObsDevice
-
-A generic base device for Observations for SKA.
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKAObsDevice instance_name
diff --git a/skabase/SKAObsDevice/__init__.py b/skabase/SKAObsDevice/__init__.py
deleted file mode 100644
index 071bbe6fc68e42e7a58800fd424062998bec3a92..0000000000000000000000000000000000000000
--- a/skabase/SKAObsDevice/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKAObsDevice project
-#
-#
-#
-"""SKAObsDevice
-
-A generic base device for Observations for SKA. It inherits SKABaseDevice class. Any device implementing
-and obsMode will inherit from SKAObsDevice instead of just SKABaseDevice.
-"""
-
-__all__ = ["SKAObsDevice", "main"]
-from skabase import release
-from .SKAObsDevice import SKAObsDevice, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKAObsDevice/__main__.py b/skabase/SKAObsDevice/__main__.py
deleted file mode 100644
index 260cff99df7b5815919d96d04b17127d13980d37..0000000000000000000000000000000000000000
--- a/skabase/SKAObsDevice/__main__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKAObsDevice project
-#
-#
-#
-from .SKAObsDevice import main
-main()
diff --git a/skabase/SKAObsDevice/test/__init__.py b/skabase/SKAObsDevice/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/SKASubarray/MANIFEST.in b/skabase/SKASubarray/MANIFEST.in
deleted file mode 100644
index 4ce0314751b066c0675074d4b180b2fc15d121da..0000000000000000000000000000000000000000
--- a/skabase/SKASubarray/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKASubarray *.py
-recursive-include test *.py
-include *.rst
-include SKASubarray.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKASubarray/README.rst b/skabase/SKASubarray/README.rst
deleted file mode 100644
index b94a63fad4d5bd1668814f394a849b34e0f46db3..0000000000000000000000000000000000000000
--- a/skabase/SKASubarray/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKASubarray
-
-SubArray handling device
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKASubarray instance_name
diff --git a/skabase/SKASubarray/__init__.py b/skabase/SKASubarray/__init__.py
deleted file mode 100644
index 4fff0c1368a39509a8c7dcdb2c0c6a609720627c..0000000000000000000000000000000000000000
--- a/skabase/SKASubarray/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKASubarray project
-#
-#
-#
-"""SKASubarray
-
-A SubArray handling device. It allows the assigning/releasing of resources into/from Subarray, configuring
-capabilities, and exposes the related information like assigned resources, configured capabilities, etc.
-"""
-
-__all__ = ["SKASubarray", "main"]
-
-from skabase import release
-from .SKASubarray import SKASubarray, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKASubarray/__main__.py b/skabase/SKASubarray/__main__.py
deleted file mode 100644
index 18de61de3ddf248c165dd0d0785975ab01b28e75..0000000000000000000000000000000000000000
--- a/skabase/SKASubarray/__main__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKASubarray project
-#
-#
-#
-from .SKASubarray import main
-main()
diff --git a/skabase/SKASubarray/test/__init__.py b/skabase/SKASubarray/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/SKATelState/MANIFEST.in b/skabase/SKATelState/MANIFEST.in
deleted file mode 100644
index cce2cc4c46f3d539a22f867b2b70c198284e2030..0000000000000000000000000000000000000000
--- a/skabase/SKATelState/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKATelState *.py
-recursive-include test *.py
-include *.rst
-include SKATelState.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKATelState/README.rst b/skabase/SKATelState/README.rst
deleted file mode 100644
index d045f0be85e336f772ae141add0018cab17ae623..0000000000000000000000000000000000000000
--- a/skabase/SKATelState/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKATelState
-
-A generic base device for Telescope State for SKA.
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKATelState instance_name
diff --git a/skabase/SKATelState/__init__.py b/skabase/SKATelState/__init__.py
deleted file mode 100644
index 480873e76b3f3b2f29720d208444780d690550a0..0000000000000000000000000000000000000000
--- a/skabase/SKATelState/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKATelState project
-#
-#
-#
-"""SKATelState
-
-A generic base device for Telescope State for SKA.
-"""
-__all__ = ["SKATelState", "main"]
-
-from skabase import release
-from .SKATelState import SKATelState, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKATelState/__main__.py b/skabase/SKATelState/__main__.py
deleted file mode 100644
index 359162cb67063f42957a4613f28bbceb8486cf9a..0000000000000000000000000000000000000000
--- a/skabase/SKATelState/__main__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKATelState project
-#
-#
-#
-""" __main__
-
-Main module of SKATelState device class.
-"""
-from .SKATelState import main
-main()
diff --git a/skabase/SKATelState/test/__init__.py b/skabase/SKATelState/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/SKATestDevice/MANIFEST.in b/skabase/SKATestDevice/MANIFEST.in
deleted file mode 100644
index e09f2b4753e015973320b5d099363546818ef35e..0000000000000000000000000000000000000000
--- a/skabase/SKATestDevice/MANIFEST.in
+++ /dev/null
@@ -1,9 +0,0 @@
-recursive-include SKATestDevice *.py
-recursive-include test *.py
-include *.rst
-include SKATestDevice.xmi
-include *.txt
-graft docs
-
-global-exclude *.pyc
-global-exclude *.pyo
diff --git a/skabase/SKATestDevice/README.rst b/skabase/SKATestDevice/README.rst
deleted file mode 100644
index 9cf4b3d9e260556ced0b4a7f1dd3ae5fa13de004..0000000000000000000000000000000000000000
--- a/skabase/SKATestDevice/README.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-## SKATestDevice
-
-A generic Test device for testing SKA base class functionalites.
-
-## Requirement
-
-- PyTango >= 8.1.6
-- devicetest (for using tests)
-- sphinx (for building sphinx documentation)
-
-## Installation
-
-Run python setup.py install
-
-If you want to build sphinx documentation,
-run python setup.py build_sphinx
-
-If you want to pass the tests, 
-run python setup.py test
-
-## Usage
-
-Now you can start your device server in any
-Terminal or console by calling it :
-
-SKATestDevice instance_name
diff --git a/skabase/SKATestDevice/SKATestDevice.py b/skabase/SKATestDevice/SKATestDevice.py
deleted file mode 100644
index a30f1e32549eea0bd218672edf01676847154781..0000000000000000000000000000000000000000
--- a/skabase/SKATestDevice/SKATestDevice.py
+++ /dev/null
@@ -1,224 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKATestDevice project
-#
-#
-#
-""" SKATestDevice
-
-A generic Test device for testing SKA base class functionalities.
-"""
-# PROTECTED REGION ID(SKATestDevice.additionnal_import) ENABLED START #
-# standard imports
-import os
-import sys
-import json
-
-# Tango imports
-import tango
-from tango import DebugIt
-from tango.server import run
-from tango.server import attribute, command
-
-# SKA specific imports
-from skabase import release
-
-file_path = os.path.dirname(os.path.abspath(__file__))
-basedevice_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKABaseDevice"
-sys.path.insert(0, basedevice_path)
-
-from SKABaseDevice import SKABaseDevice
-from skabase.auxiliary.utils import (exception_manager, convert_api_value, coerce_value)
-
-# PROTECTED REGION END #    //  SKATestDevice.additionnal_imports
-
-__all__ = ["SKATestDevice", "main"]
-
-
-class SKATestDevice(SKABaseDevice):
-    """
-    A generic Test device for testing SKA base class functionalities.
-    """
-    # PROTECTED REGION ID(SKATestDevice.class_variable) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.class_variable
-
-    # -----------------
-    # Device Properties
-    # -----------------
-
-    # ----------
-    # Attributes
-    # ----------
-
-    obsState = attribute(
-        dtype='DevEnum',
-        doc="Observing State",
-        enum_labels=["IDLE", "CONFIGURING", "READY", "SCANNING",
-                     "PAUSED", "ABORTED", "FAULT", ],
-    )
-
-    obsMode = attribute(
-        dtype='DevEnum',
-        doc="Observing Mode",
-        enum_labels=["IDLE", "IMAGING", "PULSAR-SEARCH", "PULSAR-TIMING", "DYNAMIC-SPECTRUM",
-                     "TRANSIENT-SEARCH", "VLBI", "CALIBRATION", ],
-    )
-
-    configurationProgress = attribute(
-        dtype='uint16',
-        unit="%",
-        max_value=100,
-        min_value=0,
-        doc="Percentage configuration progress",
-    )
-
-    configurationDelayExpected = attribute(
-        dtype='uint16',
-        unit="seconds",
-        doc="Configuration delay expected in seconds",
-    )
-
-    # ---------------
-    # General methods
-    # ---------------
-
-    def init_device(self):
-        SKABaseDevice.init_device(self)
-        # PROTECTED REGION ID(SKATestDevice.init_device) ENABLED START #
-        self._build_state = '{}, {}, {}'.format(release.name, release.version,
-                                                release.description)
-        self._version_id = release.version
-        # PROTECTED REGION END #    //  SKATestDevice.init_device
-
-    def always_executed_hook(self):
-        # PROTECTED REGION ID(SKATestDevice.always_executed_hook) ENABLED START #
-        pass
-        # PROTECTED REGION END #    //  SKATestDevice.always_executed_hook
-
-    def delete_device(self):
-        # PROTECTED REGION ID(SKATestDevice.delete_device) ENABLED START #
-        pass
-        # PROTECTED REGION END #    //  SKATestDevice.delete_device
-
-    # ------------------
-    # Attributes methods
-    # ------------------
-
-    def read_obsState(self):
-        # PROTECTED REGION ID(SKATestDevice.obsState_read) ENABLED START #
-        """Reads Observing State of the device"""
-        return 0
-        # PROTECTED REGION END #    //  SKATestDevice.obsState_read
-
-    def read_obsMode(self):
-        # PROTECTED REGION ID(SKATestDevice.obsMode_read) ENABLED START #
-        """Reads Observing Mode of the device"""
-        return 0
-        # PROTECTED REGION END #    //  SKATestDevice.obsMode_read
-
-    def read_configurationProgress(self):
-        # PROTECTED REGION ID(SKATestDevice.configurationProgress_read) ENABLED START #
-        """Reads percentage configuration progress"""
-        return 0
-        # PROTECTED REGION END #    //  SKATestDevice.configurationProgress_read
-
-    def read_configurationDelayExpected(self):
-        # PROTECTED REGION ID(SKATestDevice.configurationDelayExpected_read) ENABLED START #
-        """Reads configuration delay expected in seconds"""
-        return 0
-        # PROTECTED REGION END #    //  SKATestDevice.configurationDelayExpected_read
-
-    # --------
-    # Commands
-    # --------
-
-    @command(
-        dtype_in='str',
-        doc_in="JSON encoded dict with this format\n{``group``: str,  # name of existing group\n"
-               "  ``command``: str, # name of command to run\n"
-               "  ``arg_type``: str,  # data type of command input argument\n"
-               "  ``arg_value``: str, # value for command input argument\n"
-               "  ``forward``: bool  # True if command should be forwarded to "
-               "all subgroups (default)\n}",
-        dtype_out='str',
-        doc_out="Return value from command on the group, as a JSON encoded string.\n"
-                "This will be a list of dicts of the form \n[ \n{``device_name``: str,  "
-                "# TANGO device name\n  ``argout``: <value>,  # return value from "
-                "command (type depends on command)\n  ``failed``: bool  # True if command failed\n},"
-                "\n{ ... },\n ... ]",
-    )
-    @DebugIt()
-    def RunGroupCommand(self, argin):
-        # PROTECTED REGION ID(SKATestDevice.RunGroupCommand) ENABLED START #
-        with exception_manager(self):
-            defaults = {'arg_type': None, 'arg_value': None, 'forward': True}
-            required = ('group', 'command', 'arg_type', 'arg_value', 'forward')
-            args = self._parse_argin(argin, defaults=defaults, required=required)
-            group_name = args['group']
-            group = self.groups.get(group_name)
-            if group:
-                group_command = args['command']
-                forward = args['forward']
-                if args['arg_type']:
-                    _, param = convert_api_value({'type': args['arg_type'],
-                                                  'value': args['arg_value']})
-                    replies = group.command_inout(group_command, param, forward=forward)
-                else:
-                    replies = group.command_inout(group_command, forward=forward)
-                results = []
-                for reply in replies:
-                    result = {
-                        'device_name': reply.dev_name(),
-                        'argout': coerce_value(reply.get_data()),
-                        'failed': reply.has_failed(),
-                    }
-                    results.append(result)
-                argout = json.dumps(results, sort_keys=True)
-            else:
-                raise RuntimeError("Invalid group requested. '{}' not in '{}'"
-                                   .format(group_name, sorted(self.groups.keys())))
-        return argout
-        # PROTECTED REGION END #    //  SKATestDevice.RunGroupCommand
-
-    @command(
-    )
-    @DebugIt()
-    def On(self):
-        # PROTECTED REGION ID(SKATestDevice.On) ENABLED START #
-        """Starts the device"""
-        self.logger.debug("TurnOn Sending DEBUG")
-        self.logger.info("TurnOn Sending INFO")
-        self.logger.warning("TurnOn Sending WARNING")
-        self.logger.error("TurnOn Sending ERROR")
-        self.logger.critical("TurnOn Sending CRITICAL")
-        #TODO: Set state to ON
-        # PROTECTED REGION END #    //  SKATestDevice.On
-
-    @command(
-    )
-    @DebugIt()
-    def Stop(self):
-        # PROTECTED REGION ID(SKATestDevice.Stop) ENABLED START #
-        """Stops the device"""
-        self.logger.debug("TurnOFF Sending DEBUG")
-        self.logger.info("TurnOFF Sending INFO")
-        self.logger.warning("TurnOFF Sending WARNING")
-        self.logger.error("TurnOFF Sending ERROR")
-        self.logger.critical("TurnOFF Sending CRITICAL")
-        # TODO: Set state to OFF
-        # PROTECTED REGION END #    //  SKATestDevice.Stop
-
-# ----------
-# Run server
-# ----------
-
-def main(args=None, **kwargs):
-    # PROTECTED REGION ID(SKATestDevice.main) ENABLED START #
-    """
-    Main entry point of the module.
-    """
-    return run((SKATestDevice,), args=args, **kwargs)
-    # PROTECTED REGION END #    //  SKATestDevice.main
-
-if __name__ == '__main__':
-    main()
diff --git a/skabase/SKATestDevice/SKATestDevice.xmi b/skabase/SKATestDevice/SKATestDevice.xmi
deleted file mode 100644
index 9bbd09b4f3a1b6872eb657ece3c9e0826ee6634b..0000000000000000000000000000000000000000
--- a/skabase/SKATestDevice/SKATestDevice.xmi
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
-  <classes name="SKATestDevice" pogoRevision="9.6">
-    <description description="A generic Test device for testing SKA base class functionalites." title="SKATestDevice" sourcePath="/home/tango-cs/src/lmc-base-classes/skabase/SKATestDevice" language="PythonHL" filestogenerate="XMI   file,Code files,Python Package,Protected Regions" license="none" copyright="" hasMandatoryProperty="false" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false">
-      <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="SKABaseDevice" sourcePath="../SKABaseDevice"/>
-      <identification contact="at ska.ac.za - cam" author="cam" emailDomain="ska.ac.za" classFamily="OtherInstruments" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="SKASA" reference="SKA-SKATestDevice"/>
-    </description>
-    <deviceProperties name="SkaLevel" description="Indication of importance of the device in the SKA hierarchy &#xA;to support drill-down navigation: 1..6, with 1 highest.&#xA;Default is 4, making provision for &#xA;EltMaster, EltAlarms, EltTelState = 1&#xA;SubEltMaster = 2&#xA;Subarray, Capability = 2/3&#xA;Others = 4 (or 5 or 6)">
-      <type xsi:type="pogoDsl:ShortType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <DefaultPropValue>4</DefaultPropValue>
-    </deviceProperties>
-    <deviceProperties name="LoggingLevelDefault" description="Default logging level at device startup.&#xA;(0=OFF, 1=FATAL, 2=ERROR, 3=WARNING, 4=INFO, 5=DEBUG)">
-      <type xsi:type="pogoDsl:UShortType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <DefaultPropValue>4</DefaultPropValue>
-    </deviceProperties>
-    <deviceProperties name="LoggingTargetsDefault" description="Default logging targets at device startup.&#xA;Each item has the format:  target_type::target_name.&#xA;To log to stdout, use 'console::cout'.&#xA;To log to syslog, use 'syslog::&#x3c;address&#x3e;',&#xA;  where &#x3c;address&#x3e; is a file path,&#xA;  for example 'syslog::/var/run/rsyslog/dev/log'.&#xA;To log to a file, use 'file::&#x3c;path&#x3e;',&#xA;  where &#x3c;path&#x3e; is a file path,&#xA;  for example 'file::/tmp/my_dev.log'.">
-      <type xsi:type="pogoDsl:StringVectorType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-    </deviceProperties>
-    <deviceProperties name="GroupDefinitions" description="Each string in the list is a JSON serialised dict defining the ``group_name``,&#xA;``devices`` and ``subgroups`` in the group.  A TANGO Group object is created&#xA;for each item in the list, according to the hierarchy defined.  This provides&#xA;easy access to the managed devices in bulk, or individually.&#xA;&#xA;The general format of the list is as follows, with optional ``devices`` and&#xA;``subgroups`` keys:&#xA;    [ {``group_name``: ``&lt;name>``,&#xA;       ``devices``: [``&lt;dev name>``, ...]},&#xA;      {``group_name``: ``&lt;name>``,&#xA;       ``devices``: [``&lt;dev name>``, ``&lt;dev name>``, ...],&#xA;       ``subgroups`` : [{&lt;nested group>},&#xA;                              {&lt;nested group>}, ...]},&#xA;      ...&#xA;      ]&#xA;&#xA;For example, a hierarchy of racks, servers and switches:&#xA;    [ {``group_name``: ``servers``,&#xA;       ``devices``: [``elt/server/1``, ``elt/server/2``,&#xA;                       ``elt/server/3``, ``elt/server/4``]},&#xA;      {``group_name``: ``switches``,&#xA;       ``devices``: [``elt/switch/A``, ``elt/switch/B``]},&#xA;      {``group_name``: ``pdus``,&#xA;       ``devices``: [``elt/pdu/rackA``, ``elt/pdu/rackB``]},&#xA;      {``group_name``: ``racks``,&#xA;      ``subgroups``: [&#xA;            {``group_name``: ``rackA``,&#xA;             ``devices``: [``elt/server/1``, ``elt/server/2``,&#xA;                               ``elt/switch/A``, ``elt/pdu/rackA``]},&#xA;            {``group_name``: ``rackB``,&#xA;             ``devices``: [``elt/server/3``, ``elt/server/4``,&#xA;                              ``elt/switch/B``, ``elt/pdu/rackB``],&#xA;             ``subgroups``: []}&#xA;       ]} ]">
-      <type xsi:type="pogoDsl:StringVectorType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-    </deviceProperties>
-    <commands name="GetVersionInfo" description="Array of version strings of all entities modelled by this device. &#xA;(One level down only)&#xA;Each string in the array lists the version info for one entity&#xA;managed by this device. &#xA;The first entry is version info for this TANGO Device itself.&#xA;The entities may be TANGO devices, or hardware LRUs or &#xA;anything else this devices manages/models.&#xA;The intention with this command is that it can provide more &#xA;detailed information than can be captured in the versionId &#xA;and buildState attributes, if necessary.&#xA;In the minimal case the GetVersionInfo will contain only the &#xA;versionId and buildState attributes of the next lower level&#xA;entities." execMethod="get_version_info" displayLevel="OPERATOR" polledPeriod="0">
-      <argin description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="[ name: EltTelState">
-        <type xsi:type="pogoDsl:StringArrayType"/>
-      </argout>
-      <status abstract="false" inherited="true" concrete="true"/>
-    </commands>
-    <commands name="State" description="This command gets the device state (stored in its device_state data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0">
-      <argin description="none">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="Device state">
-        <type xsi:type="pogoDsl:StateType"/>
-      </argout>
-      <status abstract="true" inherited="true" concrete="true"/>
-    </commands>
-    <commands name="Status" description="This command gets the device status (stored in its device_status data member) and returns it to the caller." execMethod="dev_status" displayLevel="OPERATOR" polledPeriod="0">
-      <argin description="none">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="Device status">
-        <type xsi:type="pogoDsl:ConstStringType"/>
-      </argout>
-      <status abstract="true" inherited="true" concrete="true"/>
-    </commands>
-    <commands name="RunGroupCommand" description="Runs the specified command on the specified group and returns&#xA;the results." execMethod="run_group_command" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
-      <argin description="JSON encoded dict with this format&#xA;{``group``: str,  # name of existing group&#xA;  ``command``: str, # name of command to run&#xA;  ``arg_type``: str,  # data type of command input argument&#xA;  ``arg_value``: str, # value for command input argument&#xA;  ``forward``: bool  # True if command should be forwarded to all subgroups (default)&#xA;}">
-        <type xsi:type="pogoDsl:StringType"/>
-      </argin>
-      <argout description="Return value from command on the group, as a JSON encoded string.&#xA;This will be a list of dicts of the form &#xA;[ &#xA;{``device_name``: str,  # TANGO device name&#xA;  ``argout``: &lt;value>,  # return value from command (type depends on command)&#xA;  ``failed``: bool  # True if command failed&#xA;},&#xA;{ ... },&#xA; ... ]">
-        <type xsi:type="pogoDsl:StringType"/>
-      </argout>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </commands>
-    <commands name="Reset" description="Reset device to its default state" execMethod="reset" displayLevel="OPERATOR" polledPeriod="0">
-      <argin description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argout>
-      <status abstract="false" inherited="true" concrete="true"/>
-    </commands>
-    <commands name="On" description="Command to turn ON the device" execMethod="on" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
-      <argin description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argout>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </commands>
-    <commands name="Stop" description="Command to stop the device" execMethod="stop" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
-      <argin description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argout>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </commands>
-    <attributes name="obsState" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <properties description="Observing State" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <enumLabels>IDLE</enumLabels>
-      <enumLabels>CONFIGURING</enumLabels>
-      <enumLabels>READY</enumLabels>
-      <enumLabels>SCANNING</enumLabels>
-      <enumLabels>PAUSED</enumLabels>
-      <enumLabels>ABORTED</enumLabels>
-      <enumLabels>FAULT</enumLabels>
-    </attributes>
-    <attributes name="obsMode" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="1000" maxX="" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <changeEvent fire="false" libCheckCriteria="false"/>
-      <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <properties description="Observing Mode" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <enumLabels>IDLE</enumLabels>
-      <enumLabels>IMAGING</enumLabels>
-      <enumLabels>PULSAR-SEARCH</enumLabels>
-      <enumLabels>PULSAR-TIMING</enumLabels>
-      <enumLabels>DYNAMIC-SPECTRUM</enumLabels>
-      <enumLabels>TRANSIENT-SEARCH</enumLabels>
-      <enumLabels>VLBI</enumLabels>
-      <enumLabels>CALIBRATION</enumLabels>
-    </attributes>
-    <attributes name="configurationProgress" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:UShortType"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <properties description="Percentage configuration progress" label="" unit="%" standardUnit="" displayUnit="" format="" maxValue="100" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="configurationDelayExpected" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:UShortType"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <properties description="Configuration delay expected in seconds" label="" unit="seconds" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="buildState" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="60000" maxX="" maxY="" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="Build state of this device" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="versionId" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="60000" maxX="" maxY="" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="Build state of this device" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="loggingLevel" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="1000" maxX="" maxY="" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <changeEvent fire="false" libCheckCriteria="false"/>
-      <archiveEvent fire="false" libCheckCriteria="false"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="Current logging level for this device - initialises to LoggingLevelDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="healthState" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="The health state reported for this device. It interprets the current device condition &#xA;and condition of all managed devices to set this. Most possibly an aggregate attribute." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="adminMode" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" memorized="true" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="The admin mode reported for this device. It may interpret the current device condition &#xA;and condition of all managed devices to set this. Most possibly an aggregate attribute." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="controlMode" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" memorized="true" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="The control mode of the device. REMOTE, LOCAL&#xA;TANGO Device accepts only from a &#x2018;local&#x2019; client and ignores commands and queries received from TM&#xA;or any other &#x2018;remote&#x2019; clients. The Local clients has to release LOCAL control before REMOTE clients&#xA;can take control again." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="simulationMode" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" memorized="true" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="Reports the simulation mode of the device. Some devices may implement both modes,&#xA;while others will have simulators that set simulationMode to True while the real&#xA;devices always set simulationMode to False." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="testMode" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" memorized="true" allocReadMember="true">
-      <dataType xsi:type="pogoDsl:EnumType"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="The test mode of the device. &#xA;Either no test mode (empty string) or an indication of the test mode." label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <attributes name="loggingTargets" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="3" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:StringType"/>
-      <changeEvent fire="false" libCheckCriteria="false"/>
-      <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
-      <status abstract="false" inherited="true" concrete="true"/>
-      <properties description="Logging targets for this device, excluding ska_logging defaults - &#xA;initialises to LoggingTargetsDefault on startup" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-    </attributes>
-    <states name="ON" description="This state could have been called OK or OPERATIONAL. It means that the device is in its operational state. (E.g. the power supply is giving its nominal current, th motor is ON and ready to move, the instrument is operating). This state is modified by the Attribute alarm checking of the DeviceImpl:dev_state method. i.e. if the State is ON and one attribute has its quality factor to ATTR_WARNING or ATTR_ALARM, then the State is modified to ALARM.">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <states name="OFF" description="The device is in normal condition but is not active. E.g. the power supply main circuit breaker is open; the RF transmitter has no power etc...">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <states name="FAULT" description="The device has a major failure that prevents it to work. For instance, A power supply has stopped due to over temperature A motor cannot move because it has fault conditions. Usually we cannot get out from this state without an intervention on the hardware or a reset command.">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <states name="INIT" description="This state is reserved to the starting phase of the device server. It means that the software is not fully operational and that the user must wait">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <states name="ALARM" description="ALARM - The device is operating but&#xA;at least one of the attributes is out of range. It can be linked to alarm conditions set by attribute properties or a specific case. (E.g. temperature alarm on a stepper motor, end switch pressed on a stepper motor, up water level in a tank, etc....). In alarm, usually the device does its job, but the operator has to perform an action to avoid a bigger problem that may switch the state to FAULT.">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <states name="UNKNOWN" description="The device cannot retrieve its state. It is the case when there is a communication problem to the hardware (network cut, broken cable etc...) It could also represent an incoherent situation">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <states name="STANDBY" description="Equates to LOW-POWER mode. This is the initial transition from INIT if the device supports a low-power mode. The device is not fully active but is ready to operate.">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <states name="DISABLE" description="The device cannot be switched ON for an external reason. E.g. the power supply has its door open, the safety conditions are not satisfactory to allow the device to operate.">
-      <status abstract="false" inherited="true" concrete="true"/>
-    </states>
-    <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
-    <overlodedPollPeriodObject name="healthState" type="attribute" pollPeriod="0"/>
-    <overlodedPollPeriodObject name="adminMode" type="attribute" pollPeriod="0"/>
-    <overlodedPollPeriodObject name="controlMode" type="attribute" pollPeriod="0"/>
-    <overlodedPollPeriodObject name="simulationMode" type="attribute" pollPeriod="0"/>
-    <overlodedPollPeriodObject name="testMode" type="attribute" pollPeriod="0"/>
-  </classes>
-</pogoDsl:PogoSystem>
diff --git a/skabase/SKATestDevice/__init__.py b/skabase/SKATestDevice/__init__.py
deleted file mode 100644
index 0224aa087797c506c09f3fc9c9983777ad2a46e5..0000000000000000000000000000000000000000
--- a/skabase/SKATestDevice/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKATestDevice project
-#
-#
-#
-"""SKATestDevice
-
-A generic Test device for testing SKA base class functionalities.
-"""
-from skabase import release
-from .SKATestDevice import SKATestDevice, main
-
-__version__ = release.version
-__version_info__ = release.version_info
-__author__ = release.author
diff --git a/skabase/SKATestDevice/__main__.py b/skabase/SKATestDevice/__main__.py
deleted file mode 100644
index c2cf0a39bc602f5b1ff44cf720be104a257a8fa4..0000000000000000000000000000000000000000
--- a/skabase/SKATestDevice/__main__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKATestDevice project
-#
-#
-#
-
-from .SKATestDevice import main
-main()
diff --git a/skabase/SKATestDevice/test/SKATestDevice_test.py b/skabase/SKATestDevice/test/SKATestDevice_test.py
deleted file mode 100644
index 71e855675b1127b7f4a923088491f7e542537182..0000000000000000000000000000000000000000
--- a/skabase/SKATestDevice/test/SKATestDevice_test.py
+++ /dev/null
@@ -1,206 +0,0 @@
-#########################################################################################
-# -*- coding: utf-8 -*-
-#
-# This file is part of the SKATestDevice project
-#
-#
-#
-#########################################################################################
-"""Contain the tests for the SKATestDevice."""
-
-# Standard imports
-import sys
-import os
-
-# Imports
-import re
-import pytest
-from tango import DevState
-
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
-# PROTECTED REGION ID(SKATestDevice.test_additional_imports) ENABLED START #
-from skabase.control_model import (
-    AdminMode, ControlMode, HealthState, ObsMode, ObsState, SimulationMode, TestMode
-)
-# PROTECTED REGION END #    //  SKATestDevice.test_additional_imports
-# Device test case
-# PROTECTED REGION ID(SKATestDevice.test_SKATestDevice_decorators) ENABLED START #
-@pytest.mark.usefixtures("tango_context", "initialize_device")
-# PROTECTED REGION END #    //  SKATestDevice.test_SKATestDevice_decorators
-class TestSKATestDevice(object):
-    """Test case for packet generation."""
-
-    properties = {
-        'SkaLevel': '4',
-        'LoggingTargetsDefault': '',
-        'LoggingLevelDefault': '4',
-        'GroupDefinitions': ''
-        }
-
-    @classmethod
-    def mocking(cls):
-        """Mock external libraries."""
-        # Example : Mock numpy
-        # cls.numpy = SKATestDevice.numpy = MagicMock()
-        # PROTECTED REGION ID(SKATestDevice.test_mocking) ENABLED START #
-        # PROTECTED REGION END #    //  SKATestDevice.test_mocking
-
-    def test_properties(self, tango_context):
-        # Test the properties
-        # PROTECTED REGION ID(SKATestDevice.test_properties) ENABLED START #
-        # PROTECTED REGION END #    //  SKATestDevice.test_properties
-        pass
-
-    # PROTECTED REGION ID(SKATestDevice.test_GetVersionInfo_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_GetVersionInfo_decorators
-    def test_GetVersionInfo(self, tango_context):
-        """Test for GetVersionInfo"""
-        # PROTECTED REGION ID(SKATestDevice.test_GetVersionInfo) ENABLED START #
-        versionPattern = re.compile(
-            r'SKATestDevice, lmcbaseclasses, [0-9].[0-9].[0-9], '
-            r'A set of generic base devices for SKA Telescope.')
-        versionInfo = tango_context.device.GetVersionInfo()
-        assert (re.match(versionPattern, versionInfo[0])) is not None
-        # PROTECTED REGION END #    //  SKATestDevice.test_GetVersionInfo
-
-    # PROTECTED REGION ID(SKATestDevice.test_State_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_State_decorators
-    def test_State(self, tango_context):
-        """Test for State"""
-        # PROTECTED REGION ID(SKATestDevice.test_State) ENABLED START #
-        assert tango_context.device.State() == DevState.UNKNOWN
-        # PROTECTED REGION END #    //  SKATestDevice.test_State
-
-    # PROTECTED REGION ID(SKATestDevice.test_Status_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_Status_decorators
-    def test_Status(self, tango_context):
-        """Test for Status"""
-        # PROTECTED REGION ID(SKATestDevice.test_Status) ENABLED START #
-        assert tango_context.device.Status() == "The device is in UNKNOWN state."
-        # PROTECTED REGION END #    //  SKATestDevice.test_Status
-
-    # TODO: Fix the failing test case. Commented out to make CI pipeline run successfully.
-    # PROTECTED REGION ID(SKATestDevice.test_RunGroupCommand_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_RunGroupCommand_decorators
-    # def test_RunGroupCommand(self, tango_context):
-    #     """Test for RunGroupCommand"""
-    #     # PROTECTED REGION ID(SKATestDevice.test_RunGroupCommand) ENABLED START #
-    #     assert tango_context.device.RunGroupCommand("") == ""
-    #     # PROTECTED REGION END #    //  SKATestDevice.test_RunGroupCommand
-
-    # PROTECTED REGION ID(SKATestDevice.test_Reset_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_Reset_decorators
-    def test_Reset(self, tango_context):
-        """Test for Reset"""
-        # PROTECTED REGION ID(SKATestDevice.test_Reset) ENABLED START #
-        assert tango_context.device.Reset() is None
-        # PROTECTED REGION END #    //  SKATestDevice.test_Reset
-
-    def test_On(self, tango_context):
-        """Test for On"""
-        # PROTECTED REGION ID(SKATestDevice.test_On) ENABLED START #
-        tango_context.device.On()
-        #TODO: Add assert condition
-        # PROTECTED REGION END #    //  SKATestDevice.test_On
-
-    def test_Stop(self, tango_context):
-        """Test for Stop"""
-        # PROTECTED REGION ID(SKATestDevice.test_Stop) ENABLED START #
-        tango_context.device.Stop()
-        # TODO: Add assert condition
-        # PROTECTED REGION END #    //  SKATestDevice.test_Stop
-
-    # PROTECTED REGION ID(SKATestDevice.test_obsState_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_obsState_decorators
-    def test_obsState(self, tango_context):
-        """Test for obsState"""
-        # PROTECTED REGION ID(SKATestDevice.test_obsState) ENABLED START #
-        assert tango_context.device.obsState == ObsState.IDLE
-        # PROTECTED REGION END #    //  SKATestDevice.test_obsState
-
-    # PROTECTED REGION ID(SKATestDevice.test_obsMode_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_obsMode_decorators
-    def test_obsMode(self, tango_context):
-        """Test for obsMode"""
-        # PROTECTED REGION ID(SKATestDevice.test_obsMode) ENABLED START #
-        assert tango_context.device.obsMode == ObsMode.IDLE
-        # PROTECTED REGION END #    //  SKATestDevice.test_obsMode
-
-    # PROTECTED REGION ID(SKATestDevice.test_configurationProgress_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_configurationProgress_decorators
-    def test_configurationProgress(self, tango_context):
-        """Test for configurationProgress"""
-        # PROTECTED REGION ID(SKATestDevice.test_configurationProgress) ENABLED START #
-        assert tango_context.device.configurationProgress == 0
-        # PROTECTED REGION END #    //  SKATestDevice.test_configurationProgress
-
-    # PROTECTED REGION ID(SKATestDevice.test_configurationDelayExpected_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_configurationDelayExpected_decorators
-    def test_configurationDelayExpected(self, tango_context):
-        """Test for configurationDelayExpected"""
-        # PROTECTED REGION ID(SKATestDevice.test_configurationDelayExpected) ENABLED START #
-        assert tango_context.device.configurationDelayExpected == 0
-        # PROTECTED REGION END #    //  SKATestDevice.test_configurationDelayExpected
-
-    # PROTECTED REGION ID(SKATestDevice.test_buildState_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_buildState_decorators
-    def test_buildState(self, tango_context):
-        """Test for buildState"""
-        # PROTECTED REGION ID(SKATestDevice.test_buildState) ENABLED START #
-        buildPattern = re.compile(
-            r'lmcbaseclasses, [0-9].[0-9].[0-9], '
-            r'A set of generic base devices for SKA Telescope')
-        assert (re.match(buildPattern, tango_context.device.buildState)) is not None
-        # PROTECTED REGION END #    //  SKATestDevice.test_buildState
-
-    # PROTECTED REGION ID(SKATestDevice.test_versionId_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_versionId_decorators
-    def test_versionId(self, tango_context):
-        """Test for versionId"""
-        # PROTECTED REGION ID(SKATestDevice.test_versionId) ENABLED START #
-        versionIdPattern = re.compile(r'[0-9].[0-9].[0-9]')
-        assert (re.match(versionIdPattern, tango_context.device.versionId)) is not None
-        # PROTECTED REGION END #    //  SKATestDevice.test_versionId
-
-    # PROTECTED REGION ID(SKATestDevice.test_healthState_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_healthState_decorators
-    def test_healthState(self, tango_context):
-        """Test for healthState"""
-        # PROTECTED REGION ID(SKATestDevice.test_healthState) ENABLED START #
-        assert tango_context.device.healthState == HealthState.OK
-        # PROTECTED REGION END #    //  SKATestDevice.test_healthState
-
-    # PROTECTED REGION ID(SKATestDevice.test_adminMode_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_adminMode_decorators
-    def test_adminMode(self, tango_context):
-        """Test for adminMode"""
-        # PROTECTED REGION ID(SKATestDevice.test_adminMode) ENABLED START #
-        assert tango_context.device.adminMode == AdminMode.ONLINE
-        # PROTECTED REGION END #    //  SKATestDevice.test_adminMode
-
-    # PROTECTED REGION ID(SKATestDevice.test_controlMode_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_controlMode_decorators
-    def test_controlMode(self, tango_context):
-        """Test for controlMode"""
-        # PROTECTED REGION ID(SKATestDevice.test_controlMode) ENABLED START #
-        assert tango_context.device.controlMode == ControlMode.REMOTE
-        # PROTECTED REGION END #    //  SKATestDevice.test_controlMode
-
-    # PROTECTED REGION ID(SKATestDevice.test_simulationMode_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_simulationMode_decorators
-    def test_simulationMode(self, tango_context):
-        """Test for simulationMode"""
-        # PROTECTED REGION ID(SKATestDevice.test_simulationMode) ENABLED START #
-        assert tango_context.device.simulationMode == SimulationMode.FALSE
-        # PROTECTED REGION END #    //  SKATestDevice.test_simulationMode
-
-    # PROTECTED REGION ID(SKATestDevice.test_testMode_decorators) ENABLED START #
-    # PROTECTED REGION END #    //  SKATestDevice.test_testMode_decorators
-    def test_testMode(self, tango_context):
-        """Test for testMode"""
-        # PROTECTED REGION ID(SKATestDevice.test_testMode) ENABLED START #
-        assert tango_context.device.testMode == TestMode.NONE
-        # PROTECTED REGION END #    //  SKATestDevice.test_testMode
diff --git a/skabase/SKATestDevice/test/__init__.py b/skabase/SKATestDevice/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/__init__.py b/skabase/__init__.py
deleted file mode 100644
index 0876b3881709c20edeec9862d2b5fcf518eb7f5d..0000000000000000000000000000000000000000
--- a/skabase/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-__all__ = ["auxiliary",
-           "SKAAlarmHandler",
-           "SKABaseDevice",
-           "SKACapability",
-           "SKALogger",
-           "SKAMaster",
-           "SKAObsDevice",
-           "SKASubarray",
-           "SKATelState"
-            ]
diff --git a/skabase/auxiliary/__init__.py b/skabase/auxiliary/__init__.py
deleted file mode 100644
index 3f6488254621e68eb2bb80c84ff0ef57a570ac75..0000000000000000000000000000000000000000
--- a/skabase/auxiliary/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-__all__ = ["utils", "faults"]
\ No newline at end of file
diff --git a/skabase/conftest.py b/skabase/conftest.py
deleted file mode 100644
index 672ebae5626eb169ab4f449ef849b78bc707bf1d..0000000000000000000000000000000000000000
--- a/skabase/conftest.py
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-A module defining a list of fixture functions that are shared across all the skabase
-tests.
-"""
-import os
-import time
-import importlib
-import pytest
-
-from unittest import mock
-
-from tango.test_context import DeviceTestContext
-
-
-@pytest.fixture(scope="class")
-def tango_context(request):
-    """Creates and returns a TANGO DeviceTestContext object.
-
-    Parameters
-    ----------
-    request: _pytest.fixtures.SubRequest
-        A request object gives access to the requesting test context.
-    """
-    test_properties = {
-        'SKAMaster': {
-            'SkaLevel': '4',
-            'LoggingTargetsDefault': '',
-            'GroupDefinitions': '',
-            'NrSubarrays': '16',
-            'CapabilityTypes': '',
-            'MaxCapabilities': ['BAND1:1', 'BAND2:1']
-            },
-
-        'SKASubarray': {
-            'CapabilityTypes': 'BAND1',
-            'LoggingTargetsDefault': '',
-            'GroupDefinitions': '',
-            'SkaLevel': '4',
-            'SubID': '1',
-        },
-    }
-
-    fq_test_class_name = request.cls.__module__
-    fq_test_class_name_details = fq_test_class_name.split(".")
-    # For future use
-    # package_name = fq_test_class_name_details[0]
-    # class_name = module_name = fq_test_class_name_details[1]
-    class_name = fq_test_class_name_details[1]
-    module = importlib.import_module(fq_test_class_name_details[1], fq_test_class_name_details[1])
-    klass = getattr(module, class_name)
-
-    tango_context = DeviceTestContext(klass, properties=test_properties.get(class_name))
-    tango_context.start()
-    yield tango_context
-    tango_context.stop()
-
-@pytest.fixture(scope="function")
-def initialize_device(tango_context):
-    """Re-initializes the device.
-
-    Parameters
-    ----------
-    tango_context: tango.test_context.DeviceTestContext
-        Context to run a device without a database.
-    """
-    yield tango_context.device.Init()
-
-@pytest.fixture(scope="class")
-def setup_log_test_device():
-    """
-    Executes the SKA test device to test the logger class.
-    :return: None
-    """
-    #TODO: Check if test device is registered in tango db. Register if required. Also check how to execute in docker environment.
-    # run test device
-    file_path = os.path.dirname(os.path.abspath(__file__))
-    testdevice_path = os.path.abspath(os.path.join(file_path, os.curdir)) + "/SKATestDevice/SKATestDevice.py"
-    cmdline = 'python3 ' + testdevice_path + ' ' + '01 &'
-    os.system(cmdline)
-    time.sleep(3)
-    yield setup_log_test_device
-
-    #tear down
-    cmdline = 'pkill -9 -f .' + testdevice_path + ' &'
-    os.system(cmdline)
-
diff --git a/skabase/tests/__init__.py b/skabase/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/skabase/tests/base.py b/skabase/tests/base.py
deleted file mode 100644
index 10935e0412fe46da731bd37da740236556b73453..0000000000000000000000000000000000000000
--- a/skabase/tests/base.py
+++ /dev/null
@@ -1,81 +0,0 @@
-from time import sleep
-from unittest import TestCase
-from subprocess import Popen
-from tango import Database, DbDevInfo, DbDatum
-from os.path import join, dirname, realpath
-import sys
-
-class DeviceServerBaseTest(TestCase):
-    DOMAIN_NAME = 'test'
-    REQUIRED_DEVICE_SERVERS = []
-    running_device_servers = {}
-    device_server_path = join(dirname(realpath(__file__)), '../../run')
-    db = None  # actual db connection in setUpClass (not great!)
-
-    @classmethod
-    def add_device(cls, device_server_name, device_ref):
-        dev_info = get_dev_info(cls.DOMAIN_NAME, device_server_name, device_ref)
-        cls.db.add_device(dev_info)
-        return dev_info.name
-
-    @classmethod
-    def remove_device(cls, device_ref):
-        cls.db.delete_device('%s/%s' % (cls.DOMAIN_NAME, device_ref))
-
-    @classmethod
-    def add_devices(self):
-        pass
-
-    @classmethod
-    def remove_devices(self):
-        pass
-
-    @classmethod
-    def stop_device_server(cls, device_server_name):
-        process = cls.running_device_servers[device_server_name]
-        process.kill()
-
-    @classmethod
-    def start_device_server(cls, device_server_name):
-        # Running in Pycharm debugger, Popen uses the system python not the virtualenv python.
-        # sys.executable gives the full path of current interpreter from the virtual env
-        python = sys.executable
-        process = Popen(["nohup", python, device_server_name, cls.DOMAIN_NAME, '-v1'],
-                        cwd=cls.device_server_path)
-        sleep(5)
-        cls.running_device_servers[device_server_name] = process
-
-    @classmethod
-    def setUpClass(cls):
-        cls.db = Database()
-        cls.add_devices()
-        sleep(2)
-        for device_server in cls.REQUIRED_DEVICE_SERVERS:
-            cls.start_device_server(device_server)
-        sleep(2)
-
-    @classmethod
-    def tearDownClass(cls):
-        cls.remove_devices()
-        for device_server in cls.REQUIRED_DEVICE_SERVERS:
-            cls.stop_device_server(device_server)
-        cls.db = None
-
-    @classmethod
-    def add_device_prop(cls, device_ref, properties):
-        for name, value in properties.items():
-            db_datum = DbDatum()
-            db_datum.name = name
-            db_datum.value_string.append(value)
-            device_name = '%s/%s' % (cls.DOMAIN_NAME, device_ref)
-
-            cls.db.put_device_property(device_name, db_datum)
-
-
-def get_dev_info(domain_name, device_server_name, device_ref):
-    dev_info = DbDevInfo()
-    dev_info._class = device_server_name
-    dev_info.server = '%s/%s' % (device_server_name, domain_name)
-    # add the device
-    dev_info.name = '%s/%s' % (domain_name, device_ref)
-    return dev_info
diff --git a/skabase/tests/test_group.py b/skabase/tests/test_group.py
deleted file mode 100644
index d5510028298ee1abc42a2ce9522da2aa18deba6a..0000000000000000000000000000000000000000
--- a/skabase/tests/test_group.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# import tango
-# from tango import DeviceProxy, AttrQuality, AttributeProxy
-# from .base import DeviceServerBaseTest
-# import json
-# from time import sleep
-
-# class TestGroup(DeviceServerBaseTest):
-    # REQUIRED_DEVICE_SERVERS = ['Subarray_DS', 'Capability_DS']
-    #
-    # @classmethod
-    # def add_devices(cls):
-    #     cls.add_device('Subarray_DS', 'sub/1')
-    #     cls.add_device('Capability_DS', 'cap/sub1cap1')
-    #     cls.add_device('Capability_DS', 'cap/sub1cap2')
-    #     cls.add_device('Device_DS', 'dev/sub1cap1dev1')
-    #     cls.add_device('Device_DS', 'dev/sub1cap1dev2')
-    #     cls.add_device('Device_DS', 'dev/sub1cap2dev1')
-    #
-    # @classmethod
-    # def remove_devices(cls):
-    #     cls.remove_device('sub/1')
-    #     cls.remove_device('cap/sub1cap1')
-    #     cls.remove_device('cap/sub1cap2')
-    #     cls.remove_device('dev/sub1cap1dev1')
-    #     cls.remove_device('dev/sub1cap1dev2')
-    #     cls.remove_device('dev/sub1cap2dev1')
-
-    # def test_add_member(self):
-    #     device_name = '%s/sub/1' % self.DOMAIN_NAME
-    #     group_name = 'capabilities'
-    #     # self.stop_device_server('Subarray_DS')
-    #     # self.start_device_server('Subarray_DS')
-    #     dp = DeviceProxy(device_name)
-    #     dp.set_logging_level(5)
-    #     member_device_name_1 = '%s/capability/sub1cap1' % self.DOMAIN_NAME
-    #     data_1 = json.dumps({'group_name': group_name, 'device_name': member_device_name_1 })
-    #     dp.command_inout('add_member', data_1)
-    #     self.assertTrue(member_device_name_1 in dp.get_property(group_name)[group_name])
-    #
-    #     member_device_name_2 = '%s/capability/sub1cap2' % self.DOMAIN_NAME
-    #     data_2 = json.dumps({'group_name': group_name, 'device_name': member_device_name_2 })
-    #     dp.command_inout('add_member', data_2)
-    #
-    #     items = dp.get_property(group_name)[group_name]
-    #     self.assertTrue(member_device_name_2 in items)
-    #     self.assertEqual(len(items), 2)
-    #     dp.command_inout('remove_member', data_2)
-    #
-    #     items = dp.get_property(group_name)[group_name]
-    #     self.assertFalse(member_device_name_2 in items)
-    #     self.assertEqual(len(items), 1)
-    #
-    #     dp.command_inout('remove_member', data_1)
-    #     self.assertFalse(member_device_name_1 in dp.get_property(group_name)[group_name])
-    #
-    # def add_members(self, device_name, group_name, members=None):
-    #     dp = DeviceProxy(device_name)
-    #     for member in members:
-    #         data = json.dumps({'group_name': group_name, 'device_name': member })
-    #         dp.command_inout('add_member', data)
-    #
-    # def test_alarm_propagation(self):
-    #     device_name = '%s/sub1/1' % self.DOMAIN_NAME
-    #     members_template = ['%s/capability/sub1cap1', '%s/capability/sub1cap2']
-    #     members = [member % self.DOMAIN_NAME for member in members_template]
-    #
-    #     self.add_members(device_name, 'tiles', members)
-    #     dp = DeviceProxy(device_name)
-    #     self.assertNotEqual(dp.state(), AttrQuality.ATTR_ALARM)
-    #     member_dp = DeviceProxy(members[0])
-    #     alarm_data = json.dumps({'name': 'an_attr', 'min_alarm': '20', 'max_alarm': '50'})
-    #     member_dp.command_inout('set_attribute_alarm', alarm_data)
-    #     member_dp.an_attr = 10
-    #     attr = AttributeProxy(members[0] + '/an_attr')
-    #     self.assertEqual(attr.read().quality, AttrQuality.ATTR_ALARM)
-    #     self.assertEqual(member_dp.state(), tango._tango.DevState.ALARM)
-    #     i = 0
-    #     while (dp.state() != tango._tango.DevState.ALARM) and i < 3:
-    #         sleep(1)
-    #         i+=1
-    #
-    #     self.assertEqual(dp.state(), tango._tango.DevState.ALARM)
diff --git a/src/ska/__init__.py b/src/ska/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..de273ad04735bb6418fa5f6045fab578991077e8
--- /dev/null
+++ b/src/ska/__init__.py
@@ -0,0 +1,8 @@
+"""Empty ska namespace __init__ file.
+
+The "ska" package namespace is shared across multiple projects
+so it will be overwritten by the last package installed.
+
+*** DO NOT implement anything in this file! ***
+
+"""
diff --git a/src/ska/base/__init__.py b/src/ska/base/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..4478f8e6a34147e695a30f5fac561273522b976d
--- /dev/null
+++ b/src/ska/base/__init__.py
@@ -0,0 +1,25 @@
+__all__ = (
+    "control_model",
+    "SKAAlarmHandler",
+    "SKABaseDevice",
+    "SKACapability",
+    "SKALogger",
+    "SKAMaster",
+    "SKAObsDevice",
+    "SKASubarray",
+    "SKATelState"
+)
+
+# Note: order of imports is important - start with lowest in the hierarchy
+
+# SKABaseDevice, and then classes that inherit from it
+from .base_device import SKABaseDevice
+from .alarm_handler_device import SKAAlarmHandler
+from .logger_device import SKALogger
+from .master_device import SKAMaster
+from .tel_state_device import SKATelState
+
+# SKAObsDevice, and then classes that inherit from it
+from .obs_device import SKAObsDevice
+from .capability_device import SKACapability
+from .subarray_device import SKASubarray
diff --git a/skabase/SKAAlarmHandler/SKAAlarmHandler.py b/src/ska/base/alarm_handler_device.py
similarity index 97%
rename from skabase/SKAAlarmHandler/SKAAlarmHandler.py
rename to src/ska/base/alarm_handler_device.py
index 3b99c198eaba67b89054a55da5cc06e726a51a9e..2a05b700db001bf509c84c16306d78f5067d096a 100644
--- a/skabase/SKAAlarmHandler/SKAAlarmHandler.py
+++ b/src/ska/base/alarm_handler_device.py
@@ -20,11 +20,8 @@ from tango import DebugIt
 from tango.server import run, attribute, command, device_property
 
 # SKA specific imports
-from skabase import release
-file_path = os.path.dirname(os.path.abspath(__file__))
-basedevice_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKABaseDevice"
-sys.path.insert(0, basedevice_path)
-from SKABaseDevice import SKABaseDevice
+from . import SKABaseDevice, release
+
 # PROTECTED REGION END #    //  SKAAlarmHandler.additionnal_import
 
 __all__ = ["SKAAlarmHandler", "main"]
diff --git a/skabase/SKABaseDevice/SKABaseDevice.py b/src/ska/base/base_device.py
similarity index 93%
rename from skabase/SKABaseDevice/SKABaseDevice.py
rename to src/ska/base/base_device.py
index 0bd64dc4c22115a3d01990a4482926005394afac..b8e47d7e0a25f2e549232c1a0cee8aa8821f74dc 100644
--- a/skabase/SKABaseDevice/SKABaseDevice.py
+++ b/src/ska/base/base_device.py
@@ -27,26 +27,20 @@ from tango import DeviceProxy, DevFailed
 
 # SKA specific imports
 import ska_logging
-from skabase import release
-from skabase.control_model import (
+from . import release
+from .control_model import (
     AdminMode, ControlMode, HealthState, LoggingLevel, SimulationMode, TestMode
 )
-file_path = os.path.dirname(os.path.abspath(__file__))
-auxiliary_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/auxiliary"
-sys.path.insert(0, auxiliary_path)
-
-from utils import (get_dp_command,
-                   coerce_value,
-                   get_groups_from_json,
-                   get_tango_device_type_id)
-from faults import (GroupDefinitionsError,
-                    LoggingTargetError,
-                    LoggingLevelError)
 
-LOG_FILE_SIZE = 1024 * 1024  # Log file size 1MB.
+from .utils import (get_dp_command,
+                    coerce_value,
+                    get_groups_from_json,
+                    get_tango_device_type_id)
+from .faults import (GroupDefinitionsError,
+                     LoggingTargetError,
+                     LoggingLevelError)
 
-#  Note:  TangoLoggingLevel enum is deprecated - use LoggingLevel instead
-TangoLoggingLevel = LoggingLevel
+LOG_FILE_SIZE = 1024 * 1024  # Log file size 1MB.
 
 
 class _Log4TangoLoggingLevel(enum.IntEnum):
@@ -172,7 +166,7 @@ class LoggingUtils:
 # PROTECTED REGION END #    //  SKABaseDevice.additionnal_import
 
 
-__all__ = ["SKABaseDevice", "TangoLoggingLevel", "main"]
+__all__ = ["SKABaseDevice", "main"]
 
 
 class SKABaseDevice(Device):
@@ -240,35 +234,6 @@ class SKABaseDevice(Device):
         self.error_stream = self.logger.error
         self.fatal_stream = self.logger.critical
 
-    def _parse_argin(self, argin, defaults=None, required=None):
-        """
-        Parses the argument passed to it and returns them in a dictionary form.
-
-        :param argin: The argument to parse
-
-        :param defaults:
-
-        :param required:
-
-        :return: Dictionary containing passed arguments.
-        """
-        args_dict = defaults.copy() if defaults else {}
-        try:
-            if argin:
-                args_dict.update(json.loads(argin))
-        except ValueError as ex:
-            self.logger.fatal(str(ex), exc_info=True)
-            raise
-
-        missing_args = []
-        if required:
-            missing_args = set(required) - set(args_dict.keys())
-        if missing_args:
-            msg = ("Missing arguments: {}"
-                   .format(', '.join([str(m_arg) for m_arg in missing_args])))
-            raise Exception(msg)
-        return args_dict
-
     # PROTECTED REGION END #    //  SKABaseDevice.class_variable
 
     # -----------------
diff --git a/skabase/SKACapability/SKACapability.py b/src/ska/base/capability_device.py
similarity index 95%
rename from skabase/SKACapability/SKACapability.py
rename to src/ska/base/capability_device.py
index aa03bdf4e7b77fdf333d86775c452d32ef251016..930905aaa781bf1ebd0b9a73fa67d8198a04e2fe 100644
--- a/skabase/SKACapability/SKACapability.py
+++ b/src/ska/base/capability_device.py
@@ -18,12 +18,7 @@ from tango import DebugIt
 from tango.server import run, attribute, command, device_property
 
 # SKA specific imports
-from skabase import release
-
-file_path = os.path.dirname(os.path.abspath(__file__))
-obs_device_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKAObsDevice"
-sys.path.insert(0, obs_device_path)
-from SKAObsDevice import SKAObsDevice
+from . import SKAObsDevice, release
 # PROTECTED REGION END #    //  SKACapability.additionnal_imports
 
 __all__ = ["SKACapability", "main"]
diff --git a/skabase/control_model.py b/src/ska/base/control_model.py
similarity index 100%
rename from skabase/control_model.py
rename to src/ska/base/control_model.py
diff --git a/skabase/auxiliary/faults.py b/src/ska/base/faults.py
similarity index 100%
rename from skabase/auxiliary/faults.py
rename to src/ska/base/faults.py
diff --git a/skabase/SKALogger/SKALogger.py b/src/ska/base/logger_device.py
similarity index 92%
rename from skabase/SKALogger/SKALogger.py
rename to src/ska/base/logger_device.py
index e91ba77df5d0c0fb7950ea2c9cc1f306aaea8bfc..9fc537c3d4de7d319579133592822b90318e8407 100644
--- a/skabase/SKALogger/SKALogger.py
+++ b/src/ska/base/logger_device.py
@@ -19,12 +19,8 @@ from tango import DebugIt, DeviceProxy, DevFailed
 from tango.server import run, command
 
 # SKA specific imports
-from skabase import release
-from skabase.control_model import LoggingLevel
-file_path = os.path.dirname(os.path.abspath(__file__))
-basedevice_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKABaseDevice"
-sys.path.insert(0, basedevice_path)
-from SKABaseDevice import SKABaseDevice
+from . import SKABaseDevice, release
+from .control_model import LoggingLevel
 # PROTECTED REGION END #    //  SKALogger.additionnal_import
 
 __all__ = ["SKALogger", "main"]
diff --git a/skabase/SKAMaster/SKAMaster.py b/src/ska/base/master_device.py
similarity index 93%
rename from skabase/SKAMaster/SKAMaster.py
rename to src/ska/base/master_device.py
index 79f4a02d5006c7ed8e7623c21fca180acf710619..1b227c8a8026cd4cc7651c34944060cffeacd324 100644
--- a/skabase/SKAMaster/SKAMaster.py
+++ b/src/ska/base/master_device.py
@@ -19,16 +19,8 @@ from tango import DebugIt
 from tango.server import run, attribute, command, device_property
 
 # SKA specific imports
-from skabase import release
-
-file_path = os.path.dirname(os.path.abspath(__file__))
-basedevice_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKABaseDevice"
-sys.path.insert(0, basedevice_path)
-from SKABaseDevice import SKABaseDevice
-
-auxiliary_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/auxiliary"
-sys.path.insert(0, auxiliary_path)
-from utils import (validate_capability_types, validate_input_sizes, convert_dict_to_list)
+from . import SKABaseDevice, release
+from .utils import validate_capability_types, validate_input_sizes, convert_dict_to_list
 
 
 # PROTECTED REGION END #    //  SKAMaster.additionnal_imports
diff --git a/skabase/SKAObsDevice/SKAObsDevice.py b/src/ska/base/obs_device.py
similarity index 93%
rename from skabase/SKAObsDevice/SKAObsDevice.py
rename to src/ska/base/obs_device.py
index 46a21832d9a49d3df30f47c821e46e4646a87132..18f63d8997737156af3993a3696d22b6c2b7a57a 100644
--- a/skabase/SKAObsDevice/SKAObsDevice.py
+++ b/src/ska/base/obs_device.py
@@ -20,13 +20,8 @@ import sys
 from tango.server import run, attribute
 
 # SKA specific imports
-from skabase import release
-from skabase.control_model import ObsMode, ObsState
-
-file_path = os.path.dirname(os.path.abspath(__file__))
-basedevice_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKABaseDevice"
-sys.path.insert(0, basedevice_path)
-from SKABaseDevice import SKABaseDevice
+from . import SKABaseDevice, release
+from .control_model import ObsMode, ObsState
 # PROTECTED REGION END #    //  SKAObsDevice.additionnal_imports
 
 __all__ = ["SKAObsDevice", "main"]
diff --git a/skabase/release.py b/src/ska/base/release.py
similarity index 96%
rename from skabase/release.py
rename to src/ska/base/release.py
index b71601ed073f0298332158413a2f7a4563454e6d..6aa5bbccfe58a913ee3aeaaf176a6348f2bbe81f 100644
--- a/skabase/release.py
+++ b/src/ska/base/release.py
@@ -7,7 +7,7 @@
 """Release information for lmc-base-classes Python Package"""
 
 name = """lmcbaseclasses"""
-version = "0.4.1"
+version = "0.5.0"
 version_info = version.split(".")
 description = """A set of generic base devices for SKA Telescope."""
 author = "SKA India and SARAO"
diff --git a/skabase/SKASubarray/SKASubarray.py b/src/ska/base/subarray_device.py
similarity index 98%
rename from skabase/SKASubarray/SKASubarray.py
rename to src/ska/base/subarray_device.py
index 3daca3472109a5a08757c1ede2bdfd295baf5e82..1b785c5833126318b97ac125fa986a6dc0ca0ac5 100644
--- a/skabase/SKASubarray/SKASubarray.py
+++ b/src/ska/base/subarray_device.py
@@ -21,13 +21,8 @@ from tango.server import device_property
 from tango import Except, ErrSeverity, DevState
 
 # SKA specific imports
-from skabase import release
-from skabase.control_model import AdminMode, ObsState
-
-file_path = os.path.dirname(os.path.abspath(__file__))
-obs_device_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKAObsDevice"
-sys.path.insert(0, obs_device_path)
-from SKAObsDevice import SKAObsDevice
+from . import SKAObsDevice, release
+from .control_model import AdminMode, ObsState
 # PROTECTED REGION END #    //  SKASubarray.additionnal_imports
 
 __all__ = ["SKASubarray", "main"]
diff --git a/skabase/SKATelState/SKATelState.py b/src/ska/base/tel_state_device.py
similarity index 90%
rename from skabase/SKATelState/SKATelState.py
rename to src/ska/base/tel_state_device.py
index 1a2dd778b533f1516340bfe844a5dd94b563fc09..d9b3b0fd2cb2a60407d95b6d1870c08a23905771 100644
--- a/skabase/SKATelState/SKATelState.py
+++ b/src/ska/base/tel_state_device.py
@@ -17,12 +17,7 @@ import sys
 from tango.server import run, device_property
 
 # SKA specific imports
-from skabase import release
-
-file_path = os.path.dirname(os.path.abspath(__file__))
-basedevice_path = os.path.abspath(os.path.join(file_path, os.pardir)) + "/SKABaseDevice"
-sys.path.insert(0, basedevice_path)
-from SKABaseDevice import SKABaseDevice
+from . import SKABaseDevice, release
 # PROTECTED REGION END #    //  SKATelState.additionnal_imports
 
 __all__ = ["SKATelState", "main"]
diff --git a/skabase/auxiliary/utils.py b/src/ska/base/utils.py
similarity index 99%
rename from skabase/auxiliary/utils.py
rename to src/ska/base/utils.py
index 90e970e6ceb6b8a8c6c5b87e15502500a73a9090..7a5b93d1e002a8c92976ac4c343aceffc1ee8727 100644
--- a/skabase/auxiliary/utils.py
+++ b/src/ska/base/utils.py
@@ -12,10 +12,9 @@ from datetime import datetime
 import tango
 from tango import (DeviceProxy, DbDatum, DbDevInfo, AttrQuality,
                    AttrWriteType, Except, ErrSeverity)
-from tango import DevState 
+from tango import DevState
 from contextlib import contextmanager
-from faults import GroupDefinitionsError
-from faults import SKABaseError
+from .faults import GroupDefinitionsError, SKABaseError
 
 int_types = {tango._tango.CmdArgType.DevUShort,
              tango._tango.CmdArgType.DevLong,
diff --git a/test-harness/Makefile b/test-harness/Makefile
index 156398d266969611162d5a81be9b30dc594db490..dc149f5dcefcd509330e23b0cd17a3f430d6f586 100644
--- a/test-harness/Makefile
+++ b/test-harness/Makefile
@@ -36,7 +36,7 @@ test:
 lint:
 	python3 -m pip install pylint2junit; \
 	mkdir -p /build/reports; \
-	cd /app && pylint --output-format=parseable skabase | tee /build/code_analysis.stdout; \
-	cd /app && pylint --output-format=pylint2junit.JunitReporter skabase > /build/reports/linting.xml;
+	cd /app && pylint --output-format=parseable ska.base | tee /build/code_analysis.stdout; \
+	cd /app && pylint --output-format=pylint2junit.JunitReporter ska.base > /build/reports/linting.xml;
 
 .PHONY: all test lint
diff --git a/skabase/SKAAlarmHandler/test/__init__.py b/tests/__init__.py
similarity index 100%
rename from skabase/SKAAlarmHandler/test/__init__.py
rename to tests/__init__.py
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 0000000000000000000000000000000000000000..ce97603d5261dec15e1c2444afc6b1661b88c958
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,63 @@
+"""
+A module defining a list of fixtures that are shared across all ska.base tests.
+"""
+import importlib
+import pytest
+
+from tango.test_context import DeviceTestContext
+
+
+@pytest.fixture(scope="class")
+def tango_context(request):
+    """Creates and returns a TANGO DeviceTestContext object.
+
+    Parameters
+    ----------
+    request: _pytest.fixtures.SubRequest
+        A request object gives access to the requesting test context.
+    """
+    test_properties = {
+        'SKAMaster': {
+            'SkaLevel': '4',
+            'LoggingTargetsDefault': '',
+            'GroupDefinitions': '',
+            'NrSubarrays': '16',
+            'CapabilityTypes': '',
+            'MaxCapabilities': ['BAND1:1', 'BAND2:1']
+            },
+
+        'SKASubarray': {
+            'CapabilityTypes': 'BAND1',
+            'LoggingTargetsDefault': '',
+            'GroupDefinitions': '',
+            'SkaLevel': '4',
+            'SubID': '1',
+        },
+    }
+
+    # This fixture is used to decorate classes like "TestSKABaseDevice" or
+    # "TestSKALogger". We drop the first "Test" from the string to get the
+    # class name of the device under test.
+    # Similarly, the test module is like "test_base_device.py".  We drop the
+    # first "test_" to get the module name
+    test_class_name = request.cls.__name__
+    class_name = test_class_name.split('Test', 1)[-1]
+    module = importlib.import_module("ska.base", class_name)
+    class_type = getattr(module, class_name)
+
+    tango_context = DeviceTestContext(class_type, properties=test_properties.get(class_name))
+    tango_context.start()
+    yield tango_context
+    tango_context.stop()
+
+
+@pytest.fixture(scope="function")
+def initialize_device(tango_context):
+    """Re-initializes the device.
+
+    Parameters
+    ----------
+    tango_context: tango.test_context.DeviceTestContext
+        Context to run a device without a database.
+    """
+    yield tango_context.device.Init()
diff --git a/skabase/SKAAlarmHandler/test/SKAAlarmHandler_test.py b/tests/test_alarm_handler_device.py
similarity index 98%
rename from skabase/SKAAlarmHandler/test/SKAAlarmHandler_test.py
rename to tests/test_alarm_handler_device.py
index 535f61068113fb17eb3c9d494f5403a438607e89..e82e28c94bea73a4ec669696848032107d9af129 100644
--- a/skabase/SKAAlarmHandler/test/SKAAlarmHandler_test.py
+++ b/tests/test_alarm_handler_device.py
@@ -16,10 +16,6 @@ import os
 import re
 import pytest
 
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKAAlarmHandler.test_additional_imports) ENABLED START #
 # PROTECTED REGION END #    //  SKAAlarmHandler.test_additional_imports
 # Device test case
diff --git a/skabase/SKABaseDevice/test/SKABaseDevice_test.py b/tests/test_base_device.py
similarity index 88%
rename from skabase/SKABaseDevice/test/SKABaseDevice_test.py
rename to tests/test_base_device.py
index 41f600a83caa705c469cac0893057f6b0ca6e6fa..2788d9a456db664302b2443cedf7f6d2d0123812 100644
--- a/skabase/SKABaseDevice/test/SKABaseDevice_test.py
+++ b/tests/test_base_device.py
@@ -14,21 +14,14 @@ import os
 import re
 import pytest
 
-# Imports
-from skabase.SKABaseDevice import SKABaseDevice
-
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKABaseDevice.test_additional_imports) ENABLED START #
 import logging
 from unittest import mock
 from tango import DevFailed, DevState
-from skabase.control_model import (
+from ska.base.control_model import (
     AdminMode, ControlMode, HealthState, LoggingLevel, SimulationMode, TestMode
 )
-from skabase.SKABaseDevice.SKABaseDevice import (
+from ska.base.base_device import (
     LoggingUtils,
     LoggingTargetError,
 )
@@ -289,7 +282,7 @@ class TestSKABaseDevice(object):
         # PROTECTED REGION ID(SKABaseDevice.test_loggingTargets) ENABLED START #
         assert tango_context.device.loggingTargets == tuple()
 
-        with mock.patch("SKABaseDevice.LoggingUtils.create_logging_handler") as mocked_creator:
+        with mock.patch("ska.base.base_device.LoggingUtils.create_logging_handler") as mocked_creator:
 
             def null_creator(target):
                 handler = logging.NullHandler()
@@ -360,26 +353,3 @@ class TestSKABaseDevice(object):
         # PROTECTED REGION ID(SKABaseDevice.test_testMode) ENABLED START #
         assert tango_context.device.testMode == TestMode.NONE
         # PROTECTED REGION END #    //  SKABaseDevice.test_testMode
-
-    # TODO: Fix this test case when "Error in get_name() of tango.DeviceImpl while using pytest" is resolved.
-    # def test_get_device_commands(self, tango_context):
-        # Test the get_device_commands method
-        # commands = SKABaseDevice.get_device_commands(SKABaseDevice)
-        #assert commands == [{'parameters': [], 'name': 'GetVersionInfo', 'component_type': 'nodb', 'component_id': 'skabasedevice'}, {'parameters': [], 'name': 'Init', 'component_type': 'nodb', 'component_id': 'skabasedevice'}, {'parameters': [], 'name': 'Reset', 'component_type': 'nodb', 'component_id': 'skabasedevice'}, {'parameters': [], 'name': 'State', 'component_type': 'nodb', 'component_id': 'skabasedevice'}, {'parameters': [], 'name': 'Status', 'component_type': 'nodb', 'component_id': 'skabasedevice'}]
-
-    # TODO: Fix this test case when "Error in get_name() of tango.DeviceImpl while using pytest" is resolved.
-    # def test_get_device_attributes(self, tango_context):
-    #     # Test the get_device_attributes method
-    #     attributes = SKABaseDevice.get_device_attributes(SKABaseDevice)
-    #     assert attributes == 1
-
-    def test__parse_argin(self, tango_context):
-        result = SKABaseDevice._parse_argin(SKABaseDevice, '{"class": "SKABaseDevice"}')
-        assert result == {'class': 'SKABaseDevice'}
-
-    def test__parse_argin_with_required(self, tango_context):
-        SKABaseDevice._parse_argin(
-            SKABaseDevice, '{"class":"SKABaseDevice"}', required=['class'])
-        with pytest.raises(Exception):
-            SKABaseDevice._parse_argin(
-                SKABaseDevice, '{"class":"SKABaseDevice"}', required=['missing'])
diff --git a/skabase/SKACapability/test/SKACapability_test.py b/tests/test_capability_device.py
similarity index 98%
rename from skabase/SKACapability/test/SKACapability_test.py
rename to tests/test_capability_device.py
index 1dd2f62cd81997c12d3fc61c48f0b7ca72a0c8b0..1f75b9beab08dfe04be1ddabe2b8581cd2adac78 100644
--- a/skabase/SKACapability/test/SKACapability_test.py
+++ b/tests/test_capability_device.py
@@ -16,10 +16,6 @@ import os
 import re
 import pytest
 
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKACapability.test_additional_imports) ENABLED START #
 # PROTECTED REGION END #    //  SKACapability.test_additional_imports
 # Device test case
diff --git a/skabase/SKALogger/test/SKALogger_test.py b/tests/test_logger_device.py
similarity index 97%
rename from skabase/SKALogger/test/SKALogger_test.py
rename to tests/test_logger_device.py
index 1e44f5224b02eefd31f2877038b2fd415215e662..cf794703480598836fed7a1a5708fdd3607fd8c6 100644
--- a/skabase/SKALogger/test/SKALogger_test.py
+++ b/tests/test_logger_device.py
@@ -19,12 +19,8 @@ from tango import DevState, DeviceProxy
 
 import tango
 
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKALogger.test_additional_imports) ENABLED START #
-from skabase.control_model import (
+from ska.base.control_model import (
     AdminMode, ControlMode, HealthState, LoggingLevel, SimulationMode, TestMode
 )
 # PROTECTED REGION END #    //  SKALogger.test_additional_imports
@@ -72,7 +68,7 @@ class TestSKALogger(object):
     @pytest.mark.parametrize("logging_level", [int(tango.LogLevel.LOG_ERROR)])
     @pytest.mark.parametrize("logging_target", ["logger/test/1"])
     # PROTECTED REGION END #    //  SKALogger.test_SetLoggingLevel_decorators
-    def test_SetLoggingLevel(self, tango_context, setup_log_test_device,
+    def test_SetLoggingLevel(self, tango_context,
                              logging_level, logging_target):
         """Test for SetLoggingLevel"""
         # PROTECTED REGION ID(SKALogger.test_SetLoggingLevel) ENABLED START #
diff --git a/skabase/SKAMaster/test/SKAMaster_test.py b/tests/test_master_device.py
similarity index 98%
rename from skabase/SKAMaster/test/SKAMaster_test.py
rename to tests/test_master_device.py
index f55c628ad59002be09fdc5d51805b3068d79590c..a3c4584f291539d661e8fac7ad40a86878588ace 100644
--- a/skabase/SKAMaster/test/SKAMaster_test.py
+++ b/tests/test_master_device.py
@@ -17,12 +17,8 @@ import re
 import pytest
 from tango import DevState
 
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKAMaster.test_additional_imports) ENABLED START #
-from skabase.control_model import AdminMode, ControlMode, HealthState, SimulationMode, TestMode
+from ska.base.control_model import AdminMode, ControlMode, HealthState, SimulationMode, TestMode
 # PROTECTED REGION END #    //  SKAMaster.test_additional_imports
 # Device test case
 # PROTECTED REGION ID(SKAMaster.test_SKAMaster_decorators) ENABLED START #
diff --git a/skabase/SKAObsDevice/test/SKAObsDevice_test.py b/tests/test_obs_device.py
similarity index 98%
rename from skabase/SKAObsDevice/test/SKAObsDevice_test.py
rename to tests/test_obs_device.py
index bb90cf4eb02f5182dcb5435a691a931358197ff1..2b36c09e45bd9fb6ad0f52c900703cea5e5c0f36 100644
--- a/skabase/SKAObsDevice/test/SKAObsDevice_test.py
+++ b/tests/test_obs_device.py
@@ -17,12 +17,8 @@ import re
 import pytest
 from tango import DevState
 
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKAObsDevice.test_additional_imports) ENABLED START #
-from skabase.control_model import (
+from ska.base.control_model import (
     AdminMode, ControlMode, HealthState, ObsMode, ObsState, SimulationMode, TestMode
 )
 # PROTECTED REGION END #    //  SKAObsDevice.test_additional_imports
diff --git a/skabase/SKASubarray/test/SKASubarray_test.py b/tests/test_subarray_device.py
similarity index 99%
rename from skabase/SKASubarray/test/SKASubarray_test.py
rename to tests/test_subarray_device.py
index dc8d0c7372ed7dbdef199da8ea93f17bdaeab4e1..9376dabd29ee1e5af86917ef69cf41e16eacd05b 100644
--- a/skabase/SKASubarray/test/SKASubarray_test.py
+++ b/tests/test_subarray_device.py
@@ -17,12 +17,8 @@ import re
 import pytest
 from tango import DevState, DevSource
 
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKASubarray.test_additional_imports) ENABLED START #
-from skabase.control_model import (
+from ska.base.control_model import (
     AdminMode, ControlMode, HealthState, ObsMode, ObsState, SimulationMode, TestMode
 )
 # PROTECTED REGION END #    //  SKASubarray.test_additional_imports
diff --git a/skabase/SKATelState/test/SKATelState_test.py b/tests/test_tel_state_device.py
similarity index 97%
rename from skabase/SKATelState/test/SKATelState_test.py
rename to tests/test_tel_state_device.py
index dfdf95bad7c526f4a28bf12af34e5fadac4dcf53..5b696b0b0664aa55f99ec18478f5010870dfefd1 100644
--- a/skabase/SKATelState/test/SKATelState_test.py
+++ b/tests/test_tel_state_device.py
@@ -17,12 +17,8 @@ import re
 import pytest
 from tango import DevState
 
-# Path
-path = os.path.join(os.path.dirname(__file__), os.pardir)
-sys.path.insert(0, os.path.abspath(path))
-
 # PROTECTED REGION ID(SKATelState.test_additional_imports) ENABLED START #
-from skabase.control_model import AdminMode, ControlMode, HealthState, SimulationMode, TestMode
+from ska.base.control_model import AdminMode, ControlMode, HealthState, SimulationMode, TestMode
 # PROTECTED REGION END #    //  SKATelState.test_additional_imports
 # Device test case
 # PROTECTED REGION ID(SKATelState.test_SKATelState_decorators) ENABLED START #
diff --git a/skabase/tests/test_utils.py b/tests/test_utils.py
similarity index 99%
rename from skabase/tests/test_utils.py
rename to tests/test_utils.py
index 4c1967ccd5273124c284c06089a1d2c136c8cbbe..c12e38fa537d54b8124b3fa0d74b6971e2b4cc71 100644
--- a/skabase/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -2,7 +2,7 @@
 import json
 import pytest
 
-from skabase.auxiliary.utils import (
+from ska.base.utils import (
     get_groups_from_json,
     get_tango_device_type_id,
     GroupDefinitionsError,
@@ -208,4 +208,3 @@ def test_get_tango_device_type_id():
     device_name = "domain/family/member"
     result = get_tango_device_type_id(device_name)
     assert result == ["family", "member"]
-    
\ No newline at end of file