diff --git a/.circleci/config.yml b/.circleci/config.yml
index 7994d6d..d5ff7d6 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -87,11 +87,46 @@
           command: |
             source emsdk_env.sh
             python scripts/test.py
+
+      - run:
+          name: flagless (process/shell) test
+          shell: powershell.exe
+          command: |
+            scripts/test_activation.ps1
+
       - run:
           name: --permanent test
           shell: powershell.exe
           command: |
-            scripts/test_permanent.ps1
+            $env:PERMANENT_FLAG="--permanent"
+            scripts/test_activation.ps1
+
+      - run:
+          name: --system test
+          shell: powershell.exe
+          command: |
+            $env:SYSTEM_FLAG="--system"
+            scripts/test_activation.ps1
+
+      - run:
+          name: Process/Shell PATH preservation test
+          shell: powershell.exe
+          command: |
+            scripts/test_path_preservation.ps1
+
+      - run:
+          name: User PATH preservation test
+          shell: powershell.exe
+          command: |
+            $env:PERMANENT_FLAG="--permanent"
+            scripts/test_path_preservation.ps1
+
+      - run:
+          name: System PATH preservation test
+          shell: powershell.exe
+          command: |
+            $env:SYSTEM_FLAG="--system"
+            scripts/test_path_preservation.ps1
 
   build-docker-image:
     executor: bionic
diff --git a/emsdk.py b/emsdk.py
index 5032244..1e33b94 100644
--- a/emsdk.py
+++ b/emsdk.py
@@ -322,7 +322,10 @@
       folder.Close()
 
 
-def win_get_environment_variable(key, system=True, fallback=True):
+def win_get_environment_variable(key, system=True, user=True, fallback=True):
+  if (not system and not user and fallback):
+    # if no --system or --permanent flag is provided use shell's value
+    return os.environ[key]
   try:
     folder = None
     try:
@@ -355,21 +358,9 @@
   return value
 
 
-def win_environment_variable_exists(key, system=True):
-  value = win_get_environment_variable(key, system)
-  return value is not None and len(value) > 0
-
-
-def win_get_active_environment_variable(key):
-  value = win_get_environment_variable(key, False)
-  if value is not None:
-    return value
-  return win_get_environment_variable(key, True)
-
-
-def win_set_environment_variable(key, value, system=True):
+def win_set_environment_variable(key, value, system, user):
   debug_print('set ' + str(key) + '=' + str(value) + ', in system=' + str(system), file=sys.stderr)
-  previous_value = win_get_environment_variable(key, system, fallback=False)
+  previous_value = win_get_environment_variable(key, system=system, user=user)
   if previous_value == value:
     debug_print('  no need to set, since same value already exists.')
     # No need to elevate UAC for nothing to set the same value, skip.
@@ -409,14 +400,14 @@
   return False
 
 
-def win_set_environment_variables(env_vars_to_add, system):
+def win_set_environment_variables(env_vars_to_add, system, user):
   if not env_vars_to_add:
     return
 
   changed = False
 
   for key, value in env_vars_to_add:
-    if win_set_environment_variable(key, value, system):
+    if win_set_environment_variable(key, value, system, user):
       if not changed:
         changed = True
         print('Setting global environment variables:')
@@ -443,9 +434,9 @@
     errlog('SendMessageTimeout failed with error: ' + str(e))
 
 
-def win_delete_environment_variable(key, system=True):
+def win_delete_environment_variable(key, system=True, user=True):
   debug_print('win_delete_environment_variable(key=' + key + ', system=' + str(system) + ')')
-  return win_set_environment_variable(key, None, system)
+  return win_set_environment_variable(key, None, system, user)
 
 
 # Returns the absolute pathname to the given path inside the Emscripten SDK.
@@ -2449,12 +2440,12 @@
   if WINDOWS:
     # always set local environment variables since permanently activating will only set the registry settings and
     # will not affect the current session
-    env_vars_to_add = get_env_vars_to_add(tools_to_activate)
+    env_vars_to_add = get_env_vars_to_add(tools_to_activate, system, user=permanently_activate)
     env_string = construct_env_with_vars(env_vars_to_add)
     write_set_env_script(env_string)
 
     if permanently_activate:
-      win_set_environment_variables(env_vars_to_add, system)
+      win_set_environment_variables(env_vars_to_add, system, user=permanently_activate)
 
   return tools_to_activate
 
