diff --git a/CMakeLists.txt b/CMakeLists.txt
index 518baf442fc0a576a2d237ca1939f062366868da..db1a9ac10f9ca84510dfab249b5fa87b3c0d4fd1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,6 +59,12 @@ IF(${CMAKE_CXX_STANDARD} LESS 14)
   MESSAGE(FATAL_ERROR "DD4hep requires at least CXX Standard 14 to compile")
 ENDIF()
 
+# ----for APPLE scripts have to set the DYLD_LIBRARY_PATH
+if(APPLE)
+  set(USE_DYLD 1)
+  set(CMAKE_MACOSX_RPATH 1)
+endif()
+
 ###############################
 # Define DD4hep build options #
 ###############################
diff --git a/cmake/thisdd4hep.sh b/cmake/thisdd4hep.sh
index 2172d81e85211fd80397d7b2c9f5c48847f880d6..f303868c4bb820cc2fd24b08858b46bad953ee2d 100644
--- a/cmake/thisdd4hep.sh
+++ b/cmake/thisdd4hep.sh
@@ -27,40 +27,36 @@ dd4hep_parse_this()   {
         thisroot=$(dirname ${SOURCE})
         THIS=$(cd ${thisroot}/.. > /dev/null;pwd); export THIS
     fi
+    unset SOURCE package thisroot
 }
 #-----------------------------------------------------------------------------
 dd4hep_add_path()   {
-    path_name=${1};
-    path_prefix=${2};
-    eval path_value=\$$path_name;
+    path_name=${1}
+    path_prefix=${2}
+    eval path_value=\$$path_name
     if [ "${path_value}" ]; then
-	path_value=${path_prefix}:"${path_value}";
+        # Prevent duplicates
+        if ! echo ${path_value} | tr : '\n' | grep -q "^${path_prefix}$"; then
+            path_value="${path_prefix}:${path_value}"
+        fi
     else
-	path_value=${path_prefix};
+	path_value="${path_prefix}"
     fi; 
-    eval export ${path_name}="${path_value}";
+    eval export ${path_name}='${path_value}'
+    unset path_name path_prefix path_value
 }
 #-----------------------------------------------------------------------------
 dd4hep_add_library_path()    {
-    path_prefix=${1};
-    if [ @APPLE@ ];
-    then
-        if [ ${DYLD_LIBRARY_PATH} ]; then
-            export DYLD_LIBRARY_PATH=${path_prefix}:$DYLD_LIBRARY_PATH;
-            export LD_LIBRARY_PATH=${path_prefix}:$LD_LIBRARY_PATH;
-            export DD4HEP_LIBRARY_PATH=${path_prefix}:$DD4HEP_LIBRARY_PATH;
-        else
-            export DYLD_LIBRARY_PATH=${path_prefix};
-            export LD_LIBRARY_PATH=${path_prefix};
-            export DD4HEP_LIBRARY_PATH=${path_prefix};
-        fi;
+    p=${1};
+    if [ @APPLE@ ]; then
+        # Do not prepend system library locations on macOS. Stuff will break.
+        [[ "$p" = "/usr/lib" || "$p" = "/usr/local/lib" ]] && unset p && return
+        dd4hep_add_path DYLD_LIBRARY_PATH     "$p"
+        dd4hep_add_path DD4HEP_LIBRARY_PATH   "$p"
     else
-        if [ ${LD_LIBRARY_PATH} ]; then
-	    export LD_LIBRARY_PATH=${path_prefix}:$LD_LIBRARY_PATH;
-        else
-	    export LD_LIBRARY_PATH=${path_prefix};
-        fi;
-    fi;
+        dd4hep_add_path LD_LIBRARY_PATH       "$p"
+    fi
+    unset p
 }
 #-----------------------------------------------------------------------------
 #
@@ -131,4 +127,5 @@ fi;
 #
 unset ROOTENV_INIT;
 unset THIS;
+unset SOURCE;
 #-----------------------------------------------------------------------------
