diff --git a/modules/Makefile b/modules/Makefile
index 1f10aac3b44d4adda4862a1936f768c4ba5c0a88..6325a467a352baa669f68cedcf254ad15d5a0bed 100755
--- a/modules/Makefile
+++ b/modules/Makefile
@@ -91,16 +91,18 @@
 # `make yourmodule/tests/yourclass.pp` and a test manifest with broken
 # dependencies will be produced for you to repair.
 
+# modulepath with colon separated module directories:
+modulepath := .
+
 # Recursive call to make all tests in a module will override this
 # variable:
-modules := $(patsubst %.,%,$(wildcard */.))
+modules := $(foreach moduledir,$(subst :, ,$(modulepath)),$(patsubst %.,%,$(wildcard $(moduledir)/*/.)))
 # Make modules available to the second/third pass make that builds
 # test-sub-stage-2:
 export modules
 
 # Recursive wildcard match (must be recursively expanded), syntax:
 # $(call rwildcard,_directory_,_wildcard_ [...])
-#rwildcard = $(foreach elem,$(wildcard $1/*),$(call rwildcard,$(elem),$2) $(filter $(subst *,%,$2),$(elem)))
 rwildcard = $(foreach elem,$(wildcard $1/*),$(call rwildcard,$(elem),$2)) $(wildcard $(addprefix $1/,$2))
 
 # Testfiles and dependent variables are recursively expanded so we
@@ -164,7 +166,11 @@ $(modules): clean
 osfamily := $(shell facter osfamily|tr A-Z a-z)
 
 # Possible values for fakeroot are: fakeroot, fakeroot-ng
-# (nonfunctional) and empty (noop).
+# (nonfunctional), empty (noop) and sudo.
+# Sudo will require a line like
+#  %puppet-devs ALL = (root) NOPASSWD: /usr/bin/puppet apply --noop *
+# in your sudoers configuration. Beware though that this will let all
+# members of puppet-devs trivially escalate their priviliges.
 # Set it to empty on Centos/Redhat and fakeroot elsewhere.
 fakeroot := $(if $(filter redhat,$(osfamily)),,fakeroot)
 
@@ -175,7 +181,7 @@ puppet-paths := --confdir smoke-testing-state/etc \
 	--vardir smoke-testing-state/var \
 	--ssldir smoke-testing-state/var/lib/puppet/ssl \
 	--rundir smoke-testing-state/var/run/puppet \
-	--modulepath .
+	--modulepath $(modulepath)
 
 
 # Expand testenvdefs with filters: