diff --git a/require.c b/require.c
index 2b19cd21bf60ed94c005dc37fe38417754ebec54..6d043d9df9b5e117196767e9eeb3989a284c3236 100644
--- a/require.c
+++ b/require.c
@@ -655,7 +655,14 @@ static off_t fileSize(const char* filename)
 #ifdef vxWorks
         (char*) /* vxWorks has buggy stat prototype */
 #endif
-        filename, &filestat) != 0) return -1;
+        filename, &filestat) != 0)
+    {
+        if (requireDebug)
+            printf("require: %s does not exist\n", filename);
+        return -1;
+    }
+    if (requireDebug)
+        printf("require: %s exists and has size %ld\n", filename, filestat.st_size);
     return filestat.st_size;
 }
 #define fileExists(filename) (fileSize(filename)>=0)
@@ -671,9 +678,8 @@ static int handleDependencies(const char* module, char* depfilename)
     /* parse dependency file if exists */
     if (!fileExists(depfilename))
     {
-        if (requireDebug)
-            printf("require: no dependency file %s\n", depfilename);
-        return 0;
+        fprintf(stderr, "No dependency file %s\n", depfilename);
+        return -1;
     }
     if (requireDebug)
         printf("require: parsing dependency file %s\n", depfilename);
@@ -831,17 +837,18 @@ static int require_priv(const char* module, const char* version, const char* arg
     char* founddir = NULL;
     char* symbolname;
     char filename[NAME_MAX];
+    
+    int someVersionFound = 0;
+    int someArchFound = 0;
 
     if (requireDebug)
         printf("require: module=\"%s\" version=\"%s\" args=\"%s\"\n", module, version, args);
 
 #define TRY_FILE(offs, args...) \
-    (snprintf(filename + offs, sizeof(filename) - offs, args) && \
-    (fileExists(filename) || (requireDebug && !printf("require: no %s\n", filename))))
+    (snprintf(filename + offs, sizeof(filename) - offs, args) && fileExists(filename))
 
 #define TRY_NONEMPTY_FILE(offs, args...) \
-    (snprintf(filename + offs, sizeof(filename) - offs, args) && \
-    (fileSize(filename)>0 || (requireDebug && !printf("require: no %s\n", filename))))
+    (snprintf(filename + offs, sizeof(filename) - offs, args) && (fileSize(filename)>0))
 
     driverpath = getenv("EPICS_DRIVER_PATH");
     if (driverpath == NULL) driverpath = ".";
@@ -923,6 +930,8 @@ static int require_priv(const char* module, const char* version, const char* arg
                     #endif
                     if (dirent->d_name[0] == '.') continue;  /* ignore hidden directories */
 
+                    someVersionFound = 1;
+
                     /* Look for highest matching version. */
                     if (requireDebug)
                         printf("require: checking version %s against required %s\n",
@@ -931,16 +940,10 @@ static int require_priv(const char* module, const char* version, const char* arg
                     switch ((status = compareVersions(version, dirent->d_name)))
                     {
                         case EXACT: /* exact match found */
+                        case MATCH: /* all given numbers match. */
                         {
-                            if (requireDebug)
-                                printf("require: %s %s matches %s exactly\n",
-                                    module, dirent->d_name, version);
-                            /* We are done. */
-                            end = NULL;
-                            break;
-                        }
-                        case MATCH:       /* all given numbers match. */
-                        {
+                            someArchFound = 1;
+
                             if (requireDebug)
                                 printf("require: %s %s may match %s\n",
                                     module, dirent->d_name, version);
@@ -959,6 +962,16 @@ static int require_priv(const char* module, const char* version, const char* arg
                                 continue;
                             }
 
+                            if (status == EXACT)
+                            {
+                                if (requireDebug)
+                                    printf("require: %s %s matches %s exactly\n",
+                                        module, dirent->d_name, version);
+                                /* We are done. */
+                                end = NULL;
+                                break;
+                            }
+
                             /* Is it higher than the one we found before? */
                             if (found && requireDebug)
                                 printf("require: %s %s support for %s %s found, compare against previously found %s\n",
@@ -996,7 +1009,7 @@ static int require_priv(const char* module, const char* version, const char* arg
             {
                 /* filename = "<dirname>/[dirlen]<module>/" */
                 if (requireDebug)
-                    printf("require: no %s\n", filename);
+                    printf("require: no %s directory\n", filename);
 
                 /* try local/old style module only if no new style candidate has been found */
                 if (!found)
@@ -1018,8 +1031,8 @@ static int require_priv(const char* module, const char* version, const char* arg
                     if (TRY_FILE(dirlen, PREFIX "%s" INFIX "%s%n" EXT, module, versionstr, &extoffs)
                     /* filename = "<dirname>/[dirlen][releasediroffs][libdiroffs]PREFIX<module>INFIX(-<version>)?[extoffs]EXT" */
                     #ifdef vxWorks
-                        || (filename[dirlen + extoffs] = 0 && /* try without extension */
-                        (fileExists(filename) || (requireDebug && !printf("require: no %s\n", filename))))
+                        /* try without extension */
+                        || (filename[dirlen + extoffs] = 0, fileExists(filename))
                     #endif
                         )
                     {
@@ -1038,7 +1051,19 @@ static int require_priv(const char* module, const char* version, const char* arg
 
         if (!found)
         {
-            fprintf(stderr, "Module %s not found\n", module);
+            if (version && someArchFound)
+                fprintf(stderr, "Module %s version %s not found for %s (but for other architectures)\n", module, version, targetArch);
+            else
+            if (someArchFound)
+                fprintf(stderr, "Module %s not found for %s (but for other architectures)\n", module, targetArch);
+            else
+            if (version && someVersionFound)
+                fprintf(stderr, "Module %s version %s not found (but other versions are available)\n", module, version);
+            else
+            if (version)
+                fprintf(stderr, "Module %s version %s not found\n", module, version);
+            else
+                fprintf(stderr, "Module %s not found\n", module);
             return ifexists ? 0 : -1;
         }