--- vms/vms.c_orig	Sat Apr  1 15:29:51 2006
+++ vms/vms.c	Sat Apr  1 17:42:51 2006
@@ -9742,15 +9742,22 @@ Perl_my_localtime(pTHX_ const time_t *ti
 #define time(t)      my_time(t)
 
 
-/* my_utime - update modification time of a file
- * calling sequence is identical to POSIX utime(), but under
- * VMS only the modification time is changed; ODS-2 does not
- * maintain access times.  Restrictions differ from the POSIX
+/* my_utime - update modification/access time of a file
+ *
+ * pre VMS 7.3 implementation:
+ * The calling sequence is identical to POSIX utime(), but under
+ * VMS with ODS-2, only the modification time is changed; ODS-2 does
+ * not maintain access times.  Restrictions differ from the POSIX
  * definition in that the time can be changed as long as the
  * caller has permission to execute the necessary IO$_MODIFY $QIO;
  * no separate checks are made to insure that the caller is the
  * owner of the file or has special privs enabled.
  * Code here is based on Joe Meadows' FILE utility.
+ *
+ * VMS 7.3 and later implementation:
+ * Only the UTC translation is home-grown. The rest is handled by the
+ * CRTL utime(), which will take into account the relevant feature
+ * logicals and ODS-5 volume characteristics for true access times.
  */
 
 /* Adjustment from Unix epoch (01-JAN-1970 00:00:00.00)
@@ -9790,21 +9797,28 @@ int Perl_my_utime(pTHX_ const char *file
                         devdsc = {0,DSC$K_DTYPE_T, DSC$K_CLASS_S,0},
                         fnmdsc = {0,DSC$K_DTYPE_T, DSC$K_CLASS_S,0};
 
-  if (decc_efs_charset != 0) {
-    struct utimbuf utc_utimes;
+#if __CRTL_VER >= 70300000
+  struct utimbuf utc_utimes, *utc_utimesp;
 
+  if (utimes != NULL) {
     utc_utimes.actime = utimes->actime;
     utc_utimes.modtime = utimes->modtime;
-#   ifdef VMSISH_TIME
+# ifdef VMSISH_TIME
     /* If input was local; convert to UTC for sys svc */
     if (VMSISH_TIME) {
 	utc_utimes.actime = _toutc(utimes->actime);
 	utc_utimes.modtime = _toutc(utimes->modtime);
     }
-#   endif
-    sts = utime(file, &utc_utimes);
-    return sts;
+# endif
+    utc_utimesp = &utc_utimes;
   }
+  else {
+    utc_utimesp = NULL;
+  }
+
+  sts = utime(file, utc_utimesp);
+  return sts;
+#endif
 	
   if (file == NULL || *file == '\0') {
     set_errno(ENOENT);
