diff --git a/set_env.sh b/set_env.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f8d932c46b0ae7b8c17fd9d1427f88f51c8e3abe
--- /dev/null
+++ b/set_env.sh
@@ -0,0 +1,42 @@
+#-----------------------------------------------------------------------------
+# SoC Labs Environment Setup Script
+# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+#
+# Contributors
+#
+# David Mapstone (d.a.mapstone@soton.ac.uk)
+#
+# Copyright  2023, SoC Labs (www.soclabs.org)
+#-----------------------------------------------------------------------------
+#!/bin/bash
+
+# Get Root Location of Repository
+if [ -z $DESIGN_ROOT ]; then
+    # If $DESIGN_ROOT hasn't been set yet
+    DESIGN_ROOT=`git rev-parse --show-superproject-working-tree`
+    if [ -z $DESIGN_ROOT ]; then
+        # If not in a submodule
+        DESIGN_ROOT=`git rev-parse --show-toplevel`
+    fi
+fi
+
+# Set Environment Variable for this Repository
+export SHA_2_ACC_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+
+# If this Repo is root of workspace
+if [ $SHA_2_ACC_DIR = $DESIGN_ROOT ]; then
+    echo "Design Workspace: $SHA_2_ACC_DIR"
+    export DESIGN_ROOT
+else 
+    source $DESIGN_ROOT/set_env.sh
+fi
+
+# Source environment variables for all submodules
+for d in $SHA_2_ACC_DIR/* ; do
+    if [ -f "$d/.git" ]; then
+        if [ -f "$d/set_env.sh" ]; then
+        # If .git file exists - submodule
+            source $d/set_env.sh
+        fi
+    fi
+done
\ No newline at end of file
diff --git a/sourceme b/sourceme
deleted file mode 100755
index febef30dcc12f5c0ed02e22352ff1d3162e2ac20..0000000000000000000000000000000000000000
--- a/sourceme
+++ /dev/null
@@ -1,44 +0,0 @@
-#-----------------------------------------------------------------------------
-# SoC Labs Environment Setup Script
-# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
-#
-# Contributors
-#
-# David Mapstone (d.a.mapstone@soton.ac.uk)
-#
-# Copyright  2022, SoC Labs (www.soclabs.org)
-#-----------------------------------------------------------------------------
-
-#!/usr/bin/env bash
-
-if [ -z "$SHA_2_ACC_DIR" ]; then
-    # Set environment Variables for Repository
-    export SHA_2_ACC_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
-
-    if [ -z "$SOC_ENV_SET" ]; then
-        # Add flow directory to Path
-        export PATH=$PATH:$SHA_2_ACC_DIR/flow
-
-        # Set Default Simulator
-        export SIMULATOR="ivlog"
-
-        # Set Top-level Directory
-        export SOC_TOP=$SHA_2_ACC_DIR
-
-        # Set flag to say this is top level repo
-        export SOC_ENV_SET="True"
-
-        # Source Top-level sourceme
-        for d in $WRAP_ACC_DIR/../* ; do
-            if [ -d "$d" ]; then
-                if test -f "$d/sourceme"; then
-                    source $d/sourceme
-                fi
-            fi
-        done
-
-        # Clear SOC_ENV_SET Variable
-        unset SOC_ENV_SET
-    fi
-fi
-