diff --git a/require-ess/src/require.c b/require-ess/src/require.c
index 26f9641ebc4b65d002c44677ac4a2365831a269f..229a474b8d700c7fe05d029981031e0f24ca7fc9 100644
--- a/require-ess/src/require.c
+++ b/require-ess/src/require.c
@@ -1086,7 +1086,10 @@ static int require_priv(const char *module, const char *version) {
       /* filename =
        * "<dirname>/[dirlen]<module>/<version>/[releasediroffs]/lib/<targetArch>/[libdiroffs]/module.dep"
        */
-      if (handleDependencies(module, filename) == -1) return -1;
+      if (handleDependencies(module, filename) == -1) {
+        returnvalue = -1;
+        goto require_priv_end;
+      }
     }
 
     if (requireDebug) printf("require: looking for library file\n");
@@ -1101,11 +1104,17 @@ static int require_priv(const char *module, const char *version) {
        * "<dirname>/[dirlen]<module>/<version>/[releasediroffs]/lib/<targetArch>/[libdiroffs]/PREFIX<module>INFIX[extoffs]EXT"
        */
       printf("Loading library %s\n", filename);
-      if ((libhandle = loadlib(filename)) == NULL) return -1;
+      if ((libhandle = loadlib(filename)) == NULL) {
+        returnvalue = -1;
+        goto require_priv_end;
+      }
 
       /* now check what version we really got (with compiled-in version number)
        */
-      if (asprintf(&symbolname, "_%sLibRelease", module) < 0) return errno;
+      if (asprintf(&symbolname, "_%sLibRelease", module) < 0) {
+        returnvalue = errno;
+        goto require_priv_end;
+      }
 
       found = (const char *)getAddress(libhandle, symbolname);
       free(symbolname);
@@ -1120,7 +1129,7 @@ static int require_priv(const char *module, const char *version) {
                 "Requested %s version %s not available, found only %s.\n",
                 module, version, found);
         returnvalue = -1;
-        goto require_priv_error;
+        goto require_priv_end;
       }
 
       /* load dbd file */
@@ -1130,16 +1139,20 @@ static int require_priv(const char *module, const char *version) {
         if (dbLoadDatabase(filename, NULL, NULL) != 0) {
           fprintf(stderr, "Error loading %s\n", filename);
           returnvalue = -1;
-          goto require_priv_error;
+          goto require_priv_end;
         }
 
         /* when dbd is loaded call register function */
-        if (asprintf(&symbolname, "%s_registerRecordDeviceDriver", module) < 0)
-          return errno;
+        if (asprintf(&symbolname, "%s_registerRecordDeviceDriver", module) <
+            0) {
+          returnvalue = errno;
+          goto require_priv_end;
+        }
 
         printf("Calling function %s\n", symbolname);
-        iocshCmd(symbolname);
+        returnvalue = iocshCmd(symbolname);
         free(symbolname);
+        if (returnvalue) goto require_priv_end;
       } else {
         /* no dbd file, but that might be OK */
         printf("%s has no dbd file\n", module);
@@ -1163,7 +1176,7 @@ static int require_priv(const char *module, const char *version) {
       putenvprintf("TEMPLATES=%s", globalTemplates);
   }
 
-require_priv_error:
+require_priv_end:
   if (founddir) free(founddir);
   return returnvalue;
 }