Index: /trunk/include/VBox/com/string.h
===================================================================
--- /trunk/include/VBox/com/string.h	(revision 49038)
+++ /trunk/include/VBox/com/string.h	(revision 49039)
@@ -706,8 +706,8 @@
 
     /**
-     * Removes a trailing file name extension from the member string, if present.
-     * Calls RTPathStripExt() without having to mess with mutableRaw().
-     */
-    Utf8Str& stripExt();
+     * Removes a trailing file name suffix from the member string, if present.
+     * Calls RTPathStripSuffix() without having to mess with mutableRaw().
+     */
+    Utf8Str& stripSuffix();
 
     /**
Index: /trunk/include/iprt/mangling.h
===================================================================
--- /trunk/include/iprt/mangling.h	(revision 49038)
+++ /trunk/include/iprt/mangling.h	(revision 49039)
@@ -653,4 +653,5 @@
 # define RTLdrRelocate                                  RT_MANGLER(RTLdrRelocate)
 # define RTLdrRvaToSegOffset                            RT_MANGLER(RTLdrRvaToSegOffset)
+# define RTLdrQueryProp                                 RT_MANGLER(RTLdrQueryProp)
 # define RTLdrSegOffsetToRva                            RT_MANGLER(RTLdrSegOffsetToRva)
 # define RTLdrSize                                      RT_MANGLER(RTLdrSize)
@@ -976,10 +977,10 @@
 # define RTPathExists                                   RT_MANGLER(RTPathExists)
 # define RTPathExistsEx                                 RT_MANGLER(RTPathExistsEx)
-# define RTPathExt                                      RT_MANGLER(RTPathExt)
+# define RTPathSuffix                                   RT_MANGLER(RTPathSuffix)
 # define RTPathFilename                                 RT_MANGLER(RTPathFilename)
 # define RTPathFilenameEx                               RT_MANGLER(RTPathFilenameEx)
 # define RTPathGetCurrent                               RT_MANGLER(RTPathGetCurrent)
 # define RTPathGetMode                                  RT_MANGLER(RTPathGetMode)
-# define RTPathHasExt                                   RT_MANGLER(RTPathHasExt)
+# define RTPathHasSuffix                                RT_MANGLER(RTPathHasSuffix)
 # define RTPathHasPath                                  RT_MANGLER(RTPathHasPath)
 # define RTPathIsSame                                   RT_MANGLER(RTPathIsSame)
@@ -1009,5 +1010,5 @@
 # define RTPathStartsWith                               RT_MANGLER(RTPathStartsWith)
 # define RTPathStartsWithRoot                           RT_MANGLER(RTPathStartsWithRoot)
-# define RTPathStripExt                                 RT_MANGLER(RTPathStripExt)
+# define RTPathStripSuffix                              RT_MANGLER(RTPathStripSuffix)
 # define RTPathStripFilename                            RT_MANGLER(RTPathStripFilename)
 # define RTPathStripTrailingSlash                       RT_MANGLER(RTPathStripTrailingSlash)
Index: /trunk/include/iprt/path.h
===================================================================
--- /trunk/include/iprt/path.h	(revision 49038)
+++ /trunk/include/iprt/path.h	(revision 49039)
@@ -316,9 +316,9 @@
 
 /**
- * Strips the extension from a path.
- *
- * @param   pszPath     Path which extension should be stripped.
- */
-RTDECL(void) RTPathStripExt(char *pszPath);
+ * Strips the last suffix from a path.
+ *
+ * @param   pszPath     Path which suffix should be stripped.
+ */
+RTDECL(void) RTPathStripSuffix(char *pszPath);
 
 /**
@@ -397,22 +397,25 @@
 
 /**
- * Finds the extension part of in a path.
- *
- * @returns Pointer to extension within pszPath.
- * @returns NULL if no extension.
- * @param   pszPath     Path to find extension in.
- */
-RTDECL(char *) RTPathExt(const char *pszPath);
-
-/**
- * Checks if a path has an extension.
- *
- * @returns true if extension present.
- * @returns false if no extension.
+ * Finds the suffix part of in a path (last dot and onwards).
+ *
+ * @returns Pointer to suffix within pszPath.
+ * @returns NULL if no suffix
+ * @param   pszPath     Path to find suffix in.
+ *
+ * @remarks IPRT terminology: A suffix includes the dot, the extension starts
+ *          after the dot. For instance suffix '.txt' and extension 'txt'.
+ */
+RTDECL(char *) RTPathSuffix(const char *pszPath);
+
+/**
+ * Checks if a path has an extension / suffix.
+ *
+ * @returns true if extension / suffix present.
+ * @returns false if no extension / suffix.
  * @param   pszPath     Path to check.
  */
