diff --git a/Pmodules/libstd.bash b/Pmodules/libstd.bash
index f56ae57d83b431fe5e9c91372e3fd8678bf530b2..51619157b894e68f5134b0a62e44a29f34db31dd 100644
--- a/Pmodules/libstd.bash
+++ b/Pmodules/libstd.bash
@@ -35,6 +35,17 @@ std::die() {
         exit $ec
 }
 
+std::def_cmds(){
+	local path="$1"
+	shift
+	for cmd in "$@"; do
+		eval declare -g ${cmd}=$(PATH="${path}" which $cmd 2>/dev/null)
+		if [[ -z "${!cmd}" ]]; then
+			std::die 255 "${cmd} not found"
+		fi
+	done
+}
+
 #
 # get answer to yes/no question
 #
diff --git a/Pmodules/modulecmd.bash.in b/Pmodules/modulecmd.bash.in
index 1644675f09b068f77e15497667acfc251152a9af..ccde9f6191c0217b886afdb7dfa1dc3ea1b24113 100644
--- a/Pmodules/modulecmd.bash.in
+++ b/Pmodules/modulecmd.bash.in
@@ -13,30 +13,14 @@ declare     prefix=$(dirname "${mydir}")
 declare -r  libdir="${prefix}/lib"
 declare -r  libexecdir="${prefix}/libexec"
 
-base64=$(PATH=/bin:/usr/bin /usr/bin/which base64)
-declare -r base64
-mktemp=$(PATH=/bin:/usr/bin /usr/bin/which mktemp)
-declare -r mktemp
-sort=$(PATH=/bin:/usr/bin /usr/bin/which sort)
-declare -r sort
-awk=$(PATH=/bin:/usr/bin /usr/bin/which awk)
-declare -r awk
-rm=$(PATH=/bin:/usr/bin /usr/bin/which rm)
-declare -r rm
-logger=$(PATH=/bin:/usr/bin /usr/bin/which logger)
-declare -r logger
-
-if [[ $(uname -s) == 'Darwin' ]]; then
-	declare -r getopt="${libexecdir}/getopt"
-	declare -r find="${libexecdir}/find"
-else
-	getopt=$(PATH=/bin:/usr/bin /usr/bin/which getopt)
-	declare -r getopt
-	find=$(PATH=/bin:/usr/bin /usr/bin/which find)
-	declare -r find
-fi
-
 source "${libdir}/libstd.bash"
+source "${libdir}/libpmodules.bash"
+
+path="/bin:/usr/bin"
+[[ $(uname -s) == 'Darwin' ]] && path+=":${libexecdir}" 
+std::def_cmds "${path}" \
+	      'awk' 'base64' 'find' 'getopt' 'logger' 'mktemp' \
+	      'rm' 'sort' 'find'
 
 if [[ ${PMODULES_PURETCL} == yes ]]; then
 	declare -r  modulecmd="${libexecdir}/modulecmd.tcl"