@@ -2500,23 +2491,34 @@
 
 # Looks at the current PATH and adds and removes entries so that the PATH reflects
 # the set of given active tools.
-def adjusted_path(tools_to_activate, system=False):
+def adjusted_path(tools_to_activate, system=False, user=False):
   # These directories should be added to PATH
   path_add = get_required_path(tools_to_activate)
   # These already exist.
   if WINDOWS and not MSYS:
-    existing_path = win_get_environment_variable('PATH', system=system).split(ENVPATH_SEPARATOR)
+    existing_path = win_get_environment_variable('PATH', system=system, user=user, fallback=True).split(ENVPATH_SEPARATOR)
   else:
     existing_path = os.environ['PATH'].split(ENVPATH_SEPARATOR)
   emsdk_root_path = to_unix_path(emsdk_path())
 
-  existing_emsdk_tools = [i for i in existing_path if to_unix_path(i).startswith(emsdk_root_path)]
-  new_emsdk_tools = [i for i in path_add if not normalized_contains(existing_emsdk_tools, i)]
+  existing_emsdk_tools = []
+  existing_nonemsdk_path = []
+  for entry in existing_path:
+    if to_unix_path(entry).startswith(emsdk_root_path):
+      existing_emsdk_tools.append(entry)
+    else:
+      existing_nonemsdk_path.append(entry)
 
-  # Existing non-emsdk tools
-  existing_path = [i for i in existing_path if not to_unix_path(i).startswith(emsdk_root_path)]
-  new_path = [i for i in path_add if not normalized_contains(existing_path, i)]
-  whole_path = unique_items(new_path + existing_path)
+  new_emsdk_tools = []
+  kept_emsdk_tools = []
+  for entry in path_add:
+    if not normalized_contains(existing_emsdk_tools, entry):
+      new_emsdk_tools.append(entry)
+    else:
+      kept_emsdk_tools.append(entry)
+
+  whole_path = unique_items(new_emsdk_tools + kept_emsdk_tools + existing_nonemsdk_path)
+
   if MSYS:
     # XXX Hack: If running native Windows Python in MSYS prompt where PATH
     # entries look like "/c/Windows/System32", os.environ['PATH']
@@ -2529,10 +2531,10 @@
   return (separator.join(whole_path), new_emsdk_tools)
 
 
-def get_env_vars_to_add(tools_to_activate):
+def get_env_vars_to_add(tools_to_activate, system, user):
   env_vars_to_add = []
 
-  newpath, added_path = adjusted_path(tools_to_activate)
+  newpath, added_path = adjusted_path(tools_to_activate, system, user)
 
   # Don't bother setting the path if there are no changes.
   if os.environ['PATH'] != newpath:
@@ -2564,8 +2566,8 @@
   return env_vars_to_add
 
 
-def construct_env(tools_to_activate):
-  return construct_env_with_vars(get_env_vars_to_add(tools_to_activate))
+def construct_env(tools_to_activate, system, user):
+  return construct_env_with_vars(get_env_vars_to_add(tools_to_activate, system, user))
 
 
 def construct_env_with_vars(env_vars_to_add):
@@ -2978,7 +2980,7 @@
     # to write out the new one.
     tools_to_activate = currently_active_tools()
     tools_to_activate = process_tool_list(tools_to_activate, log_errors=True)
-    env_string = construct_env(tools_to_activate)
+    env_string = construct_env(tools_to_activate, arg_system, arg_permanent)
     if WINDOWS and not BASH:
       write_set_env_script(env_string)
     else:
diff --git a/scripts/test_activation.ps1 b/scripts/test_activation.ps1
new file mode 100644
index 0000000..98ebada
--- /dev/null
+++ b/scripts/test_activation.ps1
@@ -0,0 +1,122 @@
+# This test installs emsdk and activates the latest toolchain using `--system` or `--permanent` flags,
+# and checks if the environment variables and PATH are correctly updated. Set $env:SYSTEM_FLAG and $env:PERMANENT_FLAG to test each.
+# If no flag is provided the process/shell values are tested. See the CI file for an example.
+
+refreshenv
+
+$repo_root = [System.IO.Path]::GetDirectoryName((resolve-path "$PSScriptRoot"))
+
+$PATH_USER_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "User")
+$PATH_MACHINE_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
+$PATH_Process_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Process")
+
+
+try {
+
+    & "$repo_root/emsdk.ps1" install latest
+
+    $esc = '--%'
+    & "$repo_root/emsdk.ps1" activate latest $esc $env:PERMANENT_FLAG $env:SYSTEM_FLAG
+
+    if ($env:SYSTEM_FLAG) {
+        $env_type = "Machine"
+    }
+    elseif ($env:PERMANENT_FLAG) {
+        $env_type = "User"
+    } else {
+        $env_type = "Process"
+    }
+
+    $EMSDK = [System.Environment]::GetEnvironmentVariable("EMSDK", $env_type)
+    $EM_CONFIG = [System.Environment]::GetEnvironmentVariable("EM_CONFIG", $env_type)
+    $EMSDK_NODE = [System.Environment]::GetEnvironmentVariable("EMSDK_NODE", $env_type)
+    $EMSDK_PYTHON = [System.Environment]::GetEnvironmentVariable("EMSDK_PYTHON", $env_type)
+    $JAVA_HOME = [System.Environment]::GetEnvironmentVariable("JAVA_HOME", $env_type)
+    $EM_CACHE = [System.Environment]::GetEnvironmentVariable("EM_CACHE", $env_type)
+    $PATH = [System.Environment]::GetEnvironmentVariable("PATH", $env_type)
+
+    if (!$EMSDK) {
+        throw "EMSDK is not set for the user"
+    }
+    if (!$EM_CONFIG) {
+        throw "EM_CONFIG is not set for the user"
+    }
+    if (!$EMSDK_NODE) {
+        throw "EMSDK_NODE is not set for the user"
+    }
+    if (!$JAVA_HOME) {
+        throw "JAVA_HOME is not set for the user"
+    }
+    if (!$EMSDK_PYTHON) {
+        throw "EMSDK_PYTHON is not set for the user"
+    }
+    if (!$EM_CACHE) {
+        throw "EM_CACHE is not set for the user"
+    }
+
+
+    $path_split = $PATH.Split(';')
+
+    $EMSDK_Path = $path_split | Where-Object { $_ -like "$repo_root*" }
+    if (!$EMSDK_Path) {
+        throw "No path is added!"
+    }
+    $EMSDK_NODE_Path = $path_split | Where-Object { $_ -like "$repo_root\node*" }
+    if (!$EMSDK_NODE_Path) {
+        throw "$repo_root\\node is not added to path."
+    }
+    $EMSDK_PYTHON_Path = $path_split | Where-Object { $_ -like "$repo_root\python*" }
+    if (!$EMSDK_PYTHON_Path) {
+        throw "$repo_root\\python is not added to path."
+    }
+    $EMSDK_JAVA_Path = $path_split | Where-Object { $_ -like "$repo_root\java*" }
+    if (!$EMSDK_JAVA_Path) {
+        throw "$repo_root\\java is not added to path."
+    }
+
+    $EMSDK_UPSTREAM_Path = $path_split | Where-Object { $_ -like "$repo_root\upstream\emscripten*" }
+    if (!$EMSDK_UPSTREAM_Path) {
+        throw "$repo_root\\upstream\emscripten is not added to path."
+    }
+
+
+}
+finally {
+    # Recover pre-split PATH
+    refreshenv
+
+    [Environment]::SetEnvironmentVariable("Path", $PATH_USER_BEFORE, "User")
+    try {
+        [Environment]::SetEnvironmentVariable("Path", $PATH_MACHINE_BEFORE, "Machine")
+    }
+    catch {}
+
+    [Environment]::SetEnvironmentVariable("Path", $PATH_Process_BEFORE, "Process")
+
+    # Recover pre activation env variables
+    [Environment]::SetEnvironmentVariable("EMSDK", $null, "User")
+    [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "User")
+    [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "User")
+    [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "User")
+    [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "User")
+    [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "User")
+
+    try {
+        [Environment]::SetEnvironmentVariable("EMSDK", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "Machine")
+    } catch {}
+
+
+    [Environment]::SetEnvironmentVariable("EMSDK", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Process")
+    [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "Process")
+
+    refreshenv
+}
diff --git a/scripts/test_path_preservation.ps1 b/scripts/test_path_preservation.ps1
new file mode 100644
index 0000000..79a42d9
--- /dev/null
+++ b/scripts/test_path_preservation.ps1
@@ -0,0 +1,151 @@
+# This test installs emsdk and activates the latest toolchain using `--system` or `--permanent` flags,
+# and checks if parts of PATH are lost or overwritten. Set $env:SYSTEM_FLAG and $env:PERMANENT_FLAG to test each.
+# If no flag is provided the process/shell values are tested. See the CI file for an example.
+
+refreshenv
+
+$repo_root = [System.IO.Path]::GetDirectoryName((resolve-path "$PSScriptRoot"))
+
+$PATH_USER_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "User")
+$PATH_MACHINE_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
+$PATH_Process_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Process")
+
+try {
+
+
+    & "$repo_root/emsdk.ps1" install latest
+
+    $esc = '--%'
+    & "$repo_root/emsdk.ps1" activate latest $esc $env:PERMANENT_FLAG $env:SYSTEM_FLAG
+
+    $PATH_USER = [System.Environment]::GetEnvironmentVariable("PATH", "User")
+    $PATH_MACHINE = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
+    $PATH_Process = [System.Environment]::GetEnvironmentVariable("PATH", "Process")
+
+    if ($env:SYSTEM_FLAG) {
+        echo "--system test............................."
+        $path_before_arr = $PATH_MACHINE_BEFORE.Split(';')
+        $path_arr = $PATH_MACHINE.Split(';')
+    }
+    elseif ($env:PERMANENT_FLAG) {
+        echo "--permanent test.........................."
+        $path_before_arr = $PATH_USER_BEFORE.Split(';')
+        $path_arr = $PATH_USER.Split(';')
+    } else {
+        echo "no flag test (shell/process).............."
+        $path_before_arr = $PATH_Process_BEFORE.Split(';')
+        $path_arr = $PATH_Process.Split(';')
+    }
+
+
+    $EMSDK_Path = $path_arr | Where-Object { $_ -like "$repo_root*" }
+    $EMSDK_NODE_Path = $path_arr | Where-Object { $_ -like "$repo_root\node*" }
+    $EMSDK_PYTHON_Path = $path_arr | Where-Object { $_ -like "$repo_root\python*" }
+    $EMSDK_JAVA_Path = $path_arr | Where-Object { $_ -like "$repo_root\java*" }
+    $EMSDK_UPSTREAM_Path = $path_arr | Where-Object { $_ -like "$repo_root\upstream\emscripten*" }
+
+    $number_of_items = $path_arr.count
+    [System.Collections.ArrayList]$rest_of_path = @()
+    Foreach ($item in $path_arr) {
+        if (
+            ($item -like "$repo_root*") -or
+            ($item -like "$repo_root\node*") -or
+            ($item -like "$repo_root\python*") -or
+            ($item -like "$repo_root\java*") -or
+            ($item -like "$repo_root\upstream\emscripten*")
+        ) {
+            echo "$item is on the PATH"
+        }
+        else {
+            $rest_of_path.add($item) | Out-Null
+        }
+    }
+
+    # compare the PATHs before activation and after activation
+    if (Compare-Object -ReferenceObject $path_before_arr -DifferenceObject $rest_of_path ) {
+        echo "Old path is ............................."
+        echo $path_before_arr
+        echo "Current rest of path is ................."
+        echo $rest_of_path
+        throw "some parts of PATH are removed"
+    }
+
+    # Compare the other untouched PATH
+    if ($env:SYSTEM_FLAG) {
+        if (Compare-Object -ReferenceObject $PATH_USER_BEFORE.Split(';') -DifferenceObject $PATH_USER.Split(';') ) {
+            echo "Old user path is ...................."
+            echo $PATH_USER_BEFORE
+            echo "Current user path is ................"
+            echo $PATH_USER
+            throw "User PATH are changed while --system had been provided"
+        }
+    }
+    elseif ($env:PERMANENT_FLAG) {
+        if (Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';') ) {
+            echo "Old machine path is.................."
+            echo $PATH_MACHINE_BEFORE
+            echo "Current machine path is.............."
+            echo $PATH_MACHINE
+            throw "MACHINE PATH are changed while --system was not provided"
+        }
+    } else {
+        if (
+            (Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';')) -or
+            (Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';'))
+        ) {
+            echo "Old machine path is.................."
+            echo $PATH_MACHINE_BEFORE
+            echo "Current machine path is.............."
+            echo $PATH_MACHINE
+            echo "Old user path is ...................."
+            echo $PATH_USER_BEFORE
+            echo "Current user path is ................"
+            echo $PATH_USER
+            throw "MACHINE/USER PATH are changed while no flag was provided"
+        }
+    }
+
+
+
+
+}
+finally {
+    # Recover pre-split PATH
+    refreshenv
+
+    [Environment]::SetEnvironmentVariable("Path", $PATH_USER_BEFORE, "User")
+    try {
+        [Environment]::SetEnvironmentVariable("Path", $PATH_MACHINE_BEFORE, "Machine")
+    }
+    catch {}
+
+    [Environment]::SetEnvironmentVariable("Path", $PATH_Process_BEFORE, "Process")
+
+    # Recover pre activation env variables
+    [Environment]::SetEnvironmentVariable("EMSDK", $null, "User")
+    [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "User")
+    [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "User")
+    [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "User")
+    [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "User")
+    [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "User")
+
+    try {
+        [Environment]::SetEnvironmentVariable("EMSDK", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Machine")
+        [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "Machine")
+    } catch {}
+
+
+    [Environment]::SetEnvironmentVariable("EMSDK", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Process")
+    [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Process")
+    [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "Process")
+
+    refreshenv
+
+}
diff --git a/scripts/test_permanent.ps1 b/scripts/test_permanent.ps1
deleted file mode 100644
index 4c9da19..0000000
--- a/scripts/test_permanent.ps1
+++ /dev/null
@@ -1,56 +0,0 @@
-$repo_root = [System.IO.Path]::GetDirectoryName((resolve-path "$PSScriptRoot"))
-
-& "$repo_root/emsdk.ps1" install latest
-& "$repo_root/emsdk.ps1" activate latest --permanent
-
-$EMSDK_USER = [System.Environment]::GetEnvironmentVariable("EMSDK", "User")
-$EM_CONFIG_USER = [System.Environment]::GetEnvironmentVariable("EM_CONFIG", "User")
-$EMSDK_NODE_USER = [System.Environment]::GetEnvironmentVariable("EMSDK_NODE", "User")
-$EMSDK_PYTHON_USER = [System.Environment]::GetEnvironmentVariable("EMSDK_PYTHON", "User")
-$JAVA_HOME_USER = [System.Environment]::GetEnvironmentVariable("JAVA_HOME", "User")
-$EM_CACHE_USER = [System.Environment]::GetEnvironmentVariable("EM_CACHE", "User")
-$PATH_USER = [System.Environment]::GetEnvironmentVariable("PATH", "User")
-
-if (!$EMSDK_USER) {
-    throw "EMSDK is not set for the user"
-}
-if (!$EM_CONFIG_USER) {
-    throw "EM_CONFIG_USER is not set for the user"
-}
-if (!$EMSDK_NODE_USER) {
-    throw "EMSDK_NODE is not set for the user"
-}
-if (!$JAVA_HOME_USER) {
-    throw "JAVA_HOME is not set for the user"
-}
-if (!$EMSDK_PYTHON_USER) {
-    throw "EMSDK_PYTHON is not set for the user"
-}
-if (!$EM_CACHE_USER) {
-    throw "EM_CACHE is not set for the user"
-}
-
-
-$path_split = $PATH_USER.Split(';')
-
-$EMSDK_Path_USER = $path_split | Where-Object { $_ -like "$repo_root*" }
-if (!$EMSDK_Path_USER) {
-    throw "No path is added!"
-}
-$EMSDK_NODE_Path_USER = $path_split | Where-Object { $_ -like "$repo_root\node*" }
-if (!$EMSDK_NODE_Path_USER) {
-    throw "$repo_root\\node is not added to path."
-}
-$EMSDK_PYTHON_Path_USER = $path_split | Where-Object { $_ -like "$repo_root\python*" }
-if (!$EMSDK_PYTHON_Path_USER) {
-    throw "$repo_root\\python is not added to path."
-}
-$EMSDK_JAVA_Path_USER = $path_split | Where-Object { $_ -like "$repo_root\java*" }
-if (!$EMSDK_JAVA_Path_USER) {
-    throw "$repo_root\\java is not added to path."
-}
-
-$EMSDK_UPSTREAM_Path_USER = $path_split | Where-Object { $_ -like "$repo_root\upstream\emscripten*" }
-if (!$EMSDK_UPSTREAM_Path_USER) {
-    throw "$repo_root\\upstream\emscripten is not added to path."
-}
