diff --git a/lib/master.pike.in b/lib/master.pike.in
index a78be8f5474afe0eb03d530e5817f9b5d050d698..71f2b79617505f59c4d8d92e7248ea697bc562ff 100644
--- a/lib/master.pike.in
+++ b/lib/master.pike.in
@@ -780,6 +780,11 @@ string getcwd()
 
 string combine_path_with_cwd(string ... paths)
 {
+#ifdef PIKE_MODULE_RELOC
+  /* This is necessary to find compat modules... */
+  if (has_prefix(paths[0], "/${PIKE_MODULE_PATH}/"+UPDIR))
+    return "/${PIKE_MODULE_PATH}/"+combine_path(paths[0][21..],@paths[1..]);
+#endif
   return combine_path(IS_ABSOLUTE_PATH(paths[0])?"":getcwd(),@paths);
 }
 
@@ -1659,7 +1664,11 @@ program low_cast_to_program(string pname,
     { 
       return prog;
     }
-    pname=combine_path("",pname);
+#ifdef PIKE_MODULE_RELOC
+    /* This is necessary to find compat modules... */
+    if (!has_prefix(pname, "/${PIKE_MODULE_PATH}/"+UPDIR))
+#endif
+      pname=combine_path("",pname);
     return findprog(pname,ext,handler,mkobj);
   }
   else {