Index: trunk/src/VBox/Runtime/common/fs/iso9660vfs.cpp
===================================================================
--- trunk/src/VBox/Runtime/common/fs/iso9660vfs.cpp	(revision 67398)
+++ trunk/src/VBox/Runtime/common/fs/iso9660vfs.cpp	(revision 67399)
@@ -675,4 +675,6 @@
         if (pShared)
         {
+            LogFlow(("rtFsIso9660File_New: cbObject=%#RX64 First Extent: off=%#RX64 cb=%#RX64\n",
+                     pShared->Core.cbObject, pShared->Core.FirstExtent.offDisk, pShared->Core.FirstExtent.cbExtent));
             pNewFile->offFile = 0;
             pNewFile->pShared = pShared;
Index: trunk/src/VBox/Runtime/common/fs/isomaker.cpp
===================================================================
--- trunk/src/VBox/Runtime/common/fs/isomaker.cpp	(revision 67398)
+++ trunk/src/VBox/Runtime/common/fs/isomaker.cpp	(revision 67399)
@@ -1458,5 +1458,5 @@
                                                       char *pszDst, size_t cbDst, size_t *pcchDst, size_t *pcbInDirRec)
 {
-    AssertReturn(cbDst > ISO9660_MAX_NAME_LEN, VERR_INTERNAL_ERROR_3);
+    AssertReturn(cbDst > ISO9660_MAX_NAME_LEN + 2, VERR_INTERNAL_ERROR_3);
 
     /* Skip leading dots. */
@@ -1522,4 +1522,12 @@
     }
 
+    /* Append version if not directory */
+    if (!fIsDir)
+    {
+        pszDst[cchDst++] = ';';
+        pszDst[cchDst++] = '1';
+        pszDst[cchDst]   = '\0';
+    }
+
     /*
      * Unique name?
@@ -1916,5 +1924,5 @@
         size_t offNext = cchComponent;
         while (RTPATH_IS_SLASH(ch))
-            ch = pszPath[offNext++];
+            ch = pszPath[++offNext];
 
         if (ch == '\0')
@@ -1985,4 +1993,5 @@
                     AssertReturn(pChild != NULL, VERR_INTERNAL_ERROR_4);
                 }
+                pParent = pChild;
             }
         }
@@ -3859,5 +3868,5 @@
             pDir = RTListGetNext(&pFinalizedDirs->FinalizedDirs, pDir, RTFSISOMAKERNAMEDIR, FinalizedEntry);
             AssertReturnStmt(pDir, *pbBuf = 0xff, 1);
-        } while (offInTable - pDir->offPathTable < RTFSISOMAKER_CALC_PATHREC_SIZE(pDir->pName->cbNameInDirRec));
+        } while (offInTable - pDir->offPathTable >= RTFSISOMAKER_CALC_PATHREC_SIZE(pDir->pName->cbNameInDirRec));
     /* Back to the start: */
     else if (offInTable == 0)
@@ -3872,5 +3881,5 @@
             pDir = RTListGetPrev(&pFinalizedDirs->FinalizedDirs, pDir, RTFSISOMAKERNAMEDIR, FinalizedEntry);
             AssertReturnStmt(pDir, *pbBuf = 0xff, 1);
-        } while (offInTable - pDir->offPathTable < RTFSISOMAKER_CALC_PATHREC_SIZE(pDir->pName->cbNameInDirRec));
+        } while (offInTable - pDir->offPathTable >= RTFSISOMAKER_CALC_PATHREC_SIZE(pDir->pName->cbNameInDirRec));
 
     /*
@@ -4096,5 +4105,5 @@
             pDir = RTListGetNext(&pFinalizedDirs->FinalizedDirs, pDir, RTFSISOMAKERNAMEDIR, FinalizedEntry);
             AssertReturnStmt(pDir, *pbBuf = 0xff, 1);
-        } while ((offInDir64 = offUnsigned - pDir->offDir) < RT_ALIGN_32(pDir->cbDir, RTFSISOMAKER_SECTOR_SIZE));
+        } while ((offInDir64 = offUnsigned - pDir->offDir) >= RT_ALIGN_32(pDir->cbDir, RTFSISOMAKER_SECTOR_SIZE));
     /* Back to the start: */
     else if (pFinalizedDirs->offDirs / RTFSISOMAKER_SECTOR_SIZE == offUnsigned / RTFSISOMAKER_SECTOR_SIZE)
@@ -4109,5 +4118,5 @@
             pDir = RTListGetPrev(&pFinalizedDirs->FinalizedDirs, pDir, RTFSISOMAKERNAMEDIR, FinalizedEntry);
             AssertReturnStmt(pDir, *pbBuf = 0xff, 1);
-        } while ((offInDir64 = offUnsigned - pDir->offDir) < RT_ALIGN_32(pDir->cbDir, RTFSISOMAKER_SECTOR_SIZE));
+        } while ((offInDir64 = offUnsigned - pDir->offDir) >= RT_ALIGN_32(pDir->cbDir, RTFSISOMAKER_SECTOR_SIZE));
 
     /*
Index: trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp
===================================================================
--- trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp	(revision 67398)
+++ trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp	(revision 67399)
@@ -897,4 +897,11 @@
             return rtFsIsoMakerCmdSyntaxError(pOpts, "too many name specifiers (max %d)", RT_ELEMENTS(pOpts->afNameSpecifiers));
         pOpts->afNameSpecifiers[iNameSpecifier] = fNameSpecifier;
+        iNameSpecifier++;
+
+        /*
+         * Next, if any.
+         */
+        if (pszSpec[offSpec] == ',')
+            offSpec++;
     } while (pszSpec[offSpec] != '\0');
 
@@ -1057,5 +1064,5 @@
         }
 
-        for (uint32_t iDst = cParsedNames; iDst < pOpts->cNameSpecifiers; iDst++)
+        for (uint32_t iDst = iSrc + 1; iDst < pOpts->cNameSpecifiers; iDst++)
             aParsedNames[iDst] = aParsedNames[iSrc];
         cParsedNames = pOpts->cNameSpecifiers + 1;