-RTDECL(bool) RTPathHasExt(const char *pszPath);
-/** Misspelled, don't use.  */
-#define RTPathHaveExt   RTPathHasExt
+RTDECL(bool) RTPathHasSuffix(const char *pszPath);
+/** Same thing, different name.  */
+#define RTPathHasExt RTPathHasSuffix
 
 /**
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp	(revision 49038)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp	(revision 49039)
@@ -1742,11 +1742,11 @@
                     if (pszLogFile)
                     {
-                        char *pszLogExt = NULL;
-                        if (RTPathHasExt(pszLogFile))
-                            pszLogExt = RTStrDup(RTPathExt(pszLogFile));
-                        RTPathStripExt(pszLogFile);
-                        char *pszLogSuffix;
+                        char *pszLogSuff = NULL;
+                        if (RTPathHasSuffix(pszLogFile))
+                            pszLogSuff = RTStrDup(RTPathSuffix(pszLogFile));
+                        RTPathStripSuffix(pszLogFile);
+                        char *pszLogNewSuffix;
 #ifndef DEBUG
-                        if (RTStrAPrintf(&pszLogSuffix, "-%RU32-%s",
+                        if (RTStrAPrintf(&pszLogNewSuffix, "-%RU32-%s",
                                          pSessionStartupInfo->uSessionID,
                                          pSessionStartupInfo->szUser) < 0)
@@ -1755,5 +1755,5 @@
                         }
 #else
-                        if (RTStrAPrintf(&pszLogSuffix, "-%RU32-%RU32-%s",
+                        if (RTStrAPrintf(&pszLogNewSuffix, "-%RU32-%RU32-%s",
                                          pSessionStartupInfo->uSessionID,
                                          s_uCtrlSessionThread,
@@ -1765,7 +1765,7 @@
                         else
                         {
-                            rc2 = RTStrAAppend(&pszLogFile, pszLogSuffix);
-                            if (RT_SUCCESS(rc2) && pszLogExt)
-                                rc2 = RTStrAAppend(&pszLogFile, pszLogExt);
+                            rc2 = RTStrAAppend(&pszLogFile, pszLogNewSuffix);
+                            if (RT_SUCCESS(rc2) && pszLogSuff)
+                                rc2 = RTStrAAppend(&pszLogFile, pszLogSuff);
                             if (RT_SUCCESS(rc2))
                             {
@@ -1776,11 +1776,11 @@
                                 }
                             }
-                            RTStrFree(pszLogSuffix);
+                            RTStrFree(pszLogNewSuffix);
                         }
                         if (RT_FAILURE(rc2))
                             VBoxServiceError("Error building session logfile string for session %RU32 (user %s), rc=%Rrc\n",
                                              pSessionStartupInfo->uSessionID, pSessionStartupInfo->szUser, rc2);
-                        if (pszLogExt)
-                            RTStrFree(pszLogExt);
+                        if (pszLogSuff)
+                            RTStrFree(pszLogSuff);
                         RTStrFree(pszLogFile);
                     }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp	(revision 49038)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp	(revision 49039)
@@ -323,5 +323,5 @@
         if (!format || !*format)
         {
-            const char *pszExt = RTPathExt(filename);
+            const char *pszExt = RTPathSuffix(filename);
             /* Skip over . if there is an extension. */
             if (pszExt)
@@ -356,5 +356,5 @@
     /** @todo use IMediumFormat to cover all extensions generically */
     Utf8Str strName(filename);
-    if (!RTPathHaveExt(strName.c_str()))
+    if (!RTPathHasSuffix(strName.c_str()))
     {
         Utf8Str strFormat(format);
Index: /trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPLib.cpp	(revision 49038)
+++ /trunk/src/VBox/HostDrivers/Support/SUPLib.cpp	(revision 49039)
@@ -2199,5 +2199,5 @@
      * Add the default extension if it's missing.
      */
-    if (!RTPathHaveExt(pszFilename))
+    if (!RTPathHasSuffix(pszFilename))
     {
         const char *pszSuff = RTLdrGetSuff();
@@ -2239,5 +2239,5 @@
     const char *pszExt = "";
     size_t cchExt = 0;
-    if (!RTPathHaveExt(pszFilename))
+    if (!RTPathHasSuffix(pszFilename))
     {
         pszExt = RTLdrGetSuff();
@@ -2659,5 +2659,5 @@
 
     memcpy(Req.u.In.szName, pszModule, cchModule + 1);
-    if (!RTPathHasExt(Req.u.In.szName))
+    if (!RTPathHasSuffix(Req.u.In.szName))
     {
         /* Add the default suffix if none is given. */
Index: /trunk/src/VBox/Installer/linux/install_service/generate_service_file.cpp
===================================================================
--- /trunk/src/VBox/Installer/linux/install_service/generate_service_file.cpp	(revision 49038)
+++ /trunk/src/VBox/Installer/linux/install_service/generate_service_file.cpp	(revision 49039)
@@ -585,11 +585,9 @@
             else
             {
-                const char *pcszFileName =
-                    RTPathFilename(pParameters->pcszCommand);
-                const char *pcszExtension =
-                    RTPathExt(pParameters->pcszCommand);
+                const char *pcszFileName = RTPathFilename(pParameters->pcszCommand);
+                const char *pcszSuffix   = RTPathSuffix(pParameters->pcszCommand);
                 char *pszName = RTStrDupN(pcszFileName,
-                                            pcszExtension
-                                          ? pcszExtension - pcszFileName
+                                            pcszSuffix
+                                          ? pcszSuffix - pcszFileName
                                           : RTPATH_MAX);
                 bool fRc;
Index: /trunk/src/VBox/Installer/win/Stub/VBoxStub.cpp
===================================================================
--- /trunk/src/VBox/Installer/win/Stub/VBoxStub.cpp	(revision 49038)
+++ /trunk/src/VBox/Installer/win/Stub/VBoxStub.cpp	(revision 49039)
@@ -626,8 +626,8 @@
 
     RTEXITCODE rcExit;
-    const char *pszExt = RTPathExt(szPkgFile);
-    if (RTStrICmp(pszExt, ".msi") == 0)
+    const char *pszSuff = RTPathSuffix(szPkgFile);
+    if (RTStrICmp(pszSuff, ".msi") == 0)
         rcExit = ProcessMsiPackage(szPkgFile, pszMsiArgs, fLogging);
-    else if (RTStrICmp(pszExt, ".cab") == 0)
+    else if (RTStrICmp(pszSuff, ".cab") == 0)
         rcExit = RTEXITCODE_SUCCESS; /* Ignore .cab files, they're generally referenced by other files. */
     else
Index: /trunk/src/VBox/Main/glue/string.cpp
===================================================================
--- /trunk/src/VBox/Main/glue/string.cpp	(revision 49038)
+++ /trunk/src/VBox/Main/glue/string.cpp	(revision 49039)
@@ -135,9 +135,9 @@
 }
 
-Utf8Str& Utf8Str::stripExt()
-{
-    if (length())
-    {
-        RTPathStripExt(m_psz);
+Utf8Str& Utf8Str::stripSuffix()
+{
+    if (length())
+    {
+        RTPathStripSuffix(m_psz);
         jolt();
     }
Index: /trunk/src/VBox/Main/src-client/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 49038)
+++ /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 49039)
@@ -2739,19 +2739,19 @@
     {
         char *pszAbsPath = RTPathAbsDup(com::Utf8Str(strFile).c_str());
-        char *pszExt = RTPathExt(pszAbsPath);
-        if (pszExt)
-            pszExt = RTStrDup(pszExt);
-        RTPathStripExt(pszAbsPath);
+        char *pszSuff = RTPathSuffix(pszAbsPath);
+        if (pszSuff)
+            pszSuff = RTStrDup(pszSuff);
+        RTPathStripSuffix(pszAbsPath);
         if (!pszAbsPath)
             rc = VERR_INVALID_PARAMETER;
-        if (!pszExt)
-            pszExt = RTStrDup(".webm");
+        if (!pszSuff)
+            pszSuff = RTStrDup(".webm");
         char *pszName = NULL;
         if (RT_SUCCESS(rc))
         {
             if (mcMonitors > 1)
-                rc = RTStrAPrintf(&pszName, "%s-%u%s", pszAbsPath, uScreen+1, pszExt);
+                rc = RTStrAPrintf(&pszName, "%s-%u%s", pszAbsPath, uScreen+1, pszSuff);
             else
-                rc = RTStrAPrintf(&pszName, "%s%s", pszAbsPath, pszExt);
+                rc = RTStrAPrintf(&pszName, "%s%s", pszAbsPath, pszSuff);
         }
         if (RT_SUCCESS(rc))
@@ -2768,10 +2768,10 @@
                                       pszAbsPath, time.i32Year, time.u8Month, time.u8MonthDay,
                                       time.u8Hour, time.u8Minute, time.u8Second, time.u32Nanosecond,
-                                      uScreen+1, pszExt);
+                                      uScreen+1, pszSuff);
                 else
                     rc = RTStrAPrintf(&pszName, "%s-%04d-%02u-%02uT%02u-%02u-%02u-%09uZ%s",
                                       pszAbsPath, time.i32Year, time.u8Month, time.u8MonthDay,
                                       time.u8Hour, time.u8Minute, time.u8Second, time.u32Nanosecond,
-                                      pszExt);
+                                      pszSuff);
                 if (RT_SUCCESS(rc))
                     rc = VideoRecStrmInit(mpVideoRecCtx, uScreen,
@@ -2786,5 +2786,5 @@
             LogRel(("Failed to initialize video recording context #%u (%Rrc)!\n", uScreen, rc));
         RTStrFree(pszName);
-        RTStrFree(pszExt);
+        RTStrFree(pszSuff);
         RTStrFree(pszAbsPath);
     }
Index: /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 49038)
+++ /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 49039)
@@ -788,7 +788,7 @@
         RTPathStripFilename(tmpDir);;
         char *tmpFile = RTStrDup(RTPathFilename(aName.c_str()));
-        RTPathStripExt(tmpFile);
-        const char *tmpExt = RTPathExt(aName.c_str());
-        RTStrAPrintf(&tmpName, "%s%c%s_%d%s", tmpDir, RTPATH_DELIMITER, tmpFile, i, tmpExt);
+        RTPathStripSuffix(tmpFile);
+        const char *pszTmpSuff = RTPathSuffix(aName.c_str());
+        RTStrAPrintf(&tmpName, "%s%c%s_%d%s", tmpDir, RTPATH_DELIMITER, tmpFile, i, pszTmpSuff);
         RTStrFree(tmpFile);
         RTStrFree(tmpDir);
Index: /trunk/src/VBox/Main/src-server/ApplianceImplExport.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/ApplianceImplExport.cpp	(revision 49038)
+++ /trunk/src/VBox/Main/src-server/ApplianceImplExport.cpp	(revision 49039)
@@ -352,5 +352,5 @@
                 if (FAILED(rc)) throw rc;
 
-                Utf8Str strTargetName = Utf8Str(locInfo.strPath).stripPath().stripExt();
+                Utf8Str strTargetName = Utf8Str(locInfo.strPath).stripPath().stripSuffix();
                 strTargetVmdkName = Utf8StrFmt("%s-disk%d.vmdk", strTargetName.c_str(), ++pAppliance->m->cDisks);
                 if (strTargetVmdkName.length() > RTTAR_NAME_MAX)
@@ -388,5 +388,5 @@
                 if (FAILED(rc)) throw rc;
 
-                Utf8Str strTargetName = Utf8Str(locInfo.strPath).stripPath().stripExt();
+                Utf8Str strTargetName = Utf8Str(locInfo.strPath).stripPath().stripSuffix();
                 strTargetVmdkName = Utf8StrFmt("%s-disk%d.iso", strTargetName.c_str(), ++pAppliance->m->cDisks);
                 if (strTargetVmdkName.length() > RTTAR_NAME_MAX)
@@ -2015,5 +2015,5 @@
             Utf8Str strOvaFile = pTask->locInfo.strPath;
             /* Extract the path */
-            Utf8Str strOvfFile = strOvaFile.stripExt().append(".ovf");
+            Utf8Str strOvfFile = strOvaFile.stripSuffix().append(".ovf");
             // Create a memory buffer containing the XML. */
             void *pvBuf = 0;
@@ -2235,5 +2235,5 @@
         {
             // Create & write the manifest file
-            Utf8Str strMfFilePath = Utf8Str(pTask->locInfo.strPath).stripExt().append(".mf");
+            Utf8Str strMfFilePath = Utf8Str(pTask->locInfo.strPath).stripSuffix().append(".mf");
             Utf8Str strMfFileName = Utf8Str(strMfFilePath).stripPath();
             pTask->pProgress->SetNextOperation(BstrFmt(tr("Creating manifest file '%s'"), strMfFileName.c_str()).raw(),
@@ -2371,5 +2371,5 @@
         if (m->fManifest)
         {
-            Utf8Str strMfFile = Utf8Str(strTmpOvf).stripExt().append(".mf");
+            Utf8Str strMfFile = Utf8Str(strTmpOvf).stripSuffix().append(".mf");
             filesList.push_back(pair<Utf8Str, ULONG>(strMfFile , m->ulWeightForXmlOperation)); /* Use 1% of the total for the manifest file upload */
         }
Index: /trunk/src/VBox/Main/src-server/ApplianceImplImport.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/ApplianceImplImport.cpp	(revision 49038)
+++ /trunk/src/VBox/Main/src-server/ApplianceImplImport.cpp	(revision 49039)
@@ -641,8 +641,10 @@
                         /* Figure out from extension which format the image of disk has. */
                         {
-                            char *pszExt = RTPathExt(di.strHref.c_str());
+                            char *pszExt = RTPathSuffix(di.strHref.c_str());
+                            if (pszExt)
+                                pszExt++;
                             /* Get the system properties. */
                             SystemProperties *pSysProps = mVirtualBox->getSystemProperties();
-                            ComObjPtr<MediumFormat> trgFormat = pSysProps->mediumFormatFromExtension(&pszExt[1]);
+                            ComObjPtr<MediumFormat> trgFormat = pSysProps->mediumFormatFromExtension(pszExt);
                             if (trgFormat.isNull())
                             {
@@ -955,5 +957,5 @@
             }
 
-            Utf8Str strMfFile = Utf8Str(pTask->locInfo.strPath).stripExt().append(".mf");
+            Utf8Str strMfFile = Utf8Str(pTask->locInfo.strPath).stripSuffix().append(".mf");
 
             SHASTORAGE storage;
@@ -1101,7 +1103,7 @@
             }
 
-            Utf8Str extension(RTPathExt(pszFilename));
-
-            if (!extension.endsWith(".ovf",Utf8Str::CaseInsensitive))
+            Utf8Str suffix(RTPathSuffix(pszFilename));
+
+            if (!suffix.endsWith(".ovf",Utf8Str::CaseInsensitive))
             {
                 vrc = VERR_FILE_NOT_FOUND;
@@ -1523,5 +1525,5 @@
             throw setError(E_OUTOFMEMORY);
 
-        Utf8Str strMfFile = Utf8Str(pTask->locInfo.strPath).stripExt().append(".mf");
+        Utf8Str strMfFile = Utf8Str(pTask->locInfo.strPath).stripSuffix().append(".mf");
 
         SHASTORAGE storage;
@@ -1573,5 +1575,5 @@
             Utf8Str manifestShaDigest = storage.strDigest;
 
-            Utf8Str strCertFile = Utf8Str(pTask->locInfo.strPath).stripExt().append(".cert");
+            Utf8Str strCertFile = Utf8Str(pTask->locInfo.strPath).stripSuffix().append(".cert");
             if (RTFileExists(strCertFile.c_str()))
             {
@@ -1685,6 +1687,6 @@
         size_t cbMfSize = 0;
         size_t cbCertSize = 0;
-        Utf8Str strMfFile = (Utf8Str(pszFilename)).stripExt().append(".mf");
-        Utf8Str strCertFile = (Utf8Str(pszFilename)).stripExt().append(".cert");
+        Utf8Str strMfFile = (Utf8Str(pszFilename)).stripSuffix().append(".mf");
+        Utf8Str strCertFile = (Utf8Str(pszFilename)).stripSuffix().append(".cert");
 
         /* Skip the OVF file, cause this was read in IAppliance::Read already. */
@@ -2299,5 +2301,5 @@
                 Utf8Str strTempTargetFilename(*strTargetPath);
                 strTempTargetFilename = strTempTargetFilename.stripPath();
-                strTempTargetFilename = strTempTargetFilename.stripExt();
+                strTempTargetFilename = strTempTargetFilename.stripSuffix();
                 Utf8Str vdf = typeOfVirtualDiskFormatFromURI(di.strFormat);
 
@@ -2337,11 +2339,10 @@
             Utf8Str strTrgFormat = "VMDK";
             ULONG lCabs = 0;
-            char *pszExt = NULL;
-
-            if (RTPathHaveExt(strTargetPath->c_str()))
-            {
-                pszExt = RTPathExt(strTargetPath->c_str());
+
+            if (RTPathHasSuffix(strTargetPath->c_str()))
+            {
+                const char *pszSuff = RTPathSuffix(strTargetPath->c_str());
                 /* Figure out which format the user like to have. Default is VMDK. */
-                ComObjPtr<MediumFormat> trgFormat = pSysProps->mediumFormatFromExtension(&pszExt[1]);
+                ComObjPtr<MediumFormat> trgFormat = pSysProps->mediumFormatFromExtension(&pszSuff[1]);
                 if (trgFormat.isNull())
                     throw setError(VBOX_E_NOT_SUPPORTED,
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 49038)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 49039)
@@ -7911,5 +7911,5 @@
 
     strFile = mData->m_strConfigFileFull;       // path/to/machinesfolder/vmname/vmname.vbox
-    strFile.stripExt();                         // path/to/machinesfolder/vmname/vmname
+    strFile.stripSuffix();                      // path/to/machinesfolder/vmname/vmname
     strFile.append(".webm");                    // path/to/machinesfolder/vmname/vmname.webm
 }
@@ -11974,5 +11974,5 @@
     Utf8Str strConfigFileOnly(mData->m_strConfigFileFull);  // path/to/machinesfolder/vmname/vmname.vbox
     strConfigFileOnly.stripPath()                           // vmname.vbox
-                     .stripExt();                           // vmname
+                     .stripSuffix();                        // vmname
     /** @todo hack, make somehow use of ComposeMachineFilename */
     if (mUserData->s.fDirectoryIncludesUUID)
Index: /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp	(revision 49038)
+++ /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp	(revision 49039)
@@ -1134,5 +1134,5 @@
                             if (!mt.strBaseName.isEmpty())
                                 strSrcTest = mt.strBaseName;
-                            strSrcTest.stripExt();
+                            strSrcTest.stripSuffix();
                             /* If the old disk name was in {uuid} format we also
                              * want the new name in this format, but with the
@@ -1142,5 +1142,5 @@
                              * template: "new name-disk1.vdi". */
                             if (strSrcTest == strOldVMName)
-                                strNewName = Utf8StrFmt("%s%s", trgMCF.machineUserData.strName.c_str(), RTPathExt(Utf8Str(bstrSrcName).c_str()));
+                                strNewName = Utf8StrFmt("%s%s", trgMCF.machineUserData.strName.c_str(), RTPathSuffix(Utf8Str(bstrSrcName).c_str()));
                             else if (   strSrcTest.startsWith("{")
                                      && strSrcTest.endsWith("}"))
@@ -1150,8 +1150,9 @@
                                 Guid temp_guid(strSrcTest);
                                 if (temp_guid.isValid() && !temp_guid.isZero())
-                                    strNewName = Utf8StrFmt("%s%s", newId.toStringCurly().c_str(), RTPathExt(strNewName.c_str()));
+                                    strNewName = Utf8StrFmt("%s%s", newId.toStringCurly().c_str(), RTPathSuffix(strNewName.c_str()));
                             }
                             else
-                                strNewName = Utf8StrFmt("%s-disk%d%s", trgMCF.machineUserData.strName.c_str(), ++cDisks, RTPathExt(Utf8Str(bstrSrcName).c_str()));
+                                strNewName = Utf8StrFmt("%s-disk%d%s", trgMCF.machineUserData.strName.c_str(), ++cDisks,
+                                                        RTPathSuffix(Utf8Str(bstrSrcName).c_str()));
                         }
 
Index: /trunk/src/VBox/Runtime/VBox/VBoxRTImp.def
===================================================================
--- /trunk/src/VBox/Runtime/VBox/VBoxRTImp.def	(revision 49038)
+++ /trunk/src/VBox/Runtime/VBox/VBoxRTImp.def	(revision 49039)
@@ -795,10 +795,9 @@
     RTPathExists
     RTPathExistsEx
-    RTPathExt
     RTPathFilename
     RTPathGetCurrent
     RTPathGetMode
-    RTPathHaveExt
     RTPathHavePath
+    RTPathHaveSuffix
     RTPathJoin
     RTPathJoinA
@@ -819,7 +818,8 @@
     RTPathStartsWith
     RTPathStartsWithRoot
-    RTPathStripExt
     RTPathStripFilename
+    RTPathStripSuffix
     RTPathStripTrailingSlash
+    RTPathSuffix
     RTPathTemp
     RTPathTraverseList
Index: /trunk/src/VBox/Runtime/common/path/RTPathExt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/path/RTPathExt.cpp	(revision 49038)
+++ /trunk/src/VBox/Runtime/common/path/RTPathExt.cpp	(revision 49039)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2013 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -33,12 +33,5 @@
 
 
-/**
- * Finds the extension part of in a path.
- *
- * @returns Pointer to extension within pszPath.
- * @returns NULL if no extension.
- * @param   pszPath     Path to find extension in.
- */
-RTDECL(char *) RTPathExt(const char *pszPath)
+RTDECL(char *) RTPathSuffix(const char *pszPath)
 {
     const char *psz = pszPath;
@@ -66,5 +59,5 @@
             /* the end */
             case '\0':
-                if (pszExt)
+                if (pszExt && pszExt != pszPath && pszExt[1])
                     return (char *)(void *)pszExt;
                 return NULL;
Index: /trunk/src/VBox/Runtime/common/path/RTPathHasExt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/path/RTPathHasExt.cpp	(revision 49038)
+++ /trunk/src/VBox/Runtime/common/path/RTPathHasExt.cpp	(revision 49039)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2013 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -34,14 +34,7 @@
 
 
-/**
- * Checks if a path has an extension.
- *
- * @returns true if extension present.
- * @returns false if no extension present.
- * @param   pszPath     Path to check.
- */
-RTDECL(bool) RTPathHasExt(const char *pszPath)
+RTDECL(bool) RTPathHasSuffix(const char *pszPath)
 {
-    return RTPathExt(pszPath) != NULL;
+    return RTPathSuffix(pszPath) != NULL;
 }
 
Index: /trunk/src/VBox/Runtime/common/path/RTPathStripExt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/path/RTPathStripExt.cpp	(revision 49038)
+++ /trunk/src/VBox/Runtime/common/path/RTPathStripExt.cpp	(revision 49039)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2013 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -35,36 +35,9 @@
 
 
-/**
- * Strips the extension from a path.
- *
- * @param   pszPath     Path which extension should be stripped.
- */
-RTDECL(void) RTPathStripExt(char *pszPath)
+RTDECL(void) RTPathStripSuffix(char *pszPath)
 {
-    char *pszDot = NULL;
-    for (;; pszPath++)
-    {
-        switch (*pszPath)
-        {
-            /* handle separators. */
-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
-            case ':':
-            case '\\':
-#endif
-            case '/':
-                pszDot = NULL;
-                break;
-            case '.':
-                pszDot = pszPath;
-                break;
-
-            /* the end */
-            case '\0':
-                if (pszDot)
-                    *pszDot = '\0';
-                return;
-        }
-    }
-    /* will never get here */
+    char *pszSuffix = RTPathSuffix(pszPath);
+    if (pszSuffix)
+        *pszSuffix = '\0';
 }
 
Index: /trunk/src/VBox/Runtime/r3/posix/ldrNative-posix.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/posix/ldrNative-posix.cpp	(revision 49038)
+++ /trunk/src/VBox/Runtime/r3/posix/ldrNative-posix.cpp	(revision 49039)
@@ -46,5 +46,5 @@
      * Do we need to add an extension?
      */
-    if (!RTPathHaveExt(pszFilename))
+    if (!RTPathHasSuffix(pszFilename))
     {
 #if defined(RT_OS_OS2) || defined(RT_OS_WINDOWS)
Index: /trunk/src/VBox/Runtime/r3/win/ldrNative-win.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/win/ldrNative-win.cpp	(revision 49038)
+++ /trunk/src/VBox/Runtime/r3/win/ldrNative-win.cpp	(revision 49039)
@@ -58,5 +58,5 @@
      * Do we need to add an extension?
      */
-    if (!RTPathHaveExt(pszFilename))
+    if (!RTPathHasSuffix(pszFilename))
     {
         size_t cch = strlen(pszFilename);
Index: /trunk/src/VBox/Runtime/testcase/tstRTPath.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstRTPath.cpp	(revision 49038)
+++ /trunk/src/VBox/Runtime/testcase/tstRTPath.cpp	(revision 49039)
@@ -705,7 +705,7 @@
 
     /*
-     * RTPathStripExt
-     */
-    RTTestSub(hTest, "RTPathStripExt");
+     * RTPathStripSuffix
+     */
+    RTTestSub(hTest, "RTPathStripSuffix");
     struct
     {
@@ -725,5 +725,5 @@
 
         strcpy(szPath, pszInput);
-        RTPathStripExt(szPath);
+        RTPathStripSuffix(szPath);
         if (strcmp(szPath, pszResult))
             RTTestIFailed("Unexpected result\n"
Index: /trunk/src/VBox/Storage/Parallels.cpp
===================================================================
--- /trunk/src/VBox/Storage/Parallels.cpp	(revision 49038)
+++ /trunk/src/VBox/Storage/Parallels.cpp	(revision 49039)
@@ -205,6 +205,6 @@
     {
         /* Check if the file has hdd as extension. It is a fixed size raw image then. */
-        char *pszExtension = RTPathExt(pImage->pszFilename);
-        if (strcmp(pszExtension, ".hdd"))
+        char *pszSuffix = RTPathSuffix(pImage->pszFilename);
+        if (strcmp(pszSuffix, ".hdd"))
         {
             rc = VERR_VD_PARALLELS_INVALID_HEADER;
@@ -391,5 +391,5 @@
              */
             uint64_t cbFile;
-            char *pszExtension;
+            char *pszSuffix;
 
             rc = vdIfIoIntFileGetSize(pIfIo, pStorage, &cbFile);
@@ -400,6 +400,6 @@
             }
 
-            pszExtension = RTPathExt(pszFilename);
-            if (!pszExtension || strcmp(pszExtension, ".hdd"))
+            pszSuffix = RTPathSuffix(pszFilename);
+            if (!pszSuffix || strcmp(pszSuffix, ".hdd"))
                 rc = VERR_VD_PARALLELS_INVALID_HEADER;
             else
Index: /trunk/src/VBox/Storage/RAW.cpp
===================================================================
--- /trunk/src/VBox/Storage/RAW.cpp	(revision 49038)
+++ /trunk/src/VBox/Storage/RAW.cpp	(revision 49039)
@@ -349,5 +349,5 @@
     uint64_t cbFile;
     int rc = VINF_SUCCESS;
-    char *pszExtension = NULL;
+    char *pszSuffix = NULL;
 
     PVDINTERFACEIOINT pIfIo = VDIfIoIntGet(pVDIfsImage);
@@ -361,5 +361,5 @@
     }
 
-    pszExtension = RTPathExt(pszFilename);
+    pszSuffix = RTPathSuffix(pszFilename);
 
     /*
@@ -375,8 +375,8 @@
     /* Try to guess the image type based on the extension. */
     if (   RT_SUCCESS(rc)
-        && pszExtension)
-    {
-        if (   !RTStrICmp(pszExtension, ".iso")
-            || !RTStrICmp(pszExtension, ".cdr")) /* DVD images. */
+        && pszSuffix)
+    {
+        if (   !RTStrICmp(pszSuffix, ".iso")
+            || !RTStrICmp(pszSuffix, ".cdr")) /* DVD images. */
         {
             /* Note that there are ISO images smaller than 1 MB; it is impossible to distinguish
@@ -392,9 +392,9 @@
                 rc = VERR_VD_RAW_INVALID_HEADER;
         }
-        else if (   !RTStrICmp(pszExtension, ".img")
-                 || !RTStrICmp(pszExtension, ".ima")
-                 || !RTStrICmp(pszExtension, ".dsk")
-                 || !RTStrICmp(pszExtension, ".flp")
-                 || !RTStrICmp(pszExtension, ".vfd")) /* Floppy images */
+        else if (   !RTStrICmp(pszSuffix, ".img")
+                 || !RTStrICmp(pszSuffix, ".ima")
+                 || !RTStrICmp(pszSuffix, ".dsk")
+                 || !RTStrICmp(pszSuffix, ".flp")
+                 || !RTStrICmp(pszSuffix, ".vfd")) /* Floppy images */
         {
             if (!(cbFile % 512) && cbFile <= RAW_MAX_FLOPPY_IMG_SIZE)
Index: /trunk/src/VBox/Storage/VMDK.cpp
===================================================================
--- /trunk/src/VBox/Storage/VMDK.cpp	(revision 49038)
+++ /trunk/src/VBox/Storage/VMDK.cpp	(revision 49039)
@@ -3429,13 +3429,13 @@
         char pszPartition[1024];
         const char *pszBase = RTPathFilename(pImage->pszFilename);
-        const char *pszExt = RTPathExt(pszBase);
-        if (pszExt == NULL)
+        const char *pszSuff = RTPathSuffix(pszBase);
+        if (pszSuff == NULL)
             return vdIfError(pImage->pIfError, rc, RT_SRC_POS, N_("VMDK: invalid filename '%s'"), pImage->pszFilename);
         char *pszBaseBase = RTStrDup(pszBase);
         if (!pszBaseBase)
             return VERR_NO_MEMORY;
-        RTPathStripExt(pszBaseBase);
+        RTPathStripSuffix(pszBaseBase);
         RTStrPrintf(pszPartition, sizeof(pszPartition), "%s-pt%s",
-                    pszBaseBase, pszExt);
+                    pszBaseBase, pszSuff);
         RTStrFree(pszBaseBase);
 
@@ -3627,7 +3627,7 @@
         else
         {
-            char *pszBasenameExt = RTPathExt(pszBasenameSubstr);
+            char *pszBasenameSuff = RTPathSuffix(pszBasenameSubstr);
             char *pszBasenameBase = RTStrDup(pszBasenameSubstr);
-            RTPathStripExt(pszBasenameBase);
+            RTPathStripSuffix(pszBasenameBase);
             char *pszTmp;
             size_t cbTmp;
@@ -3636,12 +3636,12 @@
                 if (cExtents == 1)
                     RTStrAPrintf(&pszTmp, "%s-flat%s", pszBasenameBase,
-                                 pszBasenameExt);
+                                 pszBasenameSuff);
                 else
                     RTStrAPrintf(&pszTmp, "%s-f%03d%s", pszBasenameBase,
-                                 i+1, pszBasenameExt);
+                                 i+1, pszBasenameSuff);
             }
             else
                 RTStrAPrintf(&pszTmp, "%s-s%03d%s", pszBasenameBase, i+1,
-                             pszBasenameExt);
+                             pszBasenameSuff);
             RTStrFree(pszBasenameBase);
             if (!pszTmp)
@@ -5491,12 +5491,12 @@
     /* Prepare both old and new base names used for string replacement. */
     pszNewBaseName = RTStrDup(RTPathFilename(pszFilename));
-    RTPathStripExt(pszNewBaseName);
+    RTPathStripSuffix(pszNewBaseName);
     pszOldBaseName = RTStrDup(RTPathFilename(pImage->pszFilename));
-    RTPathStripExt(pszOldBaseName);
+    RTPathStripSuffix(pszOldBaseName);
     /* Prepare both old and new full names used for string replacement. */
     pszNewFullName = RTStrDup(pszFilename);
-    RTPathStripExt(pszNewFullName);
+    RTPathStripSuffix(pszNewFullName);
     pszOldFullName = RTStrDup(pImage->pszFilename);
-    RTPathStripExt(pszOldFullName);
+    RTPathStripSuffix(pszOldFullName);
 
     /* --- Up to this point we have not done any damage yet. --- */
Index: /trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h	(revision 49038)
+++ /trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h	(revision 49039)
@@ -1221,4 +1221,5 @@
                 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
                 IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_MEM, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
+/** @todo testcase: make sure it's a 16-bit read. */
 
                 IEM_MC_FETCH_MEM_U16(u16Sel, pIemCpu->iEffSeg, GCPtrEffSrc);
Index: /trunk/src/VBox/VMM/VMMR3/PDMLdr.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/PDMLdr.cpp	(revision 49038)
+++ /trunk/src/VBox/VMM/VMMR3/PDMLdr.cpp	(revision 49039)
@@ -282,5 +282,5 @@
      */
     const char *pszSuff = RTLdrGetSuff();
-    size_t      cchSuff = RTPathHaveExt(pszFilename) ? 0 : strlen(pszSuff);
+    size_t      cchSuff = RTPathHasSuffix(pszFilename) ? 0 : strlen(pszSuff);
     PPDMMOD     pModule = (PPDMMOD)RTMemAllocZ(RT_OFFSETOF(PDMMOD, szFilename[cchFilename + cchSuff + 1]));
     if (pModule)
