diff --git a/src/emx/src/lib/sys/b_fsFileStatFH.c b/src/emx/src/lib/sys/b_fsFileStatFH.c
index b987bde..3f7a9fb 100755
--- a/src/emx/src/lib/sys/b_fsFileStatFH.c
+++ b/src/emx/src/lib/sys/b_fsFileStatFH.c
@@ -86,7 +86,13 @@ int __libc_Back_fsFileStatFH(int fh, struct stat *pStat)
         pStat->st_nlink = 1;
         pStat->st_blksize = 4096*12; /* 48KB */
 
-        if ((pFH->fFlags & __LIBC_FH_TYPEMASK) == F_FILE)
+        int   fDasdMode = 0;
+        ULONG fulMode;
+
+        if (!DosQueryFHState(fh, &fulMode))
+            fDasdMode = fulMode & OPEN_FLAGS_DASD;
+
+        if ((pFH->fFlags & __LIBC_FH_TYPEMASK) == F_FILE && !fDasdMode)
         {
             /*
              * Regular OS/2 file.
diff --git a/src/emx/src/lib/sys/b_fsNativeFileStat.c b/src/emx/src/lib/sys/b_fsNativeFileStat.c
index 713bf5c..b7c17ad 100755
--- a/src/emx/src/lib/sys/b_fsNativeFileStat.c
+++ b/src/emx/src/lib/sys/b_fsNativeFileStat.c
@@ -113,6 +113,58 @@ int __libc_back_fsNativeFileStat(const char *pszNativePath, struct stat *pStat)
             pStat->st_birthtime = 0;
             LIBCLOG_RETURN_INT(0);
         }
+
+        /*
+         * If a drive in DASD mode, make a fake unix sutff
+         */
+        if (   (pszNativePath[5] == 'd' || pszNativePath[5] =='D')
+            && (pszNativePath[6] == 'r' || pszNativePath[6] =='R')
+            && (pszNativePath[7] == 'i' || pszNativePath[7] =='I')
+            && (pszNativePath[8] == 'v' || pszNativePath[8] =='V')
+            && (pszNativePath[9] == 'e' || pszNativePath[9] =='E')
+            && (   (pszNativePath[10] >= 'A' && pszNativePath[10] <= 'Z')
+                || (pszNativePath[10] >= 'a' && pszNativePath[10] <= 'z')
+                )
+            && pszNativePath[11] == '\0'
+            )
+        {
+            ULONG      ulDiskNum;
+            char       szNativePath[3] = "x:";
+            FSALLOCATE fsalloc;
+            FSINFO     fsinfo;
+            int        rc;
+
+            ulDiskNum = pszNativePath[10];
+            ulDiskNum -= ulDiskNum >= 'a' ? 'a' : 'A';
+            ulDiskNum++;
+
+            rc = DosQueryFSInfo(ulDiskNum, FSIL_ALLOC, &fsalloc, sizeof(fsalloc));
+            if (rc)
+            {
+                rc = -__libc_native2errno(rc);
+                LIBCLOG_ERROR_RETURN_INT(rc);
+            }
+
+            /* fake unix stuff */
+            /** @todo this doesn't entirely match the open and file handle stat code.
+             * Fortunately, the user will not see that unless won't have the filename... */
+            szNativePath[0] = ulDiskNum + 'A' - 1;
+            pStat->st_dev = __libc_back_fsPathCalcInodeAndDev(szNativePath, &pStat->st_ino);
+            pStat->st_attr = FILE_NORMAL;
+            pStat->st_mode = S_IFREG | S_IRWXO | S_IRWXG | S_IRWXU;
+            pStat->st_uid = 0;
+            pStat->st_gid = 0;
+            pStat->st_rdev = 0; /* b_ioFileOpen depends on this being 0 for devices! */
+            pStat->st_nlink = 1;
+            pStat->st_size = (off_t)fsalloc.cUnit * fsalloc.cSectorUnit * fsalloc.cbSector;
+            pStat->st_blocks = pStat->st_size / S_BLKSIZE;
+            pStat->st_blksize = 4096 * 12; /* 48kb */
+            pStat->st_atime = 0;
+            pStat->st_mtime = 0;
+            pStat->st_ctime = 0;
+            pStat->st_birthtime = 0;
+            LIBCLOG_RETURN_INT(0);
+        }
     }
 
     /*
diff --git a/src/emx/src/lib/sys/b_ioFileOpen.c b/src/emx/src/lib/sys/b_ioFileOpen.c
index cf2b05c..7600961 100755
--- a/src/emx/src/lib/sys/b_ioFileOpen.c
+++ b/src/emx/src/lib/sys/b_ioFileOpen.c
@@ -153,6 +153,28 @@ int __libc_Back_ioFileOpen(const char *pszFile, unsigned fLibc, int fShare, off_
     if (rc)
         LIBCLOG_ERROR_RETURN_INT(rc);
 
+    /*
+     * Check if DASD mode is requsted.
+     */
+    if (   (szNativePath[5] == 'd' || szNativePath[5] =='D')
+        && (szNativePath[6] == 'r' || szNativePath[6] =='R')
+        && (szNativePath[7] == 'i' || szNativePath[7] =='I')
+        && (szNativePath[8] == 'v' || szNativePath[8] =='V')
+        && (szNativePath[9] == 'e' || szNativePath[9] =='E')
+        && (   (szNativePath[10] >= 'A' && szNativePath[10] <= 'Z')
+            || (szNativePath[10] >= 'a' && szNativePath[10] <= 'z')
+            )
+        && szNativePath[11] == '\0'
+        )
+    {
+        szNativePath[0] = szNativePath[10];
+        if (szNativePath[0] >= 'a')
+            szNativePath[0] -= 'a' - 'A';
+        szNativePath[1] = ':';
+        szNativePath[2] = '\0';
+        flOpenMode |= OPEN_FLAGS_DASD;
+    }
+
     dev_t   Dev = 0;
     ino_t   Inode = 0;
     PEAOP2 pEaOp2 = NULL;
diff --git a/src/emx/src/lib/sys/fs.c b/src/emx/src/lib/sys/fs.c
index ad4c590..f375160 100755
--- a/src/emx/src/lib/sys/fs.c
+++ b/src/emx/src/lib/sys/fs.c
@@ -1105,7 +1105,17 @@ static int fsResolveUnix(const char *pszUserPath, unsigned fFlags, char *pszNati
             {
                 PFSQBUFFER2 pfsqb = (PFSQBUFFER2)pachBuffer;
                 ULONG       cb = SIZEOF_ACHBUFFER;
-                fDone = !DosQueryFSAttach((PCSZ)pszNativePath, 0, FSAIL_QUERYNAME, pfsqb, &cb);
+                fDone = !DosQueryFSAttach((PCSZ)pszNativePath, 0, FSAIL_QUERYNAME, pfsqb, &cb)
+                     || (   (pszNativePath[5] == 'd' || pszNativePath[5] =='D')
+                         && (pszNativePath[6] == 'r' || pszNativePath[6] =='R')
+                         && (pszNativePath[7] == 'i' || pszNativePath[7] =='I')
+                         && (pszNativePath[8] == 'v' || pszNativePath[8] =='V')
+                         && (pszNativePath[9] == 'e' || pszNativePath[9] =='E')
+                         && (   (pszNativePath[10] >= 'A' && pszNativePath[10] <= 'Z')
+                             || (pszNativePath[10] >= 'a' && pszNativePath[10] <= 'z')
+                             )
+                         && pszNativePath[11] == '\0'
+                         );
             }
 
             /* If it was, copy path to pszNativePath and go to exit code. */
