diff --git a/util/build.info b/util/build.info
index e044d94..609be51 100644
--- a/util/build.info
+++ b/util/build.info
@@ -1,7 +1,7 @@
 IF[{- $target{build_scheme}->[1] eq "VMS" -}]
- PROGRAMS_NO_INST=shlib_wrap
- SOURCE[shlib_wrap]=shareable_image_wrap.c
- GENERATE[shareable_image_wrap.c]=shareable_image_wrap.c.in
+ SCRIPTS_NO_INST=local_shlib.com unlocal_shlib.com
+ SOURCE[local_shlib.com]=local_shlib.com.in
+ SOURCE[unlocal_shlib.com]=unlocal_shlib.com.in
 ELSIF[{- $target{build_scheme}->[1] eq "unix" -}]
  SCRIPTS_NO_INST=shlib_wrap.sh
  SOURCE[shlib_wrap.sh]=shlib_wrap.sh.in
diff --git a/util/local_shlib.com.in b/util/local_shlib.com.in
new file mode 100644
index 0000000..daceffc
--- /dev/null
+++ b/util/local_shlib.com.in
@@ -0,0 +1,31 @@
+${-
+  use File::Spec::Functions qw(rel2abs);
+
+  my $bldtop = rel2abs($config{builddir});
+  our %names = ( ( map { $_ => $bldtop.$_.".EXE" }
+                   map { $unified_info{sharednames}->{$_} || () }
+                   @{$unified_info{libraries}} ),
+                 'DBG$IMAGE_DSF_PATH' => $bldtop );
+  "" -}
+$       ! Create a local environment with the shared library logical names
+$       ! properly set.  Undo this with unlocal_shlib.com
+$
+$       OPENSSL_NAMES := OPENSSL_NAMES_'F$GETJPI("","PID")'
+$       CREATE/NAME_TABLE/PARENT_TABLE=LNM$PROCESS_DIRECTORY 'OPENSSL_NAMES'
+$       DEFINE/TABLE='OPENSSL_NAMES' OSSL_FLAG YES
+$
+$       NAMES := {- join(",", keys %names); -}
+{-
+  join("\n", map { "\$       __$_ = \"".$names{$_}."\"" } keys %names);
+-}      
+$       I = 0
+$       LOOP:
+$           E = F$ELEMENT(I,",",NAMES)
+$           I = I + 1
+$           IF E .EQS. "," THEN GOTO ENDLOOP
+$           EV = __'E'
+$           OLDV = F$TRNLNM(E,"LNM$PROCESS")
+$           IF OLDV .NES. "" THEN DEFINE/TABLE='OPENSSL_NAMES' 'E' 'OLDV'
+$           DEFINE 'E' 'EV'
+$           GOTO LOOP
+$       ENDLOOP:
diff --git a/util/shareable_image_wrap.c.in b/util/shareable_image_wrap.c.in
deleted file mode 100644
index 567e408..0000000
--- a/util/shareable_image_wrap.c.in
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License").  You may not use
- * this file except in compliance with the License.  You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-/*
- * This program allows for easy execution of programs in the OpenSSL build
- * directory, in a manner that's similar to how util/shlib_wrap.sh.  Simply
- * take the command you want to execute and prefix that with
- * 'mcr [.util]shlib_wrap', for example:
- *
- * $ mcr [.util]shlib_wrap mcr [.apps]openssl s_client -connect www.openssl.org:443
- */
-
-#ifndef __VMS
-# error "VMS ONLY!"
-#endif
-
-#include <stdio.h>
-#include <descrip.h>
-#include <ssdef.h>
-#include <lib$routines.h>
-{-
-    use File::Spec::Functions qw(rel2abs);
-    our $sv = sprintf "%02d%02d", $config{shlib_major}, $config{shlib_minor};
-    our $pz = $config{pointer_size};
-    our $bldd = rel2abs($config{builddir});
-    ""
--}
-/* The logical name table we check and affect */
-$DESCRIPTOR(lnm_process_table, "LNM$PROCESS_TABLE");
-
-/* The first logical name we deal with, the buffer for its old value,
- * and its temporary new value
- */
-const $DESCRIPTOR(lnm1, "OSSL$LIBCRYPTO{- $sv -}_SHR{- $pz -}");
-char lnm1oldbuf[256]; short lnm1oldlen = 0;
-$DESCRIPTOR(lnm1old, lnm1oldbuf);
-const $DESCRIPTOR(lnm1new, "{- $bldd -}OSSL$LIBCRYPTO{- $sv -}_SHR{- $pz -}.EXE");
-
-/* The second logical name we deal with, the buffer for its old value,
- * and its temporary new value
- */
-const $DESCRIPTOR(lnm2, "OSSL$LIBSSL{- $sv -}_SHR{- $pz -}");
-char lnm2oldbuf[256]; short lnm2oldlen = 0;
-$DESCRIPTOR(lnm2old, lnm2oldbuf);
-const $DESCRIPTOR(lnm2new, "{- $bldd -}OSSL$LIBSSL{- $sv -}_SHR{- $pz -}.EXE");
-
-/* The foreign command we want to run with the logical names above set
- * to their temporary values
- */
-char foreign_cmd_buf[4096]; short foreign_cmd_len = 0;
-$DESCRIPTOR(foreign_cmd, foreign_cmd_buf);
-
-int main()
-{
-    int status = 0;
-    int lnm1status = 0, lnm2status = 0;
-
-    /* Fetch the command line.  lib$get_foreign() is nice enough to
-     * strip away the program name, thus only returning the arguments,
-     * which is exactly what we need.
-     */
-    lib$get_foreign(&foreign_cmd, 0, &foreign_cmd_len);
-    foreign_cmd.dsc$w_length = foreign_cmd_len;
-
-#ifdef DEBUG
-    foreign_cmd_buf[foreign_cmd_len] = '\0';
-    printf("[%d] %s\n\n", foreign_cmd_len, foreign_cmd_buf);
-#endif
-
-    /* Fetch the first logical name value and save the status */
-    lnm1status = lib$get_logical(&lnm1, &lnm1old, &lnm1oldlen,
-                                 &lnm_process_table);
-    if (lnm1status == SS$_NORMAL)
-        lnm1old.dsc$w_length = lnm1oldlen;
-    else if (lnm1status != SS$_NOLOGNAM)
-        return lnm1status;
-
-    /* Fetch the first logical name value and save the status */
-    lnm2status = lib$get_logical(&lnm2, &lnm2old, &lnm2oldlen,
-                                 &lnm_process_table);
-    if (lnm2status == SS$_NORMAL)
-        lnm2old.dsc$w_length = lnm2oldlen;
-    else if (lnm2status != SS$_NOLOGNAM)
-        return lnm2status;
-
-    /* Set the temporary new values for both logical names */
-    lib$set_logical(&lnm1, &lnm1new, &lnm_process_table);
-    lib$set_logical(&lnm2, &lnm2new, &lnm_process_table);
-
-    /* Execute the arguments as a command.  The better be a command! */
-    status = lib$spawn(&foreign_cmd);
-
-    /* If the logical names we set had old values, restore them.
-     * Otherwise, simply delete their current values.
-     */
-    if (lnm1status == SS$_NORMAL)
-        lib$set_logical(&lnm1, &lnm1old, &lnm_process_table);
-    else
-        lib$delete_logical(&lnm1, &lnm_process_table);
-    if (lnm2status == SS$_NORMAL)
-        lib$set_logical(&lnm2, &lnm2old, &lnm_process_table);
-    else
-        lib$delete_logical(&lnm2, &lnm_process_table);
-
-    /* Return the status from the execution of the foreign command */
-    return status;
-}
diff --git a/util/unlocal_shlib.com.in b/util/unlocal_shlib.com.in
new file mode 100644
index 0000000..67120c6
--- /dev/null
+++ b/util/unlocal_shlib.com.in
@@ -0,0 +1,27 @@
+${-
+  use File::Spec::Functions qw(rel2abs);
+
+  my $bldtop = rel2abs($config{builddir});
+  our %names = ( ( map { $_ => $bldtop.$_.".EXE" }
+                   map { $unified_info{sharednames}->{$_} || () }
+                   @{$unified_info{libraries}} ),
+                 'DBG$IMAGE_DSF_PATH' => $bldtop );
+  "" -}
+$       ! Remove the local environment created by local_shlib.com
+$
+$       OPENSSL_NAMES := OPENSSL_NAMES_'F$GETJPI("","PID")'
+$       IF F$TRNLNM("OSSL_FLAG",OPENSSL_NAMES) .EQS. "" THEN EXIT 0
+$
+$       NAMES := {- join(",", keys %names); -}
+$       I = 0
+$       LOOP:
+$           E = F$ELEMENT(I,",",NAMES)
+$           I = I + 1
+$           IF E .EQS. "," THEN GOTO ENDLOOP
+$           OLDV = F$TRNLNM(E,OPENSSL_NAMES)
+$           DEASSIGN 'E'
+$           IF OLDV .NES. "" THEN DEFINE 'E' 'OLDV'
+$           GOTO LOOP
+$       ENDLOOP:
+$
+$       DEASSIGN 'OPENSSL_NAMES' /TABLE=LNM$PROCESS_DIRECTORY