diff --git a/cmake/thisdd4hep_only.sh b/cmake/thisdd4hep_only.sh
index 844bb8f0ac7a9593748f50b7c85c97242844f564..a3f79bd11623d2e9347bf1b379ade33f0fb66e43 100644
--- a/cmake/thisdd4hep_only.sh
+++ b/cmake/thisdd4hep_only.sh
@@ -12,53 +12,62 @@
 #
 #-----------------------------------------------------------------------------
 dd4hep_parse_this()   {
+    SOURCE=${1}
     package=${2};
-    if [ "x${1}" = "x" ]; then
-	if [ ! -f bin/this${package}_only.sh ]; then
-            echo ERROR: must "cd where/${package}/is" before calling ". bin/this${package}_only.sh" for this version of bash!;
-            return 1;
-	fi
-	THIS="${PWD}";
+    if [ "x${SOURCE}" = "x" ]; then
+        if [ -f bin/this${package}_only.sh ]; then
+            THIS="$PWD"; export THIS
+        elif [ -f ./this${package}_only.sh ]; then
+            THIS=$(cd ..  > /dev/null; pwd); export THIS
+        else
+            echo ERROR: must "cd where/${package}/is" before calling ". bin/this${package}_only.sh" for this version of bash!
+            THIS=; export THIS
+            return 1
+        fi
     else
-	THIS=$(dirname $(dirname ${1}));
-    fi;
-    THIS=$(cd ${THIS} > /dev/null; pwd);
+        # get param to "."
+        thisroot=$(dirname ${SOURCE})
+        THIS=$(cd ${thisroot}/.. > /dev/null;pwd); export THIS
+    fi
+    unset SOURCE package thisroot
 }
 #-----------------------------------------------------------------------------
 dd4hep_add_path()   {
-    path_name=${1};
-    path_prefix=${2};
-    eval path_value=\$$path_name;
-    if [ ${path_value} ]; then
-	path_value=${path_prefix}:${path_value};
+    path_name=${1}
+    path_prefix=${2}
+    eval path_value=\$$path_name
+    if [ "${path_value}" ]; then
+        # Prevent duplicates
+        if ! echo ${path_value} | tr : '\n' | grep -q "^${path_prefix}$"; then
+            path_value="${path_prefix}:${path_value}"
+        fi
     else
-	path_value=${path_prefix};
-    fi; 
-    eval export ${path_name}=${path_value};
+	path_value="${path_prefix}"
+    fi;
+    eval export ${path_name}='${path_value}'
+    unset path_name path_prefix path_value
 }
 #-----------------------------------------------------------------------------
 dd4hep_add_library_path()    {
-    path_prefix=${1};
-    if [ @USE_DYLD@ ];
-    then
-        if [ ${DYLD_LIBRARY_PATH} ]; then
-            export DYLD_LIBRARY_PATH=${path_prefix}:$DYLD_LIBRARY_PATH;
-            export DD4HEP_LIBRARY_PATH=${path_prefix}:$DD4HEP_LIBRARY_PATH;
-        else
-            export DYLD_LIBRARY_PATH=${path_prefix};
-            export DD4HEP_LIBRARY_PATH=${path_prefix};
-        fi;
+    p=${1};
+    if [ @APPLE@ ]; then
+        # Do not prepend system library locations on macOS. Stuff will break.
+        [[ "$p" = "/usr/lib" || "$p" = "/usr/local/lib" ]] && unset p && return
+        dd4hep_add_path DYLD_LIBRARY_PATH     "$p"
+        dd4hep_add_path DD4HEP_LIBRARY_PATH   "$p"
     else
-        if [ ${LD_LIBRARY_PATH} ]; then
-	    export LD_LIBRARY_PATH=${path_prefix}:$LD_LIBRARY_PATH;
-        else
-	    export LD_LIBRARY_PATH=${path_prefix};
-        fi;
-    fi;
+        dd4hep_add_path LD_LIBRARY_PATH       "$p"
+    fi
+    unset p
 }
 #-----------------------------------------------------------------------------
 #
-dd4hep_parse_this ${BASH_ARGV[0]} DD4hep;
+SOURCE=${BASH_ARGV[0]}
+if [ "x$SOURCE" = "x" ]; then
+    SOURCE=${(%):-%N} # for zsh
+fi
+
+dd4hep_parse_this $SOURCE dd4hep;
 #
 #----DD4hep installation directory--------------------------------------------
 export DD4hepINSTALL=${THIS};
@@ -83,4 +92,5 @@ fi;
 #-----------------------------------------------------------------------------
 #
 unset THIS;
+unset SOURCE;
 #-----------------------------------------------------------------------------