[Pkg-virtualbox-commits] [virtualbox] 02/03: Imported Upstream version 5.0.12-dfsg

Gianfranco Costamagna locutusofborg-guest at moszumanska.debian.org
Sat Dec 19 09:57:03 UTC 2015


This is an automated email from the git hooks/post-receive script.

locutusofborg-guest pushed a commit to branch master
in repository virtualbox.

commit 0e8ceefa3d6ee350980cdbadda25c3deef56848f
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date:   Sat Dec 19 10:19:19 2015 +0100

    Imported Upstream version 5.0.12-dfsg
---
 Config.kmk                                         |    7 +-
 configure                                          |    4 +-
 doc/manual/en_US/user_AdvancedTopics.xml           |    2 +-
 doc/manual/en_US/user_Introduction.xml             |    2 +-
 doc/manual/en_US/user_Troubleshooting.xml          |   17 +
 doc/manual/user_ChangeLogImpl.xml                  |  160 +
 include/VBox/VBoxNetCfg-win.h                      |   16 +
 include/VBox/vmm/pdmaudioifs.h                     |   66 +-
 include/iprt/dbg.h                                 |   25 +-
 include/iprt/err.h                                 |    2 +
 include/iprt/file.h                                |    6 +-
 include/iprt/list.h                                |   11 +
 include/iprt/log.h                                 |   28 +-
 include/iprt/mangling.h                            |    1 +
 include/iprt/x86.h                                 |    3 +
 .../common/VBoxService/VBoxServiceAutoMount.cpp    |    6 +-
 src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp  |    2 +
 src/VBox/Additions/linux/drm/vboxvideo_drm.c       |   24 +-
 src/VBox/Additions/linux/installer/vboxadd.sh      |   10 +-
 .../Additions/linux/sharedfolders/mount.vboxsf.c   |    6 +-
 src/VBox/Additions/x11/vboxmouse/Makefile.kmk      |    2 +-
 src/VBox/Additions/x11/vboxvideo/Makefile.kmk      |    2 +-
 src/VBox/Devices/Audio/AudioMixer.cpp              |   22 +-
 src/VBox/Devices/Audio/DevIchAc97.cpp              | 1850 ++--
 src/VBox/Devices/Audio/DevIchHda.cpp               | 2965 ++++---
 src/VBox/Devices/Audio/DevIchHdaCodec.cpp          |    8 +-
 src/VBox/Devices/Audio/DevIchHdaCodec.h            |   12 +-
 src/VBox/Devices/Audio/DevSB16.cpp                 |  221 +-
 src/VBox/Devices/Audio/DrvAudio.cpp                |  377 +-
 src/VBox/Devices/Audio/DrvAudio.h                  |   18 +-
 src/VBox/Devices/Audio/DrvAudioCommon.cpp          |   30 +-
 src/VBox/Devices/Audio/DrvHostALSAAudio.cpp        |   10 +-
 src/VBox/Devices/Audio/DrvHostCoreAudio.cpp        |   50 +-
 src/VBox/Devices/Audio/DrvHostDSound.cpp           |  882 +-
 src/VBox/Devices/Audio/DrvHostNullAudio.cpp        |   36 +-
 src/VBox/Devices/Audio/DrvHostOSSAudio.cpp         |   74 +-
 src/VBox/Devices/Audio/DrvHostPulseAudio.cpp       |   10 +-
 .../Devices/Audio/testcase/tstAudioMixBuffer.cpp   |   18 +-
 src/VBox/Devices/BiosCommonCode/support.asm        |   61 +-
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd      |  Bin 1048576 -> 1048576 bytes
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd      |  Bin 1048576 -> 1048576 bytes
 .../Graphics/BIOS/VBoxVgaBiosAlternative.asm       |    6 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative.md5sum    |    2 +-
 src/VBox/Devices/Graphics/DevVGA_VDMA.cpp          |    4 +
 src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm   | 9168 +++++++++++---------
 .../Devices/PC/BIOS/VBoxBiosAlternative.md5sum     |    2 +-
 src/VBox/Devices/PC/BIOS/ahci.c                    |   63 +-
 src/VBox/Devices/PC/BIOS/ata.c                     |   55 +-
 src/VBox/Devices/PC/BIOS/boot.c                    |    1 +
 src/VBox/Devices/PC/BIOS/disk.c                    |   25 +-
 src/VBox/Devices/PC/BIOS/ebda.h                    |    6 +-
 src/VBox/Devices/PC/BIOS/eltorito.c                |    1 +
 src/VBox/Devices/PC/BIOS/inlines.h                 |   14 +-
 src/VBox/Devices/PC/BIOS/logo.c                    |    1 +
 src/VBox/Devices/PC/BIOS/print.c                   |   31 +-
 src/VBox/Devices/PC/BIOS/scsi.c                    |  105 +-
 src/VBox/Devices/Storage/DrvSCSI.cpp               |   29 +-
 src/VBox/Devices/Storage/HBDMgmt-darwin.cpp        |   30 +-
 src/VBox/Devices/Storage/VBoxSCSI.cpp              |    3 +
 src/VBox/Devices/Storage/VBoxSCSI.h                |    4 +-
 src/VBox/Devices/USB/DevOHCI.cpp                   |   11 +-
 .../Devices/testcase/tstDeviceStructSizeRC.cpp     |   48 +-
 .../Frontends/VBoxManage/VBoxInternalManage.cpp    |    2 +-
 src/VBox/Frontends/VBoxManage/VBoxManageList.cpp   |    2 +-
 src/VBox/Frontends/VirtualBox/VBoxUI.pro           |    1 +
 .../Frontends/VirtualBox/nls/ApprovedLanguages.kmk |    1 +
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts |   20 +-
 .../Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts   |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts | 1058 +--
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts |   12 +-
 .../nls/{VirtualBox_xx_YY.ts => VirtualBox_el.ts}  | 2248 +++--
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts |   71 +-
 .../Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts   |    8 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts |   16 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts |   20 +-
 .../Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts   |   18 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts |   12 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts |   32 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts |   20 +-
 .../Frontends/VirtualBox/nls/VirtualBox_km_KH.ts   |   12 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts |   22 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts |   16 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts |   12 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts |   18 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts |   14 +-
 .../Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts   |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts |   12 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts |   18 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts |   18 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts |   20 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts |   24 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts |   20 +-
 .../Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts   |    8 +-
 .../Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts   |   46 +-
 .../Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts   |   34 +-
 src/VBox/Frontends/VirtualBox/nls/qt_el.ts         | 1967 ++---
 .../Frontends/VirtualBox/src/UIVMInfoDialog.cpp    |   72 +-
 .../src/extradata/UIExtraDataManager.cpp           |  114 +-
 .../VirtualBox/src/globals/VBoxGlobal.cpp          |    7 +
 src/VBox/Frontends/VirtualBox/src/main.cpp         |    4 +-
 .../VirtualBox/src/net/UINetworkReply.cpp          |    4 +-
 .../Frontends/VirtualBox/src/net/UINetworkReply.h  |    1 +
 .../VirtualBox/src/runtime/UIMachineLogic.cpp      |   23 +-
 .../VirtualBox/src/runtime/UIMachineView.cpp       |   29 +-
 .../VirtualBox/src/runtime/UIMultiScreenLayout.cpp |    2 +
 .../Frontends/VirtualBox/src/runtime/UISession.cpp |  197 +-
 .../Frontends/VirtualBox/src/runtime/UISession.h   |   12 +
 .../fullscreen/UIMachineLogicFullscreen.cpp        |   10 +
 .../runtime/fullscreen/UIMachineLogicFullscreen.h  |    2 +
 .../src/runtime/normal/UIMachineLogicNormal.cpp    |    4 +
 .../src/runtime/normal/UIMachineViewNormal.cpp     |    1 +
 .../src/runtime/normal/UIMachineWindowNormal.cpp   |   42 +-
 .../src/runtime/scale/UIMachineViewScale.cpp       |    1 +
 .../runtime/seamless/UIMachineLogicSeamless.cpp    |   10 +
 .../src/runtime/seamless/UIMachineLogicSeamless.h  |    2 +
 .../selector/graphics/chooser/UIGChooserModel.cpp  |   28 +-
 .../selector/graphics/chooser/UIGChooserModel.h    |    3 +-
 .../src/widgets/UIPortForwardingTable.cpp          |   16 +-
 .../src/wizards/newvm/UIWizardNewVMPageBasic1.cpp  |   10 +-
 .../OpenGL/state_tracker/state_framebuffer.c       |   18 +-
 src/VBox/GuestHost/OpenGL/util/vboxhgcm.c          |    7 +
 src/VBox/HostDrivers/Support/SUPDrv.cpp            |    3 +
 src/VBox/HostDrivers/Support/SUPDrvGip.cpp         |   31 +-
 .../Support/win/SUPHardenedVerifyImage-win.cpp     |   16 +
 .../Support/win/SUPR3HardenedMain-win.cpp          |   26 +-
 .../VBoxNetFlt/linux/VBoxNetFlt-linux.c            |   25 +-
 .../HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp  |  365 +-
 src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c |  505 +-
 src/VBox/HostServices/GuestProperties/service.cpp  |    5 +-
 src/VBox/HostServices/SharedFolders/vbsf.cpp       |    8 +-
 src/VBox/Installer/Config.kmk                      |    2 +-
 src/VBox/Installer/common/virtualbox.desktop.in    |    6 +-
 src/VBox/Installer/linux/Makefile.kmk              |   56 +-
 src/VBox/Installer/linux/VBox.sh                   |    4 +-
 src/VBox/Installer/linux/install.sh                |    2 +-
 src/VBox/Installer/linux/postinst-common.sh        |    2 +-
 src/VBox/Installer/linux/prerm-common.sh           |    2 +-
 src/VBox/Installer/linux/routines.sh               |    1 +
 src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec  |    2 +
 src/VBox/Installer/solaris/Makefile.kmk            |    7 +-
 src/VBox/Installer/solaris/checkinstall.sh         |    2 +-
 src/VBox/Installer/solaris/vboxconfig.sh           |    7 +-
 .../win/InstallHelper/VBoxInstallHelper.cpp        |   11 +
 src/VBox/Installer/win/VBoxMergeApp.wxi            |    8 +-
 src/VBox/Installer/win/VBoxMergeApp.wxs            |    6 +
 src/VBox/Installer/win/VBoxMergeNetAdp.wxi         |    8 +-
 src/VBox/Installer/win/VBoxMergeNetAdp.wxs         |   14 +
 src/VBox/Installer/win/VBoxMergeNetAdp6.wxi        |    8 +-
 src/VBox/Installer/win/VBoxMergeNetAdp6.wxs        |   14 +
 src/VBox/Installer/win/VBoxMergeNetFlt.wxi         |    8 +-
 src/VBox/Installer/win/VBoxMergeNetFlt.wxs         |   14 +
 src/VBox/Installer/win/VBoxMergeNetLwf.wxi         |    8 +-
 src/VBox/Installer/win/VBoxMergeNetLwf.wxs         |   14 +
 src/VBox/Installer/win/VirtualBox.wxs              |   34 +-
 src/VBox/Main/include/ExtPackManagerImpl.h         |    2 +-
 src/VBox/Main/src-all/ExtPackManagerImpl.cpp       |   84 +-
 src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp  |   24 +-
 src/VBox/Main/src-all/win/VirtualBox_rgs.xsl       |    2 +-
 src/VBox/Main/src-client/ConsoleImpl2.cpp          |    8 +-
 src/VBox/Main/src-client/DrvAudioVRDE.cpp          |    6 +-
 src/VBox/Main/src-server/HostImpl.cpp              |    2 +-
 src/VBox/Main/src-server/MachineImpl.cpp           |   63 +-
 src/VBox/Main/src-server/linux/HostPowerLinux.cpp  |    1 +
 src/VBox/Main/src-server/win/NetIf-win.cpp         |  671 +-
 src/VBox/Makefile.kmk                              |    2 +
 src/VBox/RDP/client-1.8.3/Makefile.kmk             |    2 +
 src/VBox/Runtime/Makefile.kmk                      |    3 +-
 src/VBox/Runtime/common/ldr/ldrEx.cpp              |   23 +
 src/VBox/Runtime/common/ldr/ldrPE.cpp              |   19 +-
 src/VBox/Runtime/common/misc/sg.cpp                |   12 +-
 src/VBox/Runtime/generic/critsectrw-generic.cpp    |   55 +-
 src/VBox/Runtime/generic/http-curl.cpp             |    2 +-
 src/VBox/Runtime/include/internal/ldr.h            |    1 +
 .../r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp      |    2 +-
 .../r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c      |   99 +-
 .../Runtime/r0drv/solaris/initterm-r0drv-solaris.c |   14 +-
 src/VBox/Runtime/r3/fileio.cpp                     |   12 +-
 src/VBox/Runtime/r3/linux/sched-linux.cpp          |    2 +-
 src/VBox/Runtime/r3/posix/sched-posix.cpp          |    2 +-
 .../Runtime/r3/win/RTSystemQueryOSInfo-win.cpp     |    4 +
 src/VBox/Runtime/r3/win/fileio-win.cpp             |    7 +
 src/VBox/Runtime/r3/win/init-win.cpp               |   28 +-
 src/VBox/Runtime/r3/win/internal-r3-win.h          |   23 +-
 src/VBox/Runtime/testcase/tstRTR0DbgKrnlInfo.cpp   |    8 +-
 src/VBox/VMM/VMMR0/GVMMR0.cpp                      |  228 +-
 src/VBox/VMM/VMMR0/HMR0.cpp                        |   33 +-
 src/VBox/VMM/VMMR3/HM.cpp                          |    3 +-
 src/VBox/VMM/VMMR3/VM.cpp                          |    6 +-
 src/VBox/VMM/VMMR3/VMReq.cpp                       |    4 +-
 src/VBox/VMM/include/HMInternal.h                  |    3 +-
 src/libs/Makefile.kmk                              |   10 +-
 src/libs/xpcom18a4/Makefile.kmk                    |    1 +
 .../xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp |    2 +
 198 files changed, 15180 insertions(+), 10733 deletions(-)

diff --git a/Config.kmk b/Config.kmk
index 4fd6f9c..93abaac 100644
--- a/Config.kmk
+++ b/Config.kmk
@@ -208,7 +208,7 @@ VBOX_VERSION_MINOR = 0
 # This is the current build number. It should be increased every time we publish a
 # new build. The define is available in every source file. Only even build numbers
 # will be published, odd numbers are set during development.
-VBOX_VERSION_BUILD = 10
+VBOX_VERSION_BUILD = 12
 # The raw version string. This *must not* contain any other information/fields than
 # major, minor and build revision (as it is now) -- also will be used for host/guest version
 # comparison.
@@ -3188,7 +3188,7 @@ SDK_VBOX_LIBXML2_DEFS.win += WIN32 _WINDOWS _MBCS
 # libxml against VBoxRT
 
 SDK_VBOX_LIBPNG       = .
-SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.2.53
+SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.2.54
 SDK_VBOX_LIBPNG_LIBS ?= $(PATH_STAGE_LIB)/VBox-libpng$(VBOX_SUFF_LIB)
 
 SDK_VBOX_ZLIB         = .
@@ -6163,7 +6163,7 @@ endif
 SVN                    ?= svn$(HOSTSUFF_EXE)
 VBOX_SVN_REV_KMK        = $(PATH_OUT)/revision.kmk
 ifndef VBOX_SVN_REV
- VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 104061 $  )
+ VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 104815 $  )
  VBOX_SVN_DEP          := $(firstword $(wildcard $(PATH_ROOT)/.svn/wc.db $(abspath $(PATH_ROOT)/../.svn/wc.db) $(abspath $(PATH_ROOT)/../../.svn/wc.db) $(PATH_ROOT)/.svn/entries))
  ifeq ($(which $(SVN)),)
   VBOX_SVN_DEP         :=
@@ -6315,3 +6315,4 @@ st stat status:
 quick:
 	$(MAKE) VBOX_QUICK=1
 
+
diff --git a/configure b/configure
index 0bdf331..e899ccc 100755
--- a/configure
+++ b/configure
@@ -435,9 +435,9 @@ check_gcc()
              -o \( $cc_maj -eq 3 -a $cc_min -lt 2 \) \
              -o \( $cc_maj -eq 4 -a $cc_min -lt 1 -a "$OS" != "darwin" \) \
              -o \( $cc_maj -eq 4 -a $cc_min -gt 9 \) \
-             -o \( $cc_maj -eq 5 -a $cc_min -gt 2 \) \
+             -o \( $cc_maj -eq 5 -a $cc_min -gt 3 \) \
              -o $cc_maj -gt 5 ]; then
-        log_failure "gcc version $cc_maj.$cc_min found, expected gcc 3.x with x>1 or gcc 4.x with 0<x<10 or gcc 5.2"
+        log_failure "gcc version $cc_maj.$cc_min found, expected gcc 3.x with x>1 or gcc 4.x with 0<x<10 or gcc 5.3"
         fail really
       else
         log_success "found version $cc_ver"
diff --git a/doc/manual/en_US/user_AdvancedTopics.xml b/doc/manual/en_US/user_AdvancedTopics.xml
index 7d0a1d9..0cd9940 100644
--- a/doc/manual/en_US/user_AdvancedTopics.xml
+++ b/doc/manual/en_US/user_AdvancedTopics.xml
@@ -2040,7 +2040,7 @@ VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpLive 1</screen>At
       <title>VM selector customization</title>
       <para>The following per-machine VM extradata settings can be used to change the
         behavior of the VM selector window in respect of certain VMs:</para>
-      <screen>VBoxManage setextradata "VM name" true</screen>
+      <screen>VBoxManage setextradata "VM name" SETTING true</screen>
       <para>where <computeroutput>SETTING</computeroutput> can be:</para>
       <glosslist>
         <glossentry>
diff --git a/doc/manual/en_US/user_Introduction.xml b/doc/manual/en_US/user_Introduction.xml
index 1280846..34d1ac9 100644
--- a/doc/manual/en_US/user_Introduction.xml
+++ b/doc/manual/en_US/user_Introduction.xml
@@ -596,7 +596,7 @@
 
               <listitem>
                 <para>Disk image encryption with AES algorithm;
-                  see <xref linkend="vrde-crypt" />.</para>
+                  see <xref linkend="diskencryption" />.</para>
               </listitem>
             </orderedlist></para>
 
diff --git a/doc/manual/en_US/user_Troubleshooting.xml b/doc/manual/en_US/user_Troubleshooting.xml
index a91127b..9516bb0 100644
--- a/doc/manual/en_US/user_Troubleshooting.xml
+++ b/doc/manual/en_US/user_Troubleshooting.xml
@@ -770,6 +770,23 @@
     </sect2>
 
     <sect2>
+      <title>PCnet driver failure in 32-bit Windows Server 2003 guests</title>
+
+      <para>Certain editions of Windows 2000 and 2003 servers support more
+      than 4 GB RAM on 32-bit systems. The AMD PCnet network driver shipped with 
+      Windows Server 2003 fails to load if the 32-bit guest OS uses paging
+      extensions (which will occur with more than approximately 3.5 GB RAM
+      assigned to the VM).</para>
+
+      <para>This problem is known to occur with version 4.38.0.0 of the PCnet
+      driver. The issue was fixed in version 4.51.0.0 of the driver, which
+      is available as a separate download. An alternative solution may be
+      changing the emulated NIC type to Intel PRO/1000 MT Desktop (82540EM),
+      or reducing the RAM assigned to the VM to approximately 3.5 GB or less.
+      </para>
+    </sect2>
+
+    <sect2>
       <title>No networking in Windows Vista guests</title>
 
       <para>With Windows Vista, Microsoft dropped support for the AMD PCNet
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
index 4a58da6..1af6bea 100644
--- a/doc/manual/user_ChangeLogImpl.xml
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -3,6 +3,166 @@
 <chapter> <!-- HACK ALERT! Seems we must have a single top level element for xi:include to work.
                            So, we use chapter and xpointer="xpointer(/chapter/)" with xi:include. -->
   <sect1>
+    <title>Version 5.0.12 (2015-12-18)</title>
+
+    <para>This is a maintenance release. The following items were fixed and/or
+      added:</para>
+
+    <itemizedlist>
+
+      <listitem>
+        <para>GUI: fixed wrong scrolling behaviour in the VM selector window
+          when a VM item is dragged out of the chooser-pane area</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fixed the validation of IPv6 port-forwarding rules</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: suppress the first-run wizard if a CD/DVD medium is
+          inserted using the selector UI</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fixed the Ctrl+Break key sequence scan codes
+          (bug #14927)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: improved handling of text selection mouse pointer (bug #750)</para>
+      </listitem>
+
+      <listitem>
+        <para>Host services: fixed a crash during VM shutdown under rare
+          conditions (5.0.6 regression; bug #14841)</para>
+      </listitem>
+
+      <listitem>
+        <para>Shared folders: fixed a sharing violation if a file is opened
+          to check the attributes (Windows hosts only; bug #14450)</para>
+      </listitem>
+
+      <listitem>
+        <para>Webcam: passthrough fix for certain devices (Mac OS X hosts only)</para>
+      </listitem>
+
+      <listitem>
+        <para>XHCI: fixed broken emulation if software virtualization is used</para>
+      </listitem>
+
+      <listitem>
+        <para>XHCI: several fixes</para>
+      </listitem>
+
+      <listitem>
+        <para>3D: fixed state handling under certain conditions (bug #13487)</para>
+      </listitem>
+
+      <listitem>
+        <para>Audio: several fixes</para>
+      </listitem>
+
+      <listitem>
+        <para>BIOS: added LBA64 support for being able to boot from huge hard
+          disks(bug #7415)</para>
+      </listitem>
+
+      <listitem>
+        <para>EFI: fix for Windows 10 guests</para>
+      </listitem>
+
+      <listitem>
+        <para>ExtPack: before installing an Extension Pack check if there are
+          VMs running to prevent file system locking issues</para>
+      </listitem>
+
+      <listitem>
+        <para>rdesktop-vrdp: source code tarball fixes</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed hang when using VBoxAuthSimple library for
+          VRDP external authentication (bug #14931)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed a regression which prevented it to attach to
+          a physical network adapter having TCP/IP disabled (bug #14578)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed a regression which caused multi-port adapters
+          to be shown as a single adapter (bugs #14558, #14622)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed a regression which caused created host-only
+          adapters to not appear in the list (bug #14437)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed host-only adapter creation issues related
+          to Windows 10 (bugs #14040, #14545)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux hosts: .desktop file compatibility issue (bug #14808)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux hosts / guests: fixes for RHEL 7.2 (bug #14866)</para>
+      </listitem>
+
+      <listitem>
+        <para>The command for recompiling the host kernel modules was changed
+           again, to <emphasis>/sbin/rcvboxdrv setup</emphasis> (bug
+           #14723)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux hosts: some fixes for PCI passthrough (still highly
+          experimental)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux/Mac OS X hosts: fixed a VM hang during startup under certain
+          circumstances (bug #14933)</para>
+      </listitem>
+
+      <listitem>
+        <para>Solaris hosts: added Python 2.7 bindings</para>
+      </listitem>
+
+      <listitem>
+        <para>Mac OS X hosts: fixed a possible crash when the default input or
+          output audio device changes</para>
+      </listitem>
+
+      <listitem>
+        <para>Mac OS X hosts: fixed a panic under certain conditions</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux Additions: prevent the compiler from doing dead-code
+          elemination on vital code in guest / host communication (bug #14497)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux Additions: when mounting a shared folder, explicitly pass
+          the share name so that /proc/mounts contains this name instead of 'none'</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux Additions: workaround for a systemd problem in conjunction
+          with SELinux which prevented to properly enable the 'vboxadd' service
+          during while upgrading the Additions</para>
+      </listitem>
+
+    </itemizedlist>
+  </sect1>
+
+  <sect1>
     <title>Version 5.0.10 (2015-11-10)</title>
 
     <para>This is a maintenance release. The following items were fixed and/or
diff --git a/include/VBox/VBoxNetCfg-win.h b/include/VBox/VBoxNetCfg-win.h
index 7e93792..6cd8009 100644
--- a/include/VBox/VBoxNetCfg-win.h
+++ b/include/VBox/VBoxNetCfg-win.h
@@ -27,6 +27,15 @@
 #ifndef ___VBox_VBoxNetCfg_win_h
 #define ___VBox_VBoxNetCfg_win_h
 
+/*
+ * Defining VBOXNETCFG_DELAYEDRENAME postpones renaming of host-only adapter
+ * connection during adapter creation after it has been assigned with an
+ * IP address. This hopefully prevents collisions that may happen when we
+ * attempt to rename a connection too early, while its configuration is
+ * still being 'committed' by the network setup engine.
+ */
+#define VBOXNETCFG_DELAYEDRENAME
+
 #include <winsock2.h>
 #include <Windows.h>
 #include <Netcfgn.h>
@@ -70,9 +79,16 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinNetLwfUninstall(IN INetCfg *pNc);
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinNetAdpUninstall(IN INetCfg *pNc, IN LPCWSTR pwszId);
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinNetAdpInstall(IN INetCfg *pNc,IN LPCWSTR const pInfFullPath);
 
+#ifndef VBOXNETCFG_DELAYEDRENAME
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWSTR pInfPath, IN bool bIsInfPathFile,
                                                                         OUT GUID *pGuid, OUT BSTR *lppszName,
                                                                         OUT BSTR *pErrMsg);
+#else /* VBOXNETCFG_DELAYEDRENAME */
+VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWSTR pInfPath, IN bool bIsInfPathFile,
+                                                                        OUT GUID *pGuid, OUT BSTR *lppszId,
+                                                                        OUT BSTR *pErrMsg);
+VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRenameHostOnlyConnection(IN const GUID *pGuid, IN LPCWSTR pszId,  OUT BSTR *pDevName);
+#endif /* VBOXNETCFG_DELAYEDRENAME */
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinUpdateHostOnlyNetworkInterface(LPCWSTR pcsxwInf, BOOL *pbRebootRequired, LPCWSTR pcsxwId);
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRemoveHostOnlyNetworkInterface(IN const GUID *pGUID, OUT BSTR *pErrMsg);
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRemoveAllNetDevicesOfId(IN LPCWSTR lpszPnPId);
diff --git a/include/VBox/vmm/pdmaudioifs.h b/include/VBox/vmm/pdmaudioifs.h
index 7789653..51754e6 100644
--- a/include/VBox/vmm/pdmaudioifs.h
+++ b/include/VBox/vmm/pdmaudioifs.h
@@ -308,7 +308,7 @@ typedef uint32_t PDMAUDIOSTRMSTS;
 
 /** No flags being set. */
 #define PDMAUDIOSTRMSTS_FLAG_NONE            0
-/** Whether this stream General Enabled or disabled flag. */
+/** Whether this stream is enabled or disabled. */
 #define PDMAUDIOSTRMSTS_FLAG_ENABLED         RT_BIT_32(0)
 /** Whether this stream has been paused or not. This also implies
  *  that this is an enabled stream! */
@@ -421,6 +421,55 @@ typedef struct PDMAUDIOGSTSTRMOUT
 
 /** Pointer to a audio connector interface. */
 typedef struct PDMIAUDIOCONNECTOR *PPDMIAUDIOCONNECTOR;
+
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+/**
+ * Audio callback types. These are all kept generic as those
+ * are used by all device emulations across all backends.
+ */
+typedef enum PDMAUDIOCALLBACKTYPE
+{
+    PDMAUDIOCALLBACKTYPE_GENERIC = 0,
+    PDMAUDIOCALLBACKTYPE_INPUT,
+    PDMAUDIOCALLBACKTYPE_OUTPUT
+} PDMAUDIOCALLBACKTYPE;
+
+/**
+ * Callback data for audio input.
+ */
+typedef struct PDMAUDIOCALLBACKDATAIN
+{
+    /** Input: How many bytes are availabe as input for passing
+     *         to the device emulation. */
+    uint32_t cbInAvail;
+    /** Output: How many bytes have been read. */
+    uint32_t cbOutRead;
+} PDMAUDIOCALLBACKDATAIN, *PPDMAUDIOCALLBACKDATAIN;
+
+/**
+ * Callback data for audio output.
+ */
+typedef struct PDMAUDIOCALLBACKDATAOUT
+{
+    /** Input:  How many bytes are free for the device emulation to write. */
+    uint32_t cbInFree;
+    /** Output: How many bytes were written by the device emulation. */
+    uint32_t cbOutWritten;
+} PDMAUDIOCALLBACKDATAOUT, *PPDMAUDIOCALLBACKDATAOUT;
+
+/**
+ * Structure for keeping an audio callback.
+ */
+typedef struct PDMAUDIOCALLBACK
+{
+    RTLISTANCHOR          Node;
+    PDMAUDIOCALLBACKTYPE  enmType;
+    void                 *pvCtx;
+    size_t                cbCtx;
+    DECLR3CALLBACKMEMBER(int, pfnCallback, (PDMAUDIOCALLBACKTYPE enmType, void *pvCtx, size_t cbCtx, void *pvUser, size_t cbUser));
+} PDMAUDIOCALLBACK, *PPDMAUDIOCALLBACK;
+#endif
+
 /**
  * Audio connector interface (up).
  */
@@ -435,10 +484,10 @@ typedef struct PDMIAUDIOCONNECTOR
      * @param   pInterface      Pointer to the interface structure containing the called function pointer.
      * @param   pGstStrmIn      Pointer to guest input stream to write to.
      * @param   pvBuf           Where to store the read data.
-     * @param   cbSize          Number of bytes to read.
+     * @param   cbBuf           Number of bytes to read.
      * @param   pcbRead         Bytes of audio data read. Optional.
      */
-    DECLR3CALLBACKMEMBER(int, pfnRead, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn, void *pvBuf, uint32_t cbSize, uint32_t *pcbRead));
+    DECLR3CALLBACKMEMBER(int, pfnRead, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn, void *pvBuf, uint32_t cbBuf, uint32_t *pcbRead));
 
     /**
      * Writes PCM audio data to the host (output).
@@ -447,10 +496,10 @@ typedef struct PDMIAUDIOCONNECTOR
      * @param   pInterface      Pointer to the interface structure containing the called function pointer.
      * @param   pGstStrmOut     Pointer to guest output stream to read from.
      * @param   pvBuf           Audio data to be written.
-     * @param   cbSize          Number of bytes to be written.
+     * @param   cbBuf           Number of bytes to be written.
      * @param   pcbWritten      Bytes of audio data written. Optional.
      */
-    DECLR3CALLBACKMEMBER(int, pfnWrite, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut, const void *pvBuf, uint32_t cbSize, uint32_t *pcbWritten));
+    DECLR3CALLBACKMEMBER(int, pfnWrite, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut, const void *pvBuf, uint32_t cbBuf, uint32_t *pcbWritten));
 
     /**
      * Checks whether a specific guest input stream is active or not.
@@ -567,6 +616,11 @@ typedef struct PDMIAUDIOCONNECTOR
      */
     DECLR3CALLBACKMEMBER(int, pfnPlayOut, (PPDMIAUDIOCONNECTOR pInterface, uint32_t *pcSamplesPlayed));
 
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    DECLR3CALLBACKMEMBER(int, pfnRegisterCallbacks, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOCALLBACK paCallbacks, size_t cCallbacks));
+    DECLR3CALLBACKMEMBER(int, pfnCallback, (PPDMIAUDIOCONNECTOR pInterface, PDMAUDIOCALLBACKTYPE enmType, void *pvUser, size_t cbUser));
+#endif
+
 } PDMIAUDIOCONNECTOR;
 
 /** PDMIAUDIOCONNECTOR interface ID. */
@@ -574,7 +628,7 @@ typedef struct PDMIAUDIOCONNECTOR
 
 
 /**
- * Assign all needed interface callbacks for an audio backend.
+ * Assigns all needed interface callbacks for an audio backend.
  *
  * @param   a_NamePrefix        The function name prefix.
  */
diff --git a/include/iprt/dbg.h b/include/iprt/dbg.h
index e387ac4..4e607a8 100644
--- a/include/iprt/dbg.h
+++ b/include/iprt/dbg.h
@@ -1590,11 +1590,13 @@ RTR0DECL(uint32_t)  RTR0DbgKrnlInfoRelease(RTDBGKRNLINFO hKrnlInfo);
  * @retval  VERR_INVALID_POINTER if any of the pointers are bad.
  *
  * @param   hKrnlInfo       The kernel info handle.
+ * @param   pszModule       The name of the module to search, pass NULL to
+ *                          search the default kernel module(s).
  * @param   pszStructure    The structure name.
  * @param   pszMember       The member name.
  * @param   poffMember      Where to return the offset.
  */
-RTR0DECL(int)       RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszStructure,
+RTR0DECL(int)       RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszModule, const char *pszStructure,
                                                const char *pszMember, size_t *poffMember);
 
 
@@ -1622,6 +1624,27 @@ RTR0DECL(int)       RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const ch
  */
 RTR0DECL(int)       RTR0DbgKrnlInfoQuerySymbol(RTDBGKRNLINFO hKrnlInfo, const char *pszModule,
                                                const char *pszSymbol, void **ppvSymbol);
+
+
+/**
+ * Queries the size (in bytes) of a kernel data type.
+ *
+ * @returns IPRT status code.
+ * @retval  VINF_SUCCESS and size at @a pcbType.
+ * @retval  VERR_NOT_FOUND if the type was not found.
+ * @retval  VERR_INVALID_HANDLE if hKrnlInfo is bad.
+ * @retval  VERR_INVALID_POINTER if any of the pointers are bad.
+ * @retval  VERR_WRONG_TYPE if the type was not a valid data type (e.g. a
+ *          function)
+ *
+ * @param   hKrnlInfo       The kernel info handle.
+ * @param   pszModule       The name of the module to search, pass NULL to
+ *                          search the default kernel module(s).
+ * @param   pszType         The type name.
+ * @param   pcbType         Where to return the size of the type.
+ */
+RTR0DECL(int)       RTR0DbgKrnlInfoQuerySize(RTDBGKRNLINFO hKrnlInfo, const char *pszModule,
+                                             const char *pszType, size_t *pcbType);
 /** @} */
 
 /** @} */
diff --git a/include/iprt/err.h b/include/iprt/err.h
index e26d669..d566af4 100644
--- a/include/iprt/err.h
+++ b/include/iprt/err.h
@@ -1707,6 +1707,8 @@ RT_C_DECLS_END
 #define VERR_HTTP_REDIRECTED                    (-894)
 /** Proxy couldn't be resolved. */
 #define VERR_HTTP_PROXY_NOT_FOUND               (-895)
+/** The remote host couldn't be resolved. */
+#define VERR_HTTP_HOST_NOT_FOUND                (-896)
 /** Unexpected cURL error configure the proxy. */
 #define VERR_HTTP_CURL_PROXY_CONFIG             (-897)
 /** Generic CURL error. */
diff --git a/include/iprt/file.h b/include/iprt/file.h
index 06aef69..01cc972 100644
--- a/include/iprt/file.h
+++ b/include/iprt/file.h
@@ -97,6 +97,10 @@ RTDECL(int) RTFileQuerySize(const char *pszPath, uint64_t *pcbFile);
 
 /** @name Open flags
  * @{ */
+/** Attribute access only.
+ * @remarks Only accepted on windows, requires RTFILE_O_ACCESS_ATTR_MASK
+ *          to yield a non-zero result.  Otherwise, this is invalid. */
+#define RTFILE_O_ATTR_ONLY              UINT32_C(0x00000000)
 /** Open the file with read access. */
 #define RTFILE_O_READ                   UINT32_C(0x00000001)
 /** Open the file with write access. */
@@ -104,7 +108,7 @@ RTDECL(int) RTFileQuerySize(const char *pszPath, uint64_t *pcbFile);
 /** Open the file with read & write access. */
 #define RTFILE_O_READWRITE              UINT32_C(0x00000003)
 /** The file access mask.
- * @remarks The value 0 is invalid. */
+ * @remarks The value 0 is invalid, except for windows special case. */
 #define RTFILE_O_ACCESS_MASK            UINT32_C(0x00000003)
 
 /** Open file in APPEND mode, so all writes to the file handle will
diff --git a/include/iprt/list.h b/include/iprt/list.h
index 7edb2db..a64d610 100644
--- a/include/iprt/list.h
+++ b/include/iprt/list.h
@@ -69,6 +69,17 @@ typedef RTLISTANCHOR *PRTLISTANCHOR;
 /** Pointer to a const doubly linked list anchor. */
 typedef RTLISTANCHOR const *PCRTLISTANCHOR;
 
+/** Version of RTLISTNODE for holding a ring-3 only list in data which gets
+ * shared between multiple contexts */
+#if defined(IN_RING3)
+typedef RTLISTNODE RTLISTNODER3;
+#else
+typedef struct { RTR3PTR aOffLimits[2]; } RTLISTNODER3;
+#endif
+/** Version of RTLISTANCHOR for holding a ring-3 only list in data which gets
+ * shared between multiple contexts */
+typedef RTLISTNODER3 RTLISTANCHORR3;
+
 
 /**
  * Initialize a list.
diff --git a/include/iprt/log.h b/include/iprt/log.h
index fb423c5..1e0c5ca 100644
--- a/include/iprt/log.h
+++ b/include/iprt/log.h
@@ -736,7 +736,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define LogFunc(a)   _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define LogFunc(a)   do { Log((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log(a); } while (0)
+# define LogFunc(a)   do { Log((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log(a); } while (0)
 #endif
 
 /** @def Log2Func
@@ -750,7 +750,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log2Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log2Func(a)  do { Log2((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log2(a); } while (0)
+# define Log2Func(a)  do { Log2((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log2(a); } while (0)
 #endif
 
 /** @def Log3Func
@@ -764,7 +764,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log3Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log3Func(a)  do { Log3((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log3(a); } while (0)
+# define Log3Func(a)  do { Log3((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log3(a); } while (0)
 #endif
 
 /** @def Log4Func
@@ -778,7 +778,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log4Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log4Func(a)  do { Log4((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log4(a); } while (0)
+# define Log4Func(a)  do { Log4((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log4(a); } while (0)
 #endif
 
 /** @def Log5Func
@@ -792,7 +792,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log5Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log5Func(a)  do { Log5((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log5(a); } while (0)
+# define Log5Func(a)  do { Log5((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log5(a); } while (0)
 #endif
 
 /** @def Log6Func
@@ -806,7 +806,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log6Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log6Func(a)  do { Log6((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log6(a); } while (0)
+# define Log6Func(a)  do { Log6((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log6(a); } while (0)
 #endif
 
 /** @def Log7Func
@@ -820,7 +820,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log7Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log7Func(a)  do { Log7((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log7(a); } while (0)
+# define Log7Func(a)  do { Log7((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log7(a); } while (0)
 #endif
 
 /** @def Log8Func
@@ -834,7 +834,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log8Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log8Func(a)  do { Log8((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log8(a); } while (0)
+# define Log8Func(a)  do { Log8((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log8(a); } while (0)
 #endif
 
 /** @def Log9Func
@@ -848,7 +848,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log9Func(a)  _LogIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log9Func(a)  do { Log9((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log9(a); } while (0)
+# define Log9Func(a)  do { Log9((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log9(a); } while (0)
 #endif
 
 /** @def Log10Func
@@ -862,7 +862,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log10Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log10Func(a) do { Log10((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log10(a); } while (0)
+# define Log10Func(a) do { Log10((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log10(a); } while (0)
 #endif
 
 /** @def Log11Func
@@ -876,7 +876,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log11Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log11Func(a) do { Log11((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log11(a); } while (0)
+# define Log11Func(a) do { Log11((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log11(a); } while (0)
 #endif
 
 /** @def Log12Func
@@ -890,7 +890,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 #ifdef LOG_USE_C99
 # define Log12Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define Log12Func(a) do { Log12((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); Log12(a); } while (0)
+# define Log12Func(a) do { Log12((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log12(a); } while (0)
 #endif
 
 /** @def LogFlowFunc
@@ -906,7 +906,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
     _LogIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
 # define LogFlowFunc(a) \
-    do { LogFlow((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogFlow(a); } while (0)
+    do { LogFlow((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); LogFlow(a); } while (0)
 #endif
 
 /** @def LogWarnFunc
@@ -1583,7 +1583,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 # define LogRelFunc(a) \
     _LogRelItLikely(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a )
 #else
-# define LogRelFunc(a)      do { LogRel((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRel(a); } while (0)
+# define LogRelFunc(a)      do { LogRel((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); LogRel(a); } while (0)
 #endif
 
 /** @def LogRelFlowFunc
diff --git a/include/iprt/mangling.h b/include/iprt/mangling.h
index 9f42899..37865ae 100644
--- a/include/iprt/mangling.h
+++ b/include/iprt/mangling.h
@@ -1149,6 +1149,7 @@
 # define RTR0AssertPanicSystem                          RT_MANGLER(RTR0AssertPanicSystem)      /* r0drv */
 # define RTR0DbgKrnlInfoOpen                            RT_MANGLER(RTR0DbgKrnlInfoOpen)        /* r0drv */
 # define RTR0DbgKrnlInfoQueryMember                     RT_MANGLER(RTR0DbgKrnlInfoQueryMember) /* r0drv */
+# define RTR0DbgKrnlInfoQuerySize                       RT_MANGLER(RTR0DbgKrnlInfoQuerySize)   /* r0drv */
 # define RTR0DbgKrnlInfoQuerySymbol                     RT_MANGLER(RTR0DbgKrnlInfoQuerySymbol) /* r0drv */
 # define RTR0DbgKrnlInfoRelease                         RT_MANGLER(RTR0DbgKrnlInfoRelease)     /* r0drv */
 # define RTR0DbgKrnlInfoRetain                          RT_MANGLER(RTR0DbgKrnlInfoRetain)      /* r0drv */
diff --git a/include/iprt/x86.h b/include/iprt/x86.h
index 9de4a72..f828473 100644
--- a/include/iprt/x86.h
+++ b/include/iprt/x86.h
@@ -1069,6 +1069,9 @@ AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00040000)) == 0);
 /** BIOS update signature (microcode). */
 #define MSR_IA32_BIOS_SIGN_ID               0x8B
 
+/** SMM monitor control. */
+#define MSR_IA32_SMM_MONITOR_CTL            0x9B
+
 /** General performance counter no. 0. */
 #define MSR_IA32_PMC0                       0xC1
 /** General performance counter no. 1. */
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
index 13f370b..444d52d 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
@@ -341,7 +341,7 @@ static int vbsvcAutoMountSharedFolder(const char *pszShareName, const char *pszM
         strcpy(mntinf.name, pszShareName);
         strcpy(mntinf.nls_name, "\0");
 
-        int r = mount(NULL,
+        int r = mount(pszShareName,
                       pszMountPoint,
                       "vboxsf",
                       fFlags,
@@ -402,7 +402,7 @@ static int vbsvcAutoMountSharedFolder(const char *pszShareName, const char *pszM
                     /* We checked before that we have enough space */
                     strcpy(mntinf.name, pszMountPoint + cchCWD);
                 }
-                r = mount(NULL, pszMountPoint, "vboxsf", fFlags, &mntinf);
+                r = mount(mntinf.name, pszMountPoint, "vboxsf", fFlags, &mntinf);
             }
             if (errno == EPROTO)
             {
@@ -416,7 +416,7 @@ static int vbsvcAutoMountSharedFolder(const char *pszShareName, const char *pszM
                 mntinf_old.uid = mntinf.uid;
                 mntinf_old.gid = mntinf.gid;
                 mntinf_old.ttl = mntinf.ttl;
-                r = mount(NULL, pszMountPoint, "vboxsf", fFlags, &mntinf_old);
+                r = mount(mntinf_old.name, pszMountPoint, "vboxsf", fFlags, &mntinf_old);
             }
             if (r == -1) /* Was there some error from one of the tries above? */
             {
diff --git a/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp b/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp
index a353853..6468336 100644
--- a/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp
+++ b/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp
@@ -169,6 +169,8 @@ RTDECL(int) VBoxHGSMIBufferSubmit(PHGSMIGUESTCOMMANDCONTEXT pCtx,
     {
         /* Submit the buffer to the host. */
         VBoxVideoCmnPortWriteUlong(pCtx->port, offBuffer);
+        /* Make the compiler aware that the host has changed memory. */
+        ASMCompilerBarrier();
         return VINF_SUCCESS;
     }
 
diff --git a/src/VBox/Additions/linux/drm/vboxvideo_drm.c b/src/VBox/Additions/linux/drm/vboxvideo_drm.c
index 0b1b45c..ff093ec 100644
--- a/src/VBox/Additions/linux/drm/vboxvideo_drm.c
+++ b/src/VBox/Additions/linux/drm/vboxvideo_drm.c
@@ -70,6 +70,26 @@
 # define DRM_NEW_BUS_INIT 1
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0)
+# ifdef RHEL_RELEASE_CODE
+#  if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7, 2)
+#   define DRM_HAVE_DRM_MAP
+#  endif
+# else
+#  define DRM_HAVE_DRM_MAP
+# endif
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)
+# define DRM_WANTS_SET_BUSID
+#else
+# ifdef RHEL_RELEASE_CODE
+#  if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 2)
+#   define DRM_WANTS_SET_BUSID
+#  endif
+# endif
+#endif
+
 static struct pci_device_id pciidlist[] = {
         vboxvideo_PCI_IDS
 };
@@ -89,7 +109,7 @@ static struct file_operations driver_fops =
         .open = drm_open,
         .release = drm_release,
         .unlocked_ioctl = drm_ioctl,
-# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0)
+# ifdef DRM_HAVE_DRM_MAP
         /* This shouldn't be necessary even for old kernels as there is
          * nothing sensible to mmap. But we play safe and keep it for
          * legacy reasons. */
@@ -103,7 +123,7 @@ static struct drm_driver driver =
 {
     /* .driver_features = DRIVER_USE_MTRR, */
     .load = vboxvideo_driver_load,
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)
+#ifdef DRM_WANTS_SET_BUSID
     /* If this is missing a warning gets printed to dmesg.  We will not
      * attempt to make kernels work to which the change (915b4d11b) got back-
      * ported, as the problem is only cosmetic. */
diff --git a/src/VBox/Additions/linux/installer/vboxadd.sh b/src/VBox/Additions/linux/installer/vboxadd.sh
index 188fa73..e6c4dfc 100755
--- a/src/VBox/Additions/linux/installer/vboxadd.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd.sh
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Linux Additions kernel module init script ($Revision: 104011 $)
+# Linux Additions kernel module init script ($Revision: 104307 $)
 #
 
 #
@@ -253,6 +253,13 @@ do_vboxguest_non_udev()
 start()
 {
     begin "Starting the VirtualBox Guest Additions ";
+    if test -r $config; then
+      . $config
+    else
+      fail "Configuration file $config not found"
+    fi
+    test -n "$INSTALL_DIR" -a -n "$INSTALL_VER" ||
+      fail "Configuration file $config not complete"
     uname -r | grep -q -E '^2\.6|^3|^4' 2>/dev/null &&
         ps -A -o comm | grep -q '/*udevd$' 2>/dev/null ||
         no_udev=1
@@ -473,6 +480,7 @@ setup()
     export BUILD_TYPE
     export USERNAME
 
+    rm -f $LOG
     MODULE_SRC="$INSTALL_DIR/src/vboxguest-$INSTALL_VER"
     BUILDINTMP="$MODULE_SRC/build_in_tmp"
     DODKMS="$MODULE_SRC/do_dkms"
diff --git a/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c b/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
index 75027a4..f4c6584 100644
--- a/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
+++ b/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
@@ -482,7 +482,7 @@ main(int argc, char **argv)
      *       options you also would have to adjust VBoxServiceAutoMount.cpp
      *       to keep this code here slick without having VbglR3.
      */
-    err = mount(NULL, mount_point, "vboxsf", flags, &mntinf);
+    err = mount(host_name, mount_point, "vboxsf", flags, &mntinf);
     if (err == -1 && errno == EPROTO)
     {
         /* Sometimes the mount utility messes up the share name.  Try to
@@ -499,7 +499,7 @@ main(int argc, char **argv)
             /* We checked before that we have enough space */
             strcpy(mntinf.name, host_name + cchCWD);
         }
-        err = mount(NULL, mount_point, "vboxsf", flags, &mntinf);
+        err = mount(host_name, mount_point, "vboxsf", flags, &mntinf);
     }
     if (err == -1 && errno == EPROTO)
     {
@@ -511,7 +511,7 @@ main(int argc, char **argv)
         mntinf_old.uid = mntinf.uid;
         mntinf_old.gid = mntinf.gid;
         mntinf_old.ttl = mntinf.ttl;
-        err = mount(NULL, mount_point, "vboxsf", flags, &mntinf_old);
+        err = mount(host_name, mount_point, "vboxsf", flags, &mntinf_old);
     }
     if (err)
         panic_err("%s: mounting failed with the error", argv[0]);
diff --git a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk
index 56cd03b..512c78f 100644
--- a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk
+++ b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk
@@ -37,7 +37,7 @@ if1of ($(KBUILD_TARGET), linux)
  # unsigned long is 64bits
  vboxmouse_drv_DEFS.amd64 += _XSERVER64
  vboxmouse_drv_DEFS += \
-        _POSIX_C_SOURCE=199309L _POSIX_SOURCE _XOPEN_SOURCE \
+        _POSIX_C_SOURCE=199309L _POSIX_SOURCE _XOPEN_SOURCE _DEFAULT_SOURCE \
 	_BSD_SOURCE _SVID_SOURCE _GNU_SOURCE SHAPE XINPUT XKB LBX XAPPGROUP \
 	XCSECURITY TOGCUP XF86BIGFONT DPMSExtension PIXPRIV PANORAMIX RENDER \
 	GCCUSESGAS AVOID_GLYPHBLT PIXPRIV SINGLEDEPTH XFreeXDGA XvExtension \
diff --git a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk
index 248e54f..9349de7 100644
--- a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk
+++ b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk
@@ -63,7 +63,7 @@ vboxvideo_drv_DEFS.x86 = __i386__
 # unsigned long is 64bits
 vboxvideo_drv_DEFS.amd64 += _XSERVER64
 vboxvideo_drv_DEFS = \
-	_POSIX_C_SOURCE=199309L _POSIX_SOURCE _XOPEN_SOURCE \
+	_POSIX_C_SOURCE=199309L _POSIX_SOURCE _XOPEN_SOURCE _DEFAULT_SOURCE \
 	_BSD_SOURCE _SVID_SOURCE _GNU_SOURCE SHAPE XINPUT XKB LBX XAPPGROUP \
 	XCSECURITY TOGCUP XF86BIGFONT DPMSExtension PIXPRIV PANORAMIX RENDER \
 	GCCUSESGAS AVOID_GLYPHBLT PIXPRIV SINGLEDEPTH XFreeXDGA XvExtension \
diff --git a/src/VBox/Devices/Audio/AudioMixer.cpp b/src/VBox/Devices/Audio/AudioMixer.cpp
index 2293d93..cc7a9f6 100644
--- a/src/VBox/Devices/Audio/AudioMixer.cpp
+++ b/src/VBox/Devices/Audio/AudioMixer.cpp
@@ -351,27 +351,17 @@ void AudioMixerRemoveSink(PAUDIOMIXER pMixer, PAUDMIXSINK pSink)
     if (!pSink)
         return;
 
-    PAUDMIXSTREAM pStream = RTListGetFirst(&pSink->lstStreams, AUDMIXSTREAM, Node);
-    while (pStream)
-    {
-        PAUDMIXSTREAM pNext = RTListNodeGetNext(&pStream->Node, AUDMIXSTREAM, Node);
-        bool fLast = RTListNodeIsLast(&pSink->lstStreams, &pStream->Node);
-
+    PAUDMIXSTREAM pStream, pStreamNext;
+    RTListForEachSafe(&pSink->lstStreams, pStream, pStreamNext, AUDMIXSTREAM, Node)
         AudioMixerRemoveStream(pSink, pStream);
 
-        if (fLast)
-            break;
-
-        pStream = pNext;
-    }
-
     Assert(pSink->cStreams == 0);
 
     RTListNodeRemove(&pSink->Node);
     Assert(pMixer->cSinks);
     pMixer->cSinks--;
 
-    LogRel(("%s: pSink=%s, cSinks=%RU8\n",
+    LogFlowFunc(("%s: pSink=%s, cSinks=%RU8\n",
                  pMixer->pszName, pSink->pszName, pMixer->cSinks));
 
     audioMixerDestroySink(pSink);
@@ -387,11 +377,13 @@ void AudioMixerRemoveStream(PAUDMIXSINK pSink, PAUDMIXSTREAM pStream)
     RTListNodeRemove(&pStream->Node);
     pSink->cStreams--;
 
+#ifdef DEBUG
     const char *pszStream = pSink->enmDir == AUDMIXSINKDIR_INPUT
                           ? pStream->pIn->MixBuf.pszName : pStream->pOut->MixBuf.pszName;
 
-    LogRel(("%s: pStream=%s, cStreams=%RU8\n",
-                 pSink->pszName, pszStream, pSink->cStreams));
+    LogFlowFunc(("%s: pStream=%s, cStreams=%RU8\n",
+                 pSink->pszName, pszStream ? pszStream : "<Unnamed>", pSink->cStreams));
+#endif
 
     /* Decrease the reference count again. */
     switch (pSink->enmDir)
diff --git a/src/VBox/Devices/Audio/DevIchAc97.cpp b/src/VBox/Devices/Audio/DevIchAc97.cpp
index f4b49b2..d6b2b1d 100644
--- a/src/VBox/Devices/Audio/DevIchAc97.cpp
+++ b/src/VBox/Devices/Audio/DevIchAc97.cpp
@@ -32,13 +32,14 @@
 #endif
 
 #include "VBoxDD.h"
+
+#include "AudioMixBuffer.h"
 #include "AudioMixer.h"
 
 
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
-#undef LOG_VOICES
 
 #ifdef DEBUG
 //#define DEBUG_LUN
@@ -55,19 +56,19 @@
 # define SOFT_VOLUME
 #endif
 
-#define SR_FIFOE RT_BIT(4)          /* rwc, fifo error */
-#define SR_BCIS  RT_BIT(3)          /* rwc, buffer completion interrupt status */
-#define SR_LVBCI RT_BIT(2)          /* rwc, last valid buffer completion interrupt */
-#define SR_CELV  RT_BIT(1)          /* ro, current equals last valid */
-#define SR_DCH   RT_BIT(0)          /* ro, controller halted */
+#define SR_FIFOE RT_BIT(4)          /* rwc, FIFO error. */
+#define SR_BCIS  RT_BIT(3)          /* rwc, Buffer completion interrupt status. */
+#define SR_LVBCI RT_BIT(2)          /* rwc, Last valid buffer completion interrupt. */
+#define SR_CELV  RT_BIT(1)          /* ro,  Current equals last valid. */
+#define SR_DCH   RT_BIT(0)          /* ro,  Controller halted. */
 #define SR_VALID_MASK (RT_BIT(5) - 1)
 #define SR_WCLEAR_MASK (SR_FIFOE | SR_BCIS | SR_LVBCI)
 #define SR_RO_MASK (SR_DCH | SR_CELV)
 #define SR_INT_MASK (SR_FIFOE | SR_BCIS | SR_LVBCI)
 
-#define CR_IOCE  RT_BIT(4)         /* rw */
-#define CR_FEIE  RT_BIT(3)         /* rw */
-#define CR_LVBIE RT_BIT(2)         /* rw */
+#define CR_IOCE  RT_BIT(4)         /* rw,   Interrupt On Completion Enable. */
+#define CR_FEIE  RT_BIT(3)         /* rw    FIFO Error Interrupt Enable. */
+#define CR_LVBIE RT_BIT(2)         /* rw    */
 #define CR_RR    RT_BIT(1)         /* rw */
 #define CR_RPBM  RT_BIT(0)         /* rw */
 #define CR_VALID_MASK (RT_BIT(5) - 1)
@@ -181,32 +182,104 @@ enum {
 #define AD_MISC_LOSEL       RT_BIT(5)   /* Surround (rear) goes to line out outputs. */
 #define AD_MISC_HPSEL       RT_BIT(10)  /* PCM (front) goes to headphone outputs. */
 
+#define ICHAC97STATE_2_DEVINS(a_pAC97)   ((a_pAC97)->pDevInsR3)
+
+enum
+{
+    BUP_SET  = RT_BIT(0),
+    BUP_LAST = RT_BIT(1)
+};
+
+/** Emits registers for a specific (Native Audio Bus Master BAR) NABMBAR. */
+#define AC97_NABMBAR_REGS(prefix, off) \
+    enum {                             \
+        prefix ## _BDBAR = off,        \
+        prefix ## _CIV   = off + 4,    \
+        prefix ## _LVI   = off + 5,    \
+        prefix ## _SR    = off + 6,    \
+        prefix ## _PICB  = off + 8,    \
+        prefix ## _PIV   = off + 10,   \
+        prefix ## _CR    = off + 11    \
+    }
+
+#ifndef VBOX_DEVICE_STRUCT_TESTCASE
+typedef enum
+{
+    PI_INDEX = 0, /** PCM in */
+    PO_INDEX,     /** PCM out */
+    MC_INDEX,     /** Mic in */
+    LAST_INDEX
+} AC97SOUNDSOURCE;
+
+AC97_NABMBAR_REGS(PI, PI_INDEX * 16);
+AC97_NABMBAR_REGS(PO, PO_INDEX * 16);
+AC97_NABMBAR_REGS(MC, MC_INDEX * 16);
+#endif
+
+enum
+{
+    /** NABMBAR: Global Control Register. */
+    GLOB_CNT = 0x2c,
+    /** NABMBAR Global Status. */
+    GLOB_STA = 0x30,
+    /** Codec Access Semaphore Register. */
+    CAS      = 0x34
+};
+
+#define AC97_PORT2IDX(a_idx)   ( ((a_idx) >> 4) & 3 )
+
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
+
 /**
- * Buffer descriptor.
+ * Buffer Descriptor List Entry (BDLE).
  */
-typedef struct BD
+typedef struct AC97BDLE
 {
     uint32_t addr;
     uint32_t ctl_len;
-} BD;
+} AC97BDLE, *PAC97BDLE;
+
+/**
+ * Bus master register set for an audio stream.
+ */
+typedef struct AC97BMREGS
+{
+    uint32_t bdbar;             /** rw 0, Buffer Descriptor List: BAR (Base Address Register). */
+    uint8_t  civ;               /** ro 0, Current index value. */
+    uint8_t  lvi;               /** rw 0, Last valid index. */
+    uint16_t sr;                /** rw 1, Status register. */
+    uint16_t picb;              /** ro 0, Position in current buffer. */
+    uint8_t  piv;               /** ro 0, Prefetched index value. */
+    uint8_t  cr;                /** rw 0, Control register. */
+    int      bd_valid;          /** Whether current BDLE is initialized or not. */
+    AC97BDLE bd;                /** Current Buffer Descriptor List Entry (BDLE). */
+} AC97BMREGS, *PAC97BMREGS;
+
+/**
+ * Internal state of an AC97 stream.
+ */
+typedef struct AC97STREAMSTATE
+{
+    /* Nothing yet. */
+} AC97STREAMSTATE, *PAC97STREAMSTATE;
 
-typedef struct AC97BusMasterRegs
+/**
+ * Structure for keeping an AC97 stream state.
+ *
+ * Contains only register values which do *not* change until a
+ * stream reset occurs.
+ */
+typedef struct AC97STREAM
 {
-    uint32_t bdbar;             /**< rw 0, buffer descriptor list base address register */
-    uint8_t  civ;               /**< ro 0, current index value */
-    uint8_t  lvi;               /**< rw 0, last valid index */
-    uint16_t sr;                /**< rw 1, status register */
-    uint16_t picb;              /**< ro 0, position in current buffer */
-    uint8_t  piv;               /**< ro 0, prefetched index value */
-    uint8_t  cr;                /**< rw 0, control register */
-    int      bd_valid;          /**< initialized? */
-    BD       bd;                /**< buffer descriptor */
-} AC97BusMasterRegs;
-/** Pointer to a AC97 bus master register. */
-typedef AC97BusMasterRegs *PAC97BMREG;
+    /** Stream number (SDn). */
+    uint8_t         u8Strm;
+    /** Bus master registers of this stream. */
+    AC97BMREGS      Regs;
+    /** Internal state of this stream. */
+    AC97STREAMSTATE State;
+} AC97STREAM, *PAC97STREAM;
 
 typedef struct AC97INPUTSTREAM
 {
@@ -230,18 +303,8 @@ typedef struct AC97OUTPUTSTREAM
 typedef struct AC97STATE *PAC97STATE;
 typedef struct AC97DRIVER
 {
-    union
-    {
-        /** Node for storing this driver in our device driver
-         *  list of AC97STATE. */
-        RTLISTNODE                     Node;
-        struct
-        {
-            R3PTRTYPE(void *)          dummy1;
-            R3PTRTYPE(void *)          dummy2;
-        } dummy;
-    };
-
+    /** Node for storing this driver in our device driver list of AC97STATE. */
+    RTLISTNODER3                       Node;
     /** Pointer to AC97 controller (state). */
     R3PTRTYPE(PAC97STATE)              pAC97State;
     /** Driver flags. */
@@ -265,6 +328,8 @@ typedef struct AC97STATE
 {
     /** The PCI device state. */
     PCIDevice               PciDev;
+    /** R3 Pointer to the device instance. */
+    PPDMDEVINSR3            pDevInsR3;
     /** Global Control (Bus Master Control Register) */
     uint32_t                glob_cnt;
     /** Global Status (Bus Master Control Register) */
@@ -272,23 +337,28 @@ typedef struct AC97STATE
     /** Codec Access Semaphore Register (Bus Master Control Register) */
     uint32_t                cas;
     uint32_t                last_samp;
-    /** Bus Master Control Registers for PCM in, PCM out, and Mic in */
-    AC97BusMasterRegs       bm_regs[3];
     uint8_t                 mixer_data[256];
-    /** The emulation timer for handling the attached
-     *  LUN drivers. */
+    /** Stream state for line-in. */
+    AC97STREAM              StrmStLineIn;
+    /** Stream state for microphone-in. */
+    AC97STREAM              StrmStMicIn;
+    /** Stream state for output. */
+    AC97STREAM              StrmStOut;
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+    /** The timer for pumping data thru the attached LUN drivers. */
     PTMTIMERR3              pTimer;
-    /** Timer ticks for handling the LUN drivers. */
-    uint64_t                uTicks;
+    /** The timer interval for pumping data thru the LUN drivers in timer ticks. */
+    uint64_t                cTimerTicks;
+    /** Timestamp of the last timer callback (ac97Timer).
+     * Used to calculate the time actually elapsed between two timer callbacks. */
+    uint64_t                uTimerTS;
+#endif
 #ifdef VBOX_WITH_STATISTICS
-# if HC_ARCH_BITS == 32
-    uint32_t                u32Alignment0;
-# endif
     STAMPROFILE             StatTimer;
     STAMCOUNTER             StatBytesRead;
     STAMCOUNTER             StatBytesWritten;
 #endif
-    /** List of associated LUN drivers. */
+    /** List of associated LUN drivers (AC97DRIVER). */
     RTLISTANCHOR            lstDrv;
     /** The device' software mixer. */
     R3PTRTYPE(PAUDIOMIXER)  pMixer;
@@ -300,8 +370,6 @@ typedef struct AC97STATE
     R3PTRTYPE(PAUDMIXSINK)  pSinkMicIn;
     uint8_t                 silence[128];
     int                     bup_flag;
-    /** Pointer to the device instance. */
-    PPDMDEVINSR3            pDevIns;
     /** Pointer to the attached audio driver. */
     PPDMIBASE               pDrvBase;
     /** The base interface for LUN\#0. */
@@ -314,9 +382,7 @@ typedef struct AC97STATE
     uint32_t                cbReadWriteBuf;
     /** Codec model. */
     uint32_t                uCodecModel;
-} AC97STATE;
-/** Pointer to the AC97 device state. */
-typedef AC97STATE *PAC97STATE;
+} AC97STATE, *PAC97STATE;
 
 #ifdef VBOX_WITH_STATISTICS
 AssertCompileMemberAlignment(AC97STATE, StatTimer, 8);
@@ -324,48 +390,12 @@ AssertCompileMemberAlignment(AC97STATE, StatTimer, 8);
 
 #ifndef VBOX_DEVICE_STRUCT_TESTCASE
 
-#define ICHAC97STATE_2_DEVINS(a_pAC97)   ((a_pAC97)->pDevIns)
-
-enum
-{
-    BUP_SET  = RT_BIT(0),
-    BUP_LAST = RT_BIT(1)
-};
-
-#define MKREGS(prefix, start)                   \
-    enum {                                      \
-        prefix ## _BDBAR = start,               \
-        prefix ## _CIV   = start + 4,           \
-        prefix ## _LVI   = start + 5,           \
-        prefix ## _SR    = start + 6,           \
-        prefix ## _PICB  = start + 8,           \
-        prefix ## _PIV   = start + 10,          \
-        prefix ## _CR    = start + 11           \
-    }
-
-enum
-{
-    PI_INDEX = 0,    /* PCM in */
-    PO_INDEX,        /* PCM out */
-    MC_INDEX,        /* Mic in */
-    LAST_INDEX
-};
-
-MKREGS (PI, PI_INDEX * 16);
-MKREGS (PO, PO_INDEX * 16);
-MKREGS (MC, MC_INDEX * 16);
-
-enum
-{
-    GLOB_CNT = 0x2c,
-    GLOB_STA = 0x30,
-    CAS      = 0x34
-};
-
-#define GET_BM(a_idx)   ( ((a_idx) >> 4) & 3 )
-
+DECLINLINE(PAC97STREAM) ichac97GetStreamFromID(PAC97STATE pThis, uint32_t uID);
+static DECLCALLBACK(void) ichac97Reset(PPDMDEVINS pDevIns);
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
 static DECLCALLBACK(void) ichac97Timer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser);
-static int ichac97TransferAudio(PAC97STATE pThis, int index, uint32_t cbElapsed);
+#endif
+static int ichac97TransferAudio(PAC97STATE pThis, AC97SOUNDSOURCE enmSrc, uint32_t cbElapsed);
 
 static void ichac97WarmReset(PAC97STATE pThis)
 {
@@ -378,356 +408,383 @@ static void ichac97ColdReset(PAC97STATE pThis)
 }
 
 /** Fetches the buffer descriptor at _CIV. */
-static void ichac97FetchBufDesc(PAC97STATE pThis, PAC97BMREG pReg)
+static void ichac97StreamFetchBDLE(PAC97STATE pThis, PAC97STREAM pStrmSt)
 {
-    PPDMDEVINS pDevIns = ICHAC97STATE_2_DEVINS(pThis);
+    PPDMDEVINS  pDevIns = ICHAC97STATE_2_DEVINS(pThis);
+    PAC97BMREGS pRegs   = &pStrmSt->Regs;
+
     uint32_t u32[2];
 
-    PDMDevHlpPhysRead(pDevIns, pReg->bdbar + pReg->civ * 8, &u32[0], sizeof(u32));
-    pReg->bd_valid   = 1;
+    PDMDevHlpPhysRead(pDevIns, pRegs->bdbar + pRegs->civ * 8, &u32[0], sizeof(u32));
+    pRegs->bd_valid   = 1;
 #if !defined(RT_ARCH_X86) && !defined(RT_ARCH_AMD64)
 # error Please adapt the code (audio buffers are little endian)!
 #else
-    pReg->bd.addr    = RT_H2LE_U32(u32[0] & ~3);
-    pReg->bd.ctl_len = RT_H2LE_U32(u32[1]);
+    pRegs->bd.addr    = RT_H2LE_U32(u32[0] & ~3);
+    pRegs->bd.ctl_len = RT_H2LE_U32(u32[1]);
 #endif
-    pReg->picb       = pReg->bd.ctl_len & 0xffff;
+    pRegs->picb       = pRegs->bd.ctl_len & 0xffff;
     LogFlowFunc(("bd %2d addr=%#x ctl=%#06x len=%#x(%d bytes)\n",
-                  pReg->civ, pReg->bd.addr, pReg->bd.ctl_len >> 16,
-                  pReg->bd.ctl_len & 0xffff, (pReg->bd.ctl_len & 0xffff) << 1));
+                  pRegs->civ, pRegs->bd.addr, pRegs->bd.ctl_len >> 16,
+                  pRegs->bd.ctl_len & 0xffff, (pRegs->bd.ctl_len & 0xffff) << 1));
 }
 
 /**
  * Update the BM status register
  */
-static void ichac97UpdateStatus(PAC97STATE pThis, PAC97BMREG pReg, uint32_t new_sr)
+static void ichac97StreamUpdateStatus(PAC97STATE pThis, PAC97STREAM pStrmSt, uint32_t new_sr)
 {
     PPDMDEVINS  pDevIns = ICHAC97STATE_2_DEVINS(pThis);
-    int event = 0;
-    int level = 0;
+    PAC97BMREGS pRegs   = &pStrmSt->Regs;
+
+    bool fSignal   = false;
+    bool iIrqLevel;
+
     uint32_t new_mask = new_sr & SR_INT_MASK;
-    uint32_t old_mask = pReg->sr  & SR_INT_MASK;
+    uint32_t old_mask = pRegs->sr  & SR_INT_MASK;
+
     static uint32_t const masks[] = { GS_PIINT, GS_POINT, GS_MINT };
 
     if (new_mask ^ old_mask)
     {
-        /** @todo is IRQ deasserted when only one of status bits is cleared? */
+        /** @todo Is IRQ deasserted when only one of status bits is cleared? */
         if (!new_mask)
         {
-            event = 1;
-            level = 0;
+            fSignal   = true;
+            iIrqLevel = 0;
         }
-        else if ((new_mask & SR_LVBCI) && (pReg->cr & CR_LVBIE))
+        else if ((new_mask & SR_LVBCI) && (pRegs->cr & CR_LVBIE))
         {
-            event = 1;
-            level = 1;
+            fSignal   = true;
+            iIrqLevel = 1;
         }
-        else if ((new_mask & SR_BCIS) && (pReg->cr & CR_IOCE))
+        else if ((new_mask & SR_BCIS) && (pRegs->cr & CR_IOCE))
         {
-            event = 1;
-            level = 1;
+            fSignal   = true;
+            iIrqLevel = 1;
         }
     }
 
-    pReg->sr = new_sr;
+    pRegs->sr = new_sr;
 
-    LogFlowFunc(("IOC%d LVB%d sr=%#x event=%d level=%d\n",
-                 pReg->sr & SR_BCIS, pReg->sr & SR_LVBCI, pReg->sr, event, level));
+    LogFlowFunc(("IOC%d, LVB%d, sr=%#x, fSignal=%RTbool, iIrqLevel=%d\n",
+                 pRegs->sr & SR_BCIS, pRegs->sr & SR_LVBCI, pRegs->sr, fSignal, iIrqLevel));
 
-    if (event)
+    if (fSignal)
     {
-        if (level)
-            pThis->glob_sta |= masks[pReg - pThis->bm_regs];
+        if (iIrqLevel)
+            pThis->glob_sta |=  masks[pStrmSt->u8Strm];
         else
-            pThis->glob_sta &= ~masks[pReg - pThis->bm_regs];
+            pThis->glob_sta &= ~masks[pStrmSt->u8Strm];
 
-        LogFlowFunc(("set irq level=%d\n", !!level));
-        PDMDevHlpPCISetIrq(pDevIns, 0, !!level);
+        LogFlowFunc(("set irq level=%d\n", !!iIrqLevel));
+        PDMDevHlpPCISetIrq(pDevIns, 0, !!iIrqLevel);
     }
 }
 
-static void ichac97StreamSetActive(PAC97STATE pThis, int bm_index, int on)
+static int ichac97StreamSetActive(PAC97STATE pThis, PAC97STREAM pStrmSt, bool fActive)
 {
-    AssertPtrReturnVoid(pThis);
+    AssertPtrReturn(pThis,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
 
-    LogFlowFunc(("index=%d, on=%d\n", bm_index, on));
+    LogFlowFunc(("u8Strm=%RU8, fActive=%RTbool\n", pStrmSt->u8Strm, fActive));
+
+    int rc = VINF_SUCCESS;
 
     PAC97DRIVER pDrv;
-    switch (bm_index)
+    switch (pStrmSt->u8Strm)
     {
         case PI_INDEX:
-             RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                pDrv->pConnector->pfnEnableIn(pDrv->pConnector,
-                                              pDrv->LineIn.pStrmIn, RT_BOOL(on));
+            RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+            {
+                int rc2 = pDrv->pConnector->pfnEnableIn(pDrv->pConnector,
+                                                        pDrv->LineIn.pStrmIn, fActive);
+                if (RT_SUCCESS(rc))
+                    rc = rc2;
+            }
             break;
 
         case PO_INDEX:
             RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                pDrv->pConnector->pfnEnableOut(pDrv->pConnector,
-                                               pDrv->Out.pStrmOut, RT_BOOL(on));
+            {
+                int rc2 = pDrv->pConnector->pfnEnableOut(pDrv->pConnector,
+                                                         pDrv->Out.pStrmOut, fActive);
+                if (RT_SUCCESS(rc))
+                    rc = rc2;
+            }
             break;
 
         case MC_INDEX:
             RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                pDrv->pConnector->pfnEnableIn(pDrv->pConnector,
-                                              pDrv->MicIn.pStrmIn, RT_BOOL(on));
+            {
+                int rc2 = pDrv->pConnector->pfnEnableIn(pDrv->pConnector,
+                                                        pDrv->MicIn.pStrmIn, fActive);
+                if (RT_SUCCESS(rc))
+                    rc = rc2;
+            }
             break;
 
         default:
-            AssertMsgFailed(("Wrong index %d\n", bm_index));
+            AssertMsgFailed(("Wrong index %RU32\n", pStrmSt->u8Strm));
+            rc = VERR_NOT_SUPPORTED;
             break;
     }
+
+    return rc;
 }
 
-static void ichac97ResetBMRegs(PAC97STATE pThis, PAC97BMREG pReg)
+static void ichac97StreamResetBMRegs(PAC97STATE pThis, PAC97STREAM pStrmSt)
 {
-    LogFlowFunc(("reset_bm_regs\n"));
-    pReg->bdbar    = 0;
-    pReg->civ      = 0;
-    pReg->lvi      = 0;
-    /** @todo do we need to do that? */
-    ichac97UpdateStatus(pThis, pReg, SR_DCH);
-    pReg->picb     = 0;
-    pReg->piv      = 0;
-    pReg->cr       = pReg->cr & CR_DONT_CLEAR_MASK;
-    pReg->bd_valid = 0;
-    ichac97StreamSetActive(pThis, pReg - pThis->bm_regs, 0);
+    AssertPtrReturnVoid(pThis);
+    AssertPtrReturnVoid(pStrmSt);
+
+    LogFlowFuncEnter();
+
+    PAC97BMREGS pRegs = &pStrmSt->Regs;
+
+    pRegs->bdbar    = 0;
+    pRegs->civ      = 0;
+    pRegs->lvi      = 0;
+
+    ichac97StreamUpdateStatus(pThis, pStrmSt, SR_DCH); /** @todo Do we need to do that? */
+
+    pRegs->picb     = 0;
+    pRegs->piv      = 0;
+    pRegs->cr       = pRegs->cr & CR_DONT_CLEAR_MASK;
+    pRegs->bd_valid = 0;
+
+    int rc = ichac97StreamSetActive(pThis, pStrmSt, false /* fActive */);
+    AssertRC(rc);
+
     RT_ZERO(pThis->silence);
 }
 
-static void ichac97MixerStore(PAC97STATE pThis, uint32_t i, uint16_t v)
+static void ichac97MixerSet(PAC97STATE pThis, uint32_t u8Idx, uint16_t v)
 {
-    if (i + 2 > sizeof(pThis->mixer_data))
+    if (u8Idx + 2 > sizeof(pThis->mixer_data))
     {
-        LogFlowFunc(("mixer_store: index %d out of bounds %d\n", i, sizeof(pThis->mixer_data)));
+        AssertMsgFailed(("Index %RU8 out of bounds(%zu)\n", u8Idx, sizeof(pThis->mixer_data)));
         return;
     }
 
-    pThis->mixer_data[i + 0] = v & 0xff;
-    pThis->mixer_data[i + 1] = v >> 8;
+    pThis->mixer_data[u8Idx + 0] = RT_LO_U8(v);
+    pThis->mixer_data[u8Idx + 1] = RT_HI_U8(v);
 }
 
-static uint16_t ichac97MixerLoad(PAC97STATE pThis, uint32_t i)
+static uint16_t ichac97MixerGet(PAC97STATE pThis, uint32_t u8Idx)
 {
-    uint16_t val;
+    uint16_t uVal;
 
-    if (i + 2 > sizeof(pThis->mixer_data))
+    if (u8Idx + 2 > sizeof(pThis->mixer_data))
     {
-        LogFlowFunc(("mixer_load: index %d out of bounds %d\n", i, sizeof(pThis->mixer_data)));
-        val = 0xffff;
+        AssertMsgFailed(("Index %RU8 out of bounds (%zu)\n", u8Idx, sizeof(pThis->mixer_data)));
+        uVal = UINT16_MAX;
     }
     else
-        val = pThis->mixer_data[i + 0] | (pThis->mixer_data[i + 1] << 8);
+        uVal = RT_MAKE_U16(pThis->mixer_data[u8Idx + 0], pThis->mixer_data[u8Idx + 1]);
 
-    return val;
+    return uVal;
 }
 
-static void ichac97OpenStream(PAC97STATE pThis, int index, uint16_t freq)
+static DECLCALLBACK(void) ichac97CloseIn(PAC97STATE pThis, PDMAUDIORECSOURCE enmRecSource)
 {
-    LogFlowFunc(("index=%d, freq=%RU16\n", index, freq));
+    NOREF(pThis);
+    NOREF(enmRecSource);
+    LogFlowFuncEnter();
+}
 
-    int rc;
+static DECLCALLBACK(void) ichac97CloseOut(PAC97STATE pThis)
+{
+    NOREF(pThis);
+    LogFlowFuncEnter();
+}
 
-    PAC97DRIVER pDrv;
-    uint8_t uLUN = 0;
+static int ichac97OpenIn(PAC97STATE pThis,
+                         const char *pszName, PDMAUDIORECSOURCE enmRecSource,
+                         PPDMAUDIOSTREAMCFG pCfg)
+{
+    AssertPtrReturn(pThis,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
+    AssertPtrReturn(pCfg,    VERR_INVALID_POINTER);
 
-    if (freq)
+    PAUDMIXSINK pSink;
+    switch (enmRecSource)
     {
-        PDMAUDIOSTREAMCFG streamCfg;
-        RT_ZERO(streamCfg);
-        streamCfg.uHz           = freq;
-        streamCfg.cChannels     = 2;
-        streamCfg.enmFormat     = AUD_FMT_S16;
-        streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
+        case PDMAUDIORECSOURCE_MIC:
+            pSink = pThis->pSinkMicIn;
+            break;
+        case PDMAUDIORECSOURCE_LINE_IN:
+            pSink = pThis->pSinkLineIn;
+            break;
+        default:
+            AssertMsgFailed(("Audio source %ld not supported\n", enmRecSource));
+            return VERR_NOT_SUPPORTED;
+    }
 
-        char *pszDesc;
+    int rc = VINF_SUCCESS;
 
-        switch (index)
+    PAC97DRIVER pDrv;
+    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+    {
+        char *pszDesc;
+        if (RTStrAPrintf(&pszDesc, "[LUN#%RU8] %s", pDrv->uLUN, pszName) <= 0)
         {
-            case PI_INDEX: /* Line input. */
-            {
-                RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                {
-                    if (RTStrAPrintf(&pszDesc, "[LUN#%RU8] ac97.pi", uLUN) <= 0)
-                    {
-                        rc = VERR_NO_MEMORY;
-                        break;
-                    }
-
-                    rc = pDrv->pConnector->pfnCreateIn(pDrv->pConnector,
-                                                       pszDesc, PDMAUDIORECSOURCE_LINE_IN, &streamCfg, &pDrv->LineIn.pStrmIn);
-                    LogFlowFunc(("LUN#%RU8: Created line input with rc=%Rrc\n", uLUN, rc));
-                    if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
-                    {
-                        AudioMixerRemoveStream(pThis->pSinkLineIn, pDrv->LineIn.phStrmIn);
-                        rc = AudioMixerAddStreamIn(pThis->pSinkLineIn,
-                                                   pDrv->pConnector, pDrv->LineIn.pStrmIn,
-                                                   0 /* uFlags */,
-                                                   &pDrv->LineIn.phStrmIn);
-                    }
+            rc = VERR_NO_MEMORY;
+            break;
+        }
 
-                    RTStrFree(pszDesc);
-                    uLUN++;
-                }
-                break;
-            }
+        PAC97INPUTSTREAM pStrmIn;
+        if (enmRecSource == PDMAUDIORECSOURCE_MIC) /** @todo Refine this once we have more streams. */
+            pStrmIn = &pDrv->MicIn;
+        else
+            pStrmIn = &pDrv->LineIn;
 
-            case PO_INDEX: /* Output. */
-            {
-                RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                {
-                    if (RTStrAPrintf(&pszDesc, "[LUN#%RU8] ac97.po", uLUN) <= 0)
-                    {
-                        rc = VERR_NO_MEMORY;
-                        break;
-                    }
+        rc = pDrv->pConnector->pfnCreateIn(pDrv->pConnector, pszDesc, enmRecSource, pCfg, &pStrmIn->pStrmIn);
 
-                    rc = pDrv->pConnector->pfnCreateOut(pDrv->pConnector, pszDesc, &streamCfg, &pDrv->Out.pStrmOut);
-                    LogFlowFunc(("LUN#%RU8: Created output with rc=%Rrc\n", uLUN, rc));
-                    if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
-                    {
-                        AudioMixerRemoveStream(pThis->pSinkOutput, pDrv->Out.phStrmOut);
-                        rc = AudioMixerAddStreamOut(pThis->pSinkOutput,
-                                                    pDrv->pConnector, pDrv->Out.pStrmOut,
-                                                    0 /* uFlags */,
-                                                    &pDrv->Out.phStrmOut);
-                    }
+        LogFlowFunc(("LUN#%RU8: Created input \"%s\", with rc=%Rrc\n", pDrv->uLUN, pszDesc, rc));
+        if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
+        {
+            AudioMixerRemoveStream(pSink, pStrmIn->phStrmIn);
+            rc = AudioMixerAddStreamIn(pSink,
+                                       pDrv->pConnector, pStrmIn->pStrmIn,
+                                       0 /* uFlags */, &pStrmIn->phStrmIn);
+        }
 
-                    RTStrFree(pszDesc);
-                    uLUN++;
-                }
-                break;
-            }
+        RTStrFree(pszDesc);
+    }
 
-            case MC_INDEX: /* Mic in */
-            {
-                RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                {
-                    if (RTStrAPrintf(&pszDesc, "[LUN#%RU8] ac97.mc", uLUN) <= 0)
-                    {
-                        rc = VERR_NO_MEMORY;
-                        break;
-                    }
+    LogFlowFuncLeaveRC(rc);
+    return rc;
+}
 
-                    rc = pDrv->pConnector->pfnCreateIn(pDrv->pConnector,
-                                                       pszDesc, PDMAUDIORECSOURCE_MIC, &streamCfg, &pDrv->MicIn.pStrmIn);
-                    LogFlowFunc(("LUN#%RU8: Created mic input with rc=%Rrc\n", uLUN, rc));
-                    if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
-                    {
-                        AudioMixerRemoveStream(pThis->pSinkMicIn, pDrv->MicIn.phStrmIn);
-                        rc = AudioMixerAddStreamIn(pThis->pSinkMicIn,
-                                                   pDrv->pConnector, pDrv->MicIn.pStrmIn,
-                                                   0 /* uFlags */,
-                                                   &pDrv->MicIn.phStrmIn);
-                    }
+static int ichac97OpenOut(PAC97STATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg)
+{
+    AssertPtrReturn(pThis,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
+    AssertPtrReturn(pCfg,    VERR_INVALID_POINTER);
 
-                    RTStrFree(pszDesc);
-                    uLUN++;
-                }
-                break;
-            }
+    int rc = VINF_SUCCESS;
+    char *pszDesc;
 
-            default:
-                AssertMsgFailed(("Unsupported index %d\n", index));
-                rc = VERR_NOT_SUPPORTED;
-                break;
-        }
-    }
-    else
+    PAC97DRIVER pDrv;
+    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
     {
-        switch (index)
+        if (RTStrAPrintf(&pszDesc, "[LUN#%RU8] %s (%RU32Hz, %RU8 %s)",
+                         pDrv->uLUN, pszName, pCfg->uHz, pCfg->cChannels, pCfg->cChannels > 1 ? "Channels" : "Channel") <= 0)
         {
-            case PI_INDEX:
-            {
-                RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                {
-                    pDrv->pConnector->pfnDestroyIn(pDrv->pConnector, pDrv->LineIn.pStrmIn);
-                    AudioMixerRemoveStream(pThis->pSinkLineIn, pDrv->LineIn.phStrmIn);
+            rc = VERR_NO_MEMORY;
+            break;
+        }
 
-                    pDrv->LineIn.pStrmIn  = NULL;
-                    pDrv->LineIn.phStrmIn = NULL;
-                }
+        rc = pDrv->pConnector->pfnCreateOut(pDrv->pConnector, pszDesc, pCfg, &pDrv->Out.pStrmOut);
+        LogFlowFunc(("LUN#%RU8: Created output \"%s\", with rc=%Rrc\n", pDrv->uLUN, pszDesc, rc));
+        if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
+        {
+            AudioMixerRemoveStream(pThis->pSinkOutput, pDrv->Out.phStrmOut);
+            rc = AudioMixerAddStreamOut(pThis->pSinkOutput,
+                                        pDrv->pConnector, pDrv->Out.pStrmOut,
+                                        0 /* uFlags */, &pDrv->Out.phStrmOut);
+        }
 
-                LogFlowFunc(("Closed line input\n"));
-                break;
-            }
+        RTStrFree(pszDesc);
+    }
 
-            case PO_INDEX:
-            {
-                RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                {
-                    pDrv->pConnector->pfnDestroyOut(pDrv->pConnector, pDrv->Out.pStrmOut);
-                    AudioMixerRemoveStream(pThis->pSinkOutput, pDrv->Out.phStrmOut);
+    LogFlowFuncLeaveRC(rc);
+    return rc;
+}
 
-                    pDrv->Out.pStrmOut  = NULL;
-                    pDrv->Out.phStrmOut = NULL;
-                }
+static int ichac97StreamInitEx(PAC97STATE pThis, PAC97STREAM pStrmSt, uint8_t u8Strm, PPDMAUDIOSTREAMCFG pCfg)
+{
+    AssertPtrReturn(pThis,             VERR_INVALID_POINTER);
+    AssertPtrReturn(pStrmSt,           VERR_INVALID_POINTER);
+    AssertReturn(u8Strm <= LAST_INDEX, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pCfg,              VERR_INVALID_POINTER);
 
-                LogFlowFunc(("Closed output\n"));
-                break;
-            }
+    pStrmSt->u8Strm = u8Strm;
 
-            case MC_INDEX:
-            {
-                RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-                {
-                    pDrv->pConnector->pfnDestroyIn(pDrv->pConnector, pDrv->MicIn.pStrmIn);
-                    AudioMixerRemoveStream(pThis->pSinkMicIn, pDrv->MicIn.phStrmIn);
+    LogFlowFunc(("u8Strm=%RU8, %RU32Hz, %RU8 %s\n",
+                 pStrmSt->u8Strm, pCfg->uHz, pCfg->cChannels, pCfg->cChannels > 1 ? "Channels" : "Channel"));
 
-                    pDrv->MicIn.pStrmIn  = NULL;
-                    pDrv->MicIn.phStrmIn = NULL;
-                }
+    int rc;
+    switch (pStrmSt->u8Strm)
+    {
+        case PI_INDEX:
+            rc = ichac97OpenIn(pThis, "ac97.pi", PDMAUDIORECSOURCE_LINE_IN, pCfg);
+            break;
 
-                LogFlowFunc(("Closed microphone input\n"));
-                break;
-            }
+        case MC_INDEX:
+            rc = ichac97OpenIn(pThis, "ac97.mc", PDMAUDIORECSOURCE_MIC, pCfg);
+            break;
 
-            default:
-                AssertMsgFailed(("Unsupported index %d\n", index));
-                break;
-        }
+        case PO_INDEX:
+            rc = ichac97OpenOut(pThis, "ac97.po", pCfg);
+            break;
 
-        rc = VINF_SUCCESS;
+        default:
+            rc = VERR_NOT_SUPPORTED;
+            break;
     }
 
-    AudioMixerInvalidate(pThis->pMixer);
-
     LogFlowFuncLeaveRC(rc);
+    return rc;
 }
 
-/** @todo r=andy D'oh, pretty bad argument handling -- fix this! */
-static void ichac97ResetStreams(PAC97STATE pThis, uint8_t active[LAST_INDEX])
+static int ichac97StreamInit(PAC97STATE pThis, PAC97STREAM pStrmSt, uint8_t u8Strm)
 {
-    uint16_t uFreq = ichac97MixerLoad(pThis, AC97_PCM_LR_ADC_Rate);
-    bool fEnable = RT_BOOL(active[PI_INDEX]);
-    LogFlowFunc(("Input ADC uFreq=%RU16, fEnabled=%RTbool\n", uFreq, fEnable));
+    int rc = VINF_SUCCESS;
 
-    ichac97OpenStream(pThis, PI_INDEX, uFreq);
+    PDMAUDIOSTREAMCFG streamCfg;
+    RT_ZERO(streamCfg);
 
-    PAC97DRIVER pDrv;
-    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-        pDrv->pConnector->pfnEnableIn(pDrv->pConnector, pDrv->LineIn.pStrmIn, fEnable);
+    switch (u8Strm)
+    {
+        case PI_INDEX:
+            streamCfg.uHz = ichac97MixerGet(pThis, AC97_PCM_LR_ADC_Rate);
+            break;
 
-    uFreq = ichac97MixerLoad(pThis, AC97_PCM_Front_DAC_Rate);
-    fEnable = RT_BOOL(active[PO_INDEX]);
-    LogFlowFunc(("Output DAC uFreq=%RU16, fEnabled=%RTbool\n", uFreq, fEnable));
+        case MC_INDEX:
+            streamCfg.uHz = ichac97MixerGet(pThis, AC97_MIC_ADC_Rate);
+            break;
 
-    ichac97OpenStream(pThis, PO_INDEX, uFreq);
+        case PO_INDEX:
+            streamCfg.uHz = ichac97MixerGet(pThis, AC97_PCM_Front_DAC_Rate);
+            break;
 
-    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-        pDrv->pConnector->pfnEnableOut(pDrv->pConnector, pDrv->Out.pStrmOut, fEnable);
+        default:
+            rc = VERR_NOT_SUPPORTED;
+            break;
+    }
 
-    uFreq = ichac97MixerLoad(pThis, AC97_MIC_ADC_Rate);
-    fEnable = RT_BOOL(active[MC_INDEX]);
-    LogFlowFunc(("Mic ADC uFreq=%RU16, fEnabled=%RTbool\n", uFreq, fEnable));
+    if (RT_FAILURE(rc))
+        return rc;
 
-    ichac97OpenStream(pThis, MC_INDEX, uFreq);
+    if (streamCfg.uHz)
+    {
+        streamCfg.cChannels     = 2;
+        streamCfg.enmFormat     = AUD_FMT_S16;
+        streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
 
-    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-        pDrv->pConnector->pfnEnableIn(pDrv->pConnector, pDrv->MicIn.pStrmIn, fEnable);
+        return ichac97StreamInitEx(pThis, pStrmSt, u8Strm, &streamCfg);
+    }
+
+    /* If no frequency is given, disable the stream. */
+    return ichac97StreamSetActive(pThis, pStrmSt, false /* fActive */);
+}
+
+static int ichac97StreamReInit(PAC97STATE pThis, PAC97STREAM pStrmSt)
+{
+    return ichac97StreamInit(pThis, pStrmSt, pStrmSt->u8Strm);
 }
 
-static void ichac97SetVolume(PAC97STATE pThis, int index, PDMAUDIOMIXERCTL mt, uint32_t val)
+static void ichac97StreamReset(PAC97STATE pThis, PAC97STREAM pStrmSt)
+{
+    AssertPtrReturnVoid(pThis);
+    AssertPtrReturnVoid(pStrmSt);
+
+    LogFlowFunc(("uStrm=%RU8\n", pStrmSt->u8Strm));
+}
+
+static int ichac97MixerSetVolume(PAC97STATE pThis, int index, PDMAUDIOMIXERCTL mt, uint32_t val)
 {
     int mute = (val >> MUTE_SHIFT) & 1;
     uint8_t rvol = val & VOL_MASK;
@@ -748,6 +805,8 @@ static void ichac97SetVolume(PAC97STATE pThis, int index, PDMAUDIOMIXERCTL mt, u
 
     LogFunc(("mt=%ld, val=%RX32, mute=%RTbool\n", mt, val, RT_BOOL(mute)));
 
+    int rc;
+
 #ifdef SOFT_VOLUME
     if (pThis->pMixer) /* Device can be in reset state, so no mixer available. */
     {
@@ -755,25 +814,33 @@ static void ichac97SetVolume(PAC97STATE pThis, int index, PDMAUDIOMIXERCTL mt, u
         switch (mt)
         {
             case PDMAUDIOMIXERCTL_VOLUME:
-                AudioMixerSetMasterVolume(pThis->pMixer, &vol);
+                rc = AudioMixerSetMasterVolume(pThis->pMixer, &vol);
                 break;
 
             case PDMAUDIOMIXERCTL_PCM:
-                AudioMixerSetSinkVolume(pThis->pSinkOutput, &vol);
+                rc = AudioMixerSetSinkVolume(pThis->pSinkOutput, &vol);
                 break;
 
             case PDMAUDIOMIXERCTL_MIC_IN:
-                AudioMixerSetSinkVolume(pThis->pSinkMicIn, &vol);
+                rc = AudioMixerSetSinkVolume(pThis->pSinkMicIn, &vol);
                 break;
 
             case PDMAUDIOMIXERCTL_LINE_IN:
-                AudioMixerSetSinkVolume(pThis->pSinkLineIn, &vol);
+                rc = AudioMixerSetSinkVolume(pThis->pSinkLineIn, &vol);
                 break;
 
             default:
+                rc = VERR_NOT_SUPPORTED;
                 break;
         }
     }
+    else
+        rc = VERR_NOT_SUPPORTED;
+
+    if (RT_FAILURE(rc))
+        return rc;
+#else
+    rc = VINF_SUCCESS;
 #endif /* SOFT_VOLUME */
 
     rvol = VOL_MASK - ((VOL_MASK * rvol) / 255);
@@ -792,7 +859,9 @@ static void ichac97SetVolume(PAC97STATE pThis, int index, PDMAUDIOMIXERCTL mt, u
     if (val & RT_BIT(13))
         val |= RT_BIT(12) | RT_BIT(11) | RT_BIT(10) | RT_BIT(9) | RT_BIT(8);
 
-    ichac97MixerStore(pThis, index, val);
+    ichac97MixerSet(pThis, index, val);
+
+    return rc;
 }
 
 static PDMAUDIORECSOURCE ichac97IndextoRecSource(uint8_t i)
@@ -840,7 +909,7 @@ static void ichac97RecordSelect(PAC97STATE pThis, uint32_t val)
     //AUD_set_record_source(&als, &ars);
     rs = ichac97RecSourceToIndex(ars);
     ls = ichac97RecSourceToIndex(als);
-    ichac97MixerStore(pThis, AC97_Record_Select, rs | (ls << 8));
+    ichac97MixerSet(pThis, AC97_Record_Select, rs | (ls << 8));
 }
 
 static int ichac97MixerReset(PAC97STATE pThis)
@@ -851,161 +920,95 @@ static int ichac97MixerReset(PAC97STATE pThis)
 
     RT_ZERO(pThis->mixer_data);
 
-    /*
-     * Tear down mixer and streams.
-     */
-    if (pThis->pMixer)
-    {
-        AudioMixerDestroy(pThis->pMixer);
-        pThis->pMixer = NULL;
-    }
-
-    pThis->pSinkLineIn = NULL;
-    pThis->pSinkMicIn  = NULL;
-    pThis->pSinkOutput = NULL;
-
-    PAC97DRIVER pDrv;
-    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
-    {
-        pDrv->pConnector->pfnDestroyIn (pDrv->pConnector, pDrv->LineIn.pStrmIn);
-        RT_ZERO(pDrv->LineIn);
-
-        pDrv->pConnector->pfnDestroyIn (pDrv->pConnector, pDrv->MicIn.pStrmIn);
-        RT_ZERO(pDrv->MicIn);
-
-        pDrv->pConnector->pfnDestroyOut(pDrv->pConnector, pDrv->Out.pStrmOut);
-        RT_ZERO(pDrv->Out);
-    }
-
-    /*
-     * (Re-)Create the mixer. The streams will be created on demand later.
-     */
-    int rc = AudioMixerCreate("AC'97 Mixer", 0 /* uFlags */, &pThis->pMixer);
-    if (RT_FAILURE(rc))
-        return rc;
-
-    do
-    {
-        /* Set a default audio format for our mixer. */
-        PDMAUDIOSTREAMCFG streamCfg;
-        streamCfg.uHz           = 44100;
-        streamCfg.cChannels     = 2;
-        streamCfg.enmFormat     = AUD_FMT_S16;
-        streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
-
-        rc = AudioMixerSetDeviceFormat(pThis->pMixer, &streamCfg);
-        if (RT_FAILURE(rc))
-            break;
-
-        /* Add all required audio sinks. */
-        rc = AudioMixerAddSink(pThis->pMixer, "[Playback] PCM Output", AUDMIXSINKDIR_OUTPUT, &pThis->pSinkOutput);
-        if (RT_FAILURE(rc))
-            break;
-
-        rc = AudioMixerAddSink(pThis->pMixer, "[Recording] Line In", AUDMIXSINKDIR_INPUT, &pThis->pSinkLineIn);
-        if (RT_FAILURE(rc))
-            break;
-
-        rc = AudioMixerAddSink(pThis->pMixer, "[Recording] Microphone In", AUDMIXSINKDIR_INPUT, &pThis->pSinkMicIn);
-        if (RT_FAILURE(rc))
-            break;
-
-    } while (0);
-
     /* Note: Make sure to reset all registers first before bailing out on error. */
 
-    ichac97MixerStore(pThis, AC97_Reset                   , 0x0000); /* 6940 */
-    ichac97MixerStore(pThis, AC97_Master_Volume_Mono_Mute , 0x8000);
-    ichac97MixerStore(pThis, AC97_PC_BEEP_Volume_Mute     , 0x0000);
-
-    ichac97MixerStore(pThis, AC97_Phone_Volume_Mute       , 0x8008);
-    ichac97MixerStore(pThis, AC97_Mic_Volume_Mute         , 0x8008);
-    ichac97MixerStore(pThis, AC97_CD_Volume_Mute          , 0x8808);
-    ichac97MixerStore(pThis, AC97_Aux_Volume_Mute         , 0x8808);
-    ichac97MixerStore(pThis, AC97_Record_Gain_Mic_Mute    , 0x8000);
-    ichac97MixerStore(pThis, AC97_General_Purpose         , 0x0000);
-    ichac97MixerStore(pThis, AC97_3D_Control              , 0x0000);
-    ichac97MixerStore(pThis, AC97_Powerdown_Ctrl_Stat     , 0x000f);
-
-    ichac97MixerStore(pThis, AC97_Extended_Audio_ID       , 0x0809);
-    ichac97MixerStore(pThis, AC97_Extended_Audio_Ctrl_Stat, 0x0009);
-    ichac97MixerStore(pThis, AC97_PCM_Front_DAC_Rate      , 0xbb80);
-    ichac97MixerStore(pThis, AC97_PCM_Surround_DAC_Rate   , 0xbb80);
-    ichac97MixerStore(pThis, AC97_PCM_LFE_DAC_Rate        , 0xbb80);
-    ichac97MixerStore(pThis, AC97_PCM_LR_ADC_Rate         , 0xbb80);
-    ichac97MixerStore(pThis, AC97_MIC_ADC_Rate            , 0xbb80);
+    ichac97MixerSet(pThis, AC97_Reset                   , 0x0000); /* 6940 */
+    ichac97MixerSet(pThis, AC97_Master_Volume_Mono_Mute , 0x8000);
+    ichac97MixerSet(pThis, AC97_PC_BEEP_Volume_Mute     , 0x0000);
+
+    ichac97MixerSet(pThis, AC97_Phone_Volume_Mute       , 0x8008);
+    ichac97MixerSet(pThis, AC97_Mic_Volume_Mute         , 0x8008);
+    ichac97MixerSet(pThis, AC97_CD_Volume_Mute          , 0x8808);
+    ichac97MixerSet(pThis, AC97_Aux_Volume_Mute         , 0x8808);
+    ichac97MixerSet(pThis, AC97_Record_Gain_Mic_Mute    , 0x8000);
+    ichac97MixerSet(pThis, AC97_General_Purpose         , 0x0000);
+    ichac97MixerSet(pThis, AC97_3D_Control              , 0x0000);
+    ichac97MixerSet(pThis, AC97_Powerdown_Ctrl_Stat     , 0x000f);
+
+    ichac97MixerSet(pThis, AC97_Extended_Audio_ID       , 0x0809);
+    ichac97MixerSet(pThis, AC97_Extended_Audio_Ctrl_Stat, 0x0009);
+    ichac97MixerSet(pThis, AC97_PCM_Front_DAC_Rate      , 0xbb80);
+    ichac97MixerSet(pThis, AC97_PCM_Surround_DAC_Rate   , 0xbb80);
+    ichac97MixerSet(pThis, AC97_PCM_LFE_DAC_Rate        , 0xbb80);
+    ichac97MixerSet(pThis, AC97_PCM_LR_ADC_Rate         , 0xbb80);
+    ichac97MixerSet(pThis, AC97_MIC_ADC_Rate            , 0xbb80);
 
     if (pThis->uCodecModel == Codec_AD1980)
     {
         /* Analog Devices 1980 (AD1980) */
-        ichac97MixerStore(pThis, AC97_Reset                   , 0x0010);    /* Headphones. */
-        ichac97MixerStore(pThis, AC97_Vendor_ID1              , 0x4144);
-        ichac97MixerStore(pThis, AC97_Vendor_ID2              , 0x5370);
-        ichac97MixerStore(pThis, AC97_Headphone_Volume_Mute   , 0x8000);
+        ichac97MixerSet(pThis, AC97_Reset                   , 0x0010);    /* Headphones. */
+        ichac97MixerSet(pThis, AC97_Vendor_ID1              , 0x4144);
+        ichac97MixerSet(pThis, AC97_Vendor_ID2              , 0x5370);
+        ichac97MixerSet(pThis, AC97_Headphone_Volume_Mute   , 0x8000);
     }
     else if (pThis->uCodecModel == Codec_AD1981B)
     {
         /* Analog Devices 1981B (AD1981B) */
-        ichac97MixerStore(pThis, AC97_Vendor_ID1              , 0x4144);
-        ichac97MixerStore(pThis, AC97_Vendor_ID2              , 0x5374);
+        ichac97MixerSet(pThis, AC97_Vendor_ID1              , 0x4144);
+        ichac97MixerSet(pThis, AC97_Vendor_ID2              , 0x5374);
     }
     else
     {
         /* Sigmatel 9700 (STAC9700) */
-        ichac97MixerStore(pThis, AC97_Vendor_ID1              , 0x8384);
-        ichac97MixerStore(pThis, AC97_Vendor_ID2              , 0x7600); /* 7608 */
+        ichac97MixerSet(pThis, AC97_Vendor_ID1              , 0x8384);
+        ichac97MixerSet(pThis, AC97_Vendor_ID2              , 0x7600); /* 7608 */
     }
     ichac97RecordSelect(pThis, 0);
 
-    ichac97SetVolume(pThis, AC97_Master_Volume_Mute,  PDMAUDIOMIXERCTL_VOLUME,  0x8000);
-    ichac97SetVolume(pThis, AC97_PCM_Out_Volume_Mute, PDMAUDIOMIXERCTL_PCM,     0x8808);
-    ichac97SetVolume(pThis, AC97_Line_In_Volume_Mute, PDMAUDIOMIXERCTL_LINE_IN, 0x8808);
-
-    /* Reset all streams. */
-    uint8_t active[LAST_INDEX] = { 0 };
-    ichac97ResetStreams(pThis, active);
+    ichac97MixerSetVolume(pThis, AC97_Master_Volume_Mute,  PDMAUDIOMIXERCTL_VOLUME,  0x8000);
+    ichac97MixerSetVolume(pThis, AC97_PCM_Out_Volume_Mute, PDMAUDIOMIXERCTL_PCM,     0x8808);
+    ichac97MixerSetVolume(pThis, AC97_Line_In_Volume_Mute, PDMAUDIOMIXERCTL_LINE_IN, 0x8808);
 
-    return rc;
+    return VINF_SUCCESS;
 }
 
 /**
  * Writes data from the device to the host backends.
  *
  * @return  IPRT status code.
- * @return  int
  * @param   pThis
- * @param   pReg
+ * @param   pStrmSt
  * @param   cbMax
  * @param   pcbWritten
  */
-static int ichac97WriteAudio(PAC97STATE pThis, PAC97BMREG pReg, uint32_t cbMax, uint32_t *pcbWritten)
+static int ichac97WriteAudio(PAC97STATE pThis, PAC97STREAM pStrmSt, uint32_t cbMax, uint32_t *pcbWritten)
 {
-    AssertPtrReturn(pThis, VERR_INVALID_POINTER);
-    AssertPtrReturn(pReg, VERR_INVALID_POINTER);
-    AssertReturn(cbMax, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(pcbWritten, VERR_INVALID_POINTER);
+    AssertPtrReturn(pThis,      VERR_INVALID_POINTER);
+    AssertPtrReturn(pStrmSt,    VERR_INVALID_POINTER);
+    AssertReturn(cbMax,         VERR_INVALID_PARAMETER);
+    /* pcbWritten is optional. */
 
     PPDMDEVINS  pDevIns = ICHAC97STATE_2_DEVINS(pThis);
+    PAC97BMREGS pRegs   = &pStrmSt->Regs;
 
-    uint32_t    addr           = pReg->bd.addr;
+    uint32_t    addr           = pRegs->bd.addr;
     uint32_t    cbWrittenTotal = 0;
     uint32_t    cbToRead;
 
-    uint32_t cbToWrite = RT_MIN((uint32_t)(pReg->picb << 1), cbMax);
+    uint32_t cbToWrite = RT_MIN((uint32_t)(pRegs->picb << 1), cbMax);
     if (!cbToWrite)
     {
-        *pcbWritten = 0;
+        if (pcbWritten)
+            *pcbWritten = 0;
         return VINF_EOF;
     }
 
     int rc = VINF_SUCCESS;
 
-    LogFlowFunc(("pReg=%p, cbMax=%RU32, cbToWrite=%RU32\n", pReg, cbMax, cbToWrite));
+    LogFlowFunc(("pReg=%p, cbMax=%RU32, cbToWrite=%RU32\n", pRegs, cbMax, cbToWrite));
 
     while (cbToWrite)
     {
-        uint32_t cbWrittenMin = UINT32_MAX;
-
         cbToRead = RT_MIN(cbToWrite, pThis->cbReadWriteBuf);
         PDMDevHlpPhysRead(pDevIns, addr, pThis->pvReadWriteBuf, cbToRead); /** @todo Check rc? */
 
@@ -1018,31 +1021,19 @@ static int ichac97WriteAudio(PAC97STATE pThis, PAC97BMREG pReg, uint32_t cbMax,
         {
             int rc2 = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
                                                  pThis->pvReadWriteBuf, cbToRead, &cbWritten);
-            AssertRCBreak(rc);
-            if (RT_FAILURE(rc2))
-                continue;
-
-            cbWrittenMin = RT_MIN(cbWrittenMin, cbWritten);
-            LogFlowFunc(("\tLUN#%RU8: cbWritten=%RU32, cWrittenMin=%RU32\n", pDrv->uLUN, cbWritten, cbWrittenMin));
+            LogFlowFunc(("\tLUN#%RU8: rc=%Rrc, cbWritten=%RU32\n", pDrv->uLUN, rc2, cbWritten));
         }
 
-        LogFlowFunc(("\tcbToRead=%RU32, cbWrittenMin=%RU32, cbToWrite=%RU32, cbLeft=%RU32\n",
-                     cbToRead, cbWrittenMin, cbToWrite, cbToWrite - cbWrittenMin));
+        LogFlowFunc(("\tcbToRead=%RU32, cbToWrite=%RU32, cbLeft=%RU32\n",
+                     cbToRead, cbToWrite, cbToWrite - cbWrittenTotal));
 
-        if (!cbWrittenMin)
-        {
-            rc = VINF_EOF;
-            break;
-        }
-
-        Assert(cbWrittenMin != UINT32_MAX);
-        Assert(cbToWrite >= cbWrittenMin);
-        cbToWrite      -= cbWrittenMin;
-        addr           += cbWrittenMin;
-        cbWrittenTotal += cbWrittenMin;
+        Assert(cbToWrite >= cbToRead);
+        cbToWrite      -= cbToRead;
+        addr           += cbToRead;
+        cbWrittenTotal += cbToRead;
     }
 
-    pReg->bd.addr = addr;
+    pRegs->bd.addr = addr;
 
     if (RT_SUCCESS(rc))
     {
@@ -1057,7 +1048,8 @@ static int ichac97WriteAudio(PAC97STATE pThis, PAC97BMREG pReg, uint32_t cbMax,
                 pThis->last_samp = *(uint32_t *)&pThis->pvReadWriteBuf[cbToRead - 4];
         }
 
-        *pcbWritten = cbWrittenTotal;
+        if (pcbWritten)
+            *pcbWritten = cbWrittenTotal;
     }
 
     LogFlowFunc(("cbWrittenTotal=%RU32, rc=%Rrc\n", cbWrittenTotal, rc));
@@ -1083,60 +1075,68 @@ static void ichac97WriteBUP(PAC97STATE pThis, uint32_t cbElapsed)
 
     while (cbElapsed)
     {
-        uint32_t cbWrittenMin = UINT32_MAX;
-
         uint32_t cbToWrite = RT_MIN(cbElapsed, (uint32_t)sizeof(pThis->silence));
-        while (cbToWrite)
+        uint32_t cbWrittenToStream;
+        int rc2;
+
+        PAC97DRIVER pDrv;
+        RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
         {
-            PAC97DRIVER pDrv;
-            uint32_t cbWritten;
-            RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+            if (pDrv->pConnector->pfnIsActiveOut(pDrv->pConnector, pDrv->Out.pStrmOut))
             {
-                int rc2 = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
-                                                     pThis->silence, cbToWrite, &cbWritten);
-                if (RT_FAILURE(rc2))
-                    continue;
-
-                cbWrittenMin = RT_MIN(cbWrittenMin, cbWritten);
+                rc2 = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
+                                                 pThis->silence, cbToWrite, &cbWrittenToStream);
+                if (RT_SUCCESS(rc2))
+                {
+                    if (cbWrittenToStream < cbToWrite) /* Lagging behind? */
+                        LogFlowFunc(("\tLUN#%RU8: Warning: Only written %RU32 / %RU32 bytes, expect lags\n",
+                                     pDrv->uLUN, cbWrittenToStream, cbToWrite));
+                }
+            }
+            else /* Stream disabled, not fatal. */
+            {
+                cbWrittenToStream = 0;
+                rc2 = VERR_NOT_AVAILABLE;
+                /* Keep going. */
             }
-
-            if (!cbWrittenMin)
-                return;
-
-            Assert(cbToWrite >= cbWrittenMin);
-            cbToWrite -= cbWrittenMin;
-            Assert(cbElapsed >= cbWrittenMin);
-            cbElapsed -= cbWrittenMin;
         }
+
+        /* Always report all data as being written;
+         * backends who were not able to catch up have to deal with it themselves. */
+        Assert(cbElapsed >= cbToWrite);
+        cbElapsed -= cbToWrite;
     }
 }
 
-static int ichac97ReadAudio(PAC97STATE pThis, PAC97BMREG pReg, uint32_t cbMax, uint32_t *pcbRead)
+static int ichac97ReadAudio(PAC97STATE pThis, PAC97STREAM pStrmSt, uint32_t cbMax, uint32_t *pcbRead)
 {
-    AssertPtrReturn(pThis, VERR_INVALID_POINTER);
-    AssertPtrReturn(pReg, VERR_INVALID_POINTER);
-    AssertReturn(cbMax, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(pcbRead, VERR_INVALID_POINTER);
+    AssertPtrReturn(pThis,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
+    AssertReturn(cbMax,      VERR_INVALID_PARAMETER);
+    /* pcbRead is optional. */
 
     PPDMDEVINS pDevIns = ICHAC97STATE_2_DEVINS(pThis);
-
-    int rc;
+    PAC97BMREGS pRegs  = &pStrmSt->Regs;
 
     /* Select audio sink to process. */
-    PAUDMIXSINK pSink = (pReg - pThis->bm_regs) == MC_INDEX ? pThis->pSinkMicIn : pThis->pSinkLineIn;
+    AssertMsg(pStrmSt->u8Strm != PO_INDEX, ("Can't read from output\n"));
+    PAUDMIXSINK pSink = pStrmSt->u8Strm == MC_INDEX ? pThis->pSinkMicIn : pThis->pSinkLineIn;
     AssertPtr(pSink);
 
-    uint32_t cbRead = 0;
+    uint32_t cbRead   = 0;
 
     uint32_t cbMixBuf = cbMax;
-    uint32_t cbToRead = RT_MIN((uint32_t)(pReg->picb << 1), cbMixBuf);
+    uint32_t cbToRead = RT_MIN((uint32_t)(pRegs->picb << 1), cbMixBuf);
 
     if (!cbToRead)
     {
-        *pcbRead = 0;
+        if (pcbRead)
+            *pcbRead = 0;
         return VINF_EOF;
     }
 
+    int rc;
+
     uint8_t *pvMixBuf = (uint8_t *)RTMemAlloc(cbMixBuf);
     if (pvMixBuf)
     {
@@ -1144,8 +1144,8 @@ static int ichac97ReadAudio(PAC97STATE pThis, PAC97BMREG pReg, uint32_t cbMax, u
         if (   RT_SUCCESS(rc)
             && cbRead)
         {
-            PDMDevHlpPCIPhysWrite(pDevIns, pReg->bd.addr, pvMixBuf, cbRead);
-            pReg->bd.addr += cbRead;
+            PDMDevHlpPCIPhysWrite(pDevIns, pRegs->bd.addr, pvMixBuf, cbRead);
+            pRegs->bd.addr += cbRead;
         }
 
         RTMemFree(pvMixBuf);
@@ -1155,17 +1155,20 @@ static int ichac97ReadAudio(PAC97STATE pThis, PAC97BMREG pReg, uint32_t cbMax, u
 
     if (RT_SUCCESS(rc))
     {
-        Assert(cbRead);
-        *pcbRead = cbRead;
+        if (pcbRead)
+            *pcbRead = cbRead;
     }
 
     return rc;
 }
 
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+
 static DECLCALLBACK(void) ichac97Timer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
 {
-    PAC97STATE pThis = PDMINS_2_DATA(pDevIns, PAC97STATE);
-    AssertPtrReturnVoid(pThis);
+    PAC97STATE pThis = (PAC97STATE)pvUser;
+    Assert(pThis == PDMINS_2_DATA(pDevIns, PAC97STATE));
+    AssertPtr(pThis);
 
     STAM_PROFILE_START(&pThis->StatTimer, a);
 
@@ -1176,39 +1179,47 @@ static DECLCALLBACK(void) ichac97Timer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void
 
     PAC97DRIVER pDrv;
 
-    uint32_t cbIn, cbOut, cSamplesLive;
+    uint64_t cTicksNow     = TMTimerGet(pTimer);
+    uint64_t cTicksElapsed = cTicksNow  - pThis->uTimerTS;
+    uint64_t cTicksPerSec  = TMTimerGetFreq(pTimer);
+
+    pThis->uTimerTS = cTicksNow;
+
     RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
     {
+        uint32_t cbIn = 0;
+        uint32_t cbOut = 0;
+
         rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
-                                              &cbIn, &cbOut, &cSamplesLive);
+                                              &cbIn, &cbOut, NULL /* cSamplesLive */);
         if (RT_SUCCESS(rc))
-        {
-#ifdef DEBUG_TIMER
-            LogFlowFunc(("\tLUN#%RU8: [1] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
-#endif
-            if (cSamplesLive)
-            {
-                uint32_t cSamplesPlayed;
-                int rc2 = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, &cSamplesPlayed);
+            rc = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, NULL /* cSamplesPlayed */);
+
 #ifdef DEBUG_TIMER
-                if (RT_SUCCESS(rc2))
-                    LogFlowFunc(("LUN#%RU8: cSamplesLive=%RU32, cSamplesPlayed=%RU32\n",
-                                 pDrv->uLUN, cSamplesLive, cSamplesPlayed));
+        LogFlowFunc(("LUN#%RU8: rc=%Rrc, cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, rc, cbIn, cbOut));
 #endif
-                if (cSamplesPlayed)
-                {
-                    rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
-                                                          &cbIn, &cbOut, &cSamplesLive);
+        const bool fIsActiveOut = pDrv->pConnector->pfnIsActiveOut(pDrv->pConnector, pDrv->Out.pStrmOut);
+
+        /* If we there was an error handling (available) output or there simply is no output available,
+         * then calculate the minimum data rate which must be processed by the device emulation in order
+         * to function correctly.
+         *
+         * This is not the optimal solution, but as we have to deal with this on a timer-based approach
+         * (until we have the audio callbacks) we need to have device' DMA engines running. */
+        if (   RT_FAILURE(rc)
+            || !fIsActiveOut)
+        {
+            uint32_t cSamplesMin  = (int)((2 * cTicksElapsed * pDrv->Out.pStrmOut->Props.uHz + cTicksPerSec) / cTicksPerSec / 2);
+            uint32_t cbSamplesMin = AUDIOMIXBUF_S2B(&pDrv->Out.pStrmOut->MixBuf, cSamplesMin);
+
 #ifdef DEBUG_TIMER
-                    if (RT_SUCCESS(rc))
-                        LogFlowFunc(("\tLUN#%RU8: [2] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
+            LogFlowFunc(("\trc=%Rrc, cSamplesMin=%RU32, cbSamplesMin=%RU32\n", rc, cSamplesMin, cbSamplesMin));
 #endif
-                }
-            }
-
-            cbInMax  = RT_MAX(cbInMax, cbIn);
-            cbOutMin = RT_MIN(cbOutMin, cbOut);
+            cbOut = RT_MAX(cbOut, cbSamplesMin);
         }
+
+        cbOutMin = RT_MIN(cbOutMin, cbOut);
+        cbInMax  = RT_MAX(cbInMax, cbIn);
     }
 
 #ifdef DEBUG_TIMER
@@ -1233,21 +1244,40 @@ static DECLCALLBACK(void) ichac97Timer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void
     if (cbInMax)
         ichac97TransferAudio(pThis, PI_INDEX, cbInMax); /** @todo Add rc! */
 
-    TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->uTicks);
+    /* Kick the timer again. */
+    uint64_t cTicks = pThis->cTimerTicks;
+    /** @todo adjust cTicks down by now much cbOutMin represents. */
+    TMTimerSet(pThis->pTimer, cTicksNow + cTicks);
 
     STAM_PROFILE_STOP(&pThis->StatTimer, a);
 }
 
-static int ichac97TransferAudio(PAC97STATE pThis, int index, uint32_t cbElapsed)
+#endif
+
+static int ichac97TransferAudio(PAC97STATE pThis, AC97SOUNDSOURCE enmSrc, uint32_t cbElapsed)
 {
-    LogFlowFunc(("pThis=%p, index=%d, cbElapsed=%RU32\n", pThis, index, cbElapsed));
+    LogFlowFunc(("pThis=%p, enmSrc=%RU32, cbElapsed=%RU32\n", pThis, enmSrc, cbElapsed));
 
-    PAC97BMREG pReg = &pThis->bm_regs[index];
-    if (pReg->sr & SR_DCH) /* Controller halted? */
+    PAC97STREAM pStrmSt;
+    switch (enmSrc)
     {
-        if (pReg->cr & CR_RPBM)
+        case PI_INDEX: pStrmSt = &pThis->StrmStLineIn; break;
+        case MC_INDEX: pStrmSt = &pThis->StrmStMicIn;  break;
+        case PO_INDEX: pStrmSt = &pThis->StrmStOut;    break;
+        default:
         {
-            switch (index)
+            AssertMsgFailed(("Unknown source index %ld\n", enmSrc));
+            return VERR_NOT_SUPPORTED;
+        }
+    }
+
+    PAC97BMREGS pRegs = &pStrmSt->Regs;
+
+    if (pRegs->sr & SR_DCH) /* Controller halted? */
+    {
+        if (pRegs->cr & CR_RPBM)
+        {
+            switch (enmSrc)
             {
                 case PO_INDEX:
                     ichac97WriteBUP(pThis, cbElapsed);
@@ -1266,39 +1296,39 @@ static int ichac97TransferAudio(PAC97STATE pThis, int index, uint32_t cbElapsed)
 
     while (cbElapsed >> 1)
     {
-        if (!pReg->bd_valid)
+        if (!pRegs->bd_valid)
         {
             LogFlowFunc(("Invalid buffer descriptor, fetching next one ...\n"));
-            ichac97FetchBufDesc(pThis, pReg);
+            ichac97StreamFetchBDLE(pThis, pStrmSt);
         }
 
-        if (!pReg->picb) /* Got a new buffer descriptor, that is, the position is 0? */
+        if (!pRegs->picb) /* Got a new buffer descriptor, that is, the position is 0? */
         {
             LogFlowFunc(("Fresh buffer descriptor %RU8 is empty, addr=%#x, len=%#x, skipping\n",
-                         pReg->civ, pReg->bd.addr, pReg->bd.ctl_len));
-            if (pReg->civ == pReg->lvi)
+                         pRegs->civ, pRegs->bd.addr, pRegs->bd.ctl_len));
+            if (pRegs->civ == pRegs->lvi)
             {
-                pReg->sr |= SR_DCH; /* CELV? */
+                pRegs->sr |= SR_DCH; /* CELV? */
                 pThis->bup_flag = 0;
 
                 rc = VINF_EOF;
                 break;
             }
 
-            pReg->sr &= ~SR_CELV;
-            pReg->civ = pReg->piv;
-            pReg->piv = (pReg->piv + 1) % 32;
+            pRegs->sr &= ~SR_CELV;
+            pRegs->civ = pRegs->piv;
+            pRegs->piv = (pRegs->piv + 1) % 32;
 
-            ichac97FetchBufDesc(pThis, pReg);
+            ichac97StreamFetchBDLE(pThis, pStrmSt);
             continue;
         }
 
         uint32_t cbTransferred;
-        switch (index)
+        switch (enmSrc)
         {
             case PO_INDEX:
             {
-                rc = ichac97WriteAudio(pThis, pReg, cbElapsed, &cbTransferred);
+                rc = ichac97WriteAudio(pThis, pStrmSt, cbElapsed, &cbTransferred);
                 if (   RT_SUCCESS(rc)
                     && cbTransferred)
                 {
@@ -1306,7 +1336,7 @@ static int ichac97TransferAudio(PAC97STATE pThis, int index, uint32_t cbElapsed)
                     Assert(cbElapsed >= cbTransferred);
                     cbElapsed      -= cbTransferred;
                     Assert((cbTransferred & 1) == 0);    /* Else the following shift won't work */
-                    pReg->picb     -= (cbTransferred >> 1);
+                    pRegs->picb    -= (cbTransferred >> 1);
                 }
                 break;
             }
@@ -1314,51 +1344,51 @@ static int ichac97TransferAudio(PAC97STATE pThis, int index, uint32_t cbElapsed)
             case PI_INDEX:
             case MC_INDEX:
             {
-                rc = ichac97ReadAudio(pThis, pReg, cbElapsed, &cbTransferred);
+                rc = ichac97ReadAudio(pThis, pStrmSt, cbElapsed, &cbTransferred);
                 if (   RT_SUCCESS(rc)
                     && cbTransferred)
                 {
                     Assert(cbElapsed >= cbTransferred);
                     cbElapsed  -= cbTransferred;
                     Assert((cbTransferred & 1) == 0);    /* Else the following shift won't work */
-                    pReg->picb -= (cbTransferred >> 1);
+                    pRegs->picb -= (cbTransferred >> 1);
                 }
                 break;
             }
 
             default:
-                AssertMsgFailed(("Index %ld not supported\n", index));
+                AssertMsgFailed(("Source %RU32 not supported\n", enmSrc));
                 rc = VERR_NOT_SUPPORTED;
                 break;
         }
 
-        LogFlowFunc(("pReg->picb=%#x, cbWrittenTotal=%RU32\n", pReg->picb, cbWrittenTotal));
+        LogFlowFunc(("pReg->picb=%#x, cbWrittenTotal=%RU32\n", pRegs->picb, cbWrittenTotal));
 
-        if (!pReg->picb)
+        if (!pRegs->picb)
         {
-            uint32_t new_sr = pReg->sr & ~SR_CELV;
+            uint32_t new_sr = pRegs->sr & ~SR_CELV;
 
-            if (pReg->bd.ctl_len & BD_IOC)
+            if (pRegs->bd.ctl_len & BD_IOC)
             {
                 new_sr |= SR_BCIS;
             }
 
-            if (pReg->civ == pReg->lvi)
+            if (pRegs->civ == pRegs->lvi)
             {
-                LogFlowFunc(("Underrun civ (%RU8) == lvi (%RU8)\n", pReg->civ, pReg->lvi));
+                LogFlowFunc(("Underrun civ (%RU8) == lvi (%RU8)\n", pRegs->civ, pRegs->lvi));
                 new_sr |= SR_LVBCI | SR_DCH | SR_CELV;
-                pThis->bup_flag = (pReg->bd.ctl_len & BD_BUP) ? BUP_LAST : 0;
+                pThis->bup_flag = (pRegs->bd.ctl_len & BD_BUP) ? BUP_LAST : 0;
 
                 rc = VINF_EOF;
             }
             else
             {
-                pReg->civ = pReg->piv;
-                pReg->piv = (pReg->piv + 1) % 32;
-                ichac97FetchBufDesc(pThis, pReg);
+                pRegs->civ = pRegs->piv;
+                pRegs->piv = (pRegs->piv + 1) % 32;
+                ichac97StreamFetchBDLE(pThis, pStrmSt);
             }
 
-            ichac97UpdateStatus(pThis, pReg, new_sr);
+            ichac97StreamUpdateStatus(pThis, pStrmSt, new_sr);
         }
 
         if (   RT_FAILURE(rc)
@@ -1375,68 +1405,67 @@ static int ichac97TransferAudio(PAC97STATE pThis, int index, uint32_t cbElapsed)
 /**
  * @callback_method_impl{FNIOMIOPORTIN}
  */
-static DECLCALLBACK(int) ichac97IOPortNABMRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
+static DECLCALLBACK(int) ichac97IOPortNABMRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port,
+                                               uint32_t *pu32Val, unsigned cbVal)
 {
-    PAC97STATE pThis = (PAC97STATE)pvUser;
+    PAC97STATE pThis    = (PAC97STATE)pvUser;
+
+    /* Get the index of the NABMBAR port. */
+    const uint32_t uPortIdx = Port - pThis->IOPortBase[1];
 
-    switch (cb)
+    PAC97STREAM pStrmSt     = ichac97GetStreamFromID(pThis, AC97_PORT2IDX(uPortIdx));
+    PAC97BMREGS pRegs       = pStrmSt ? &pStrmSt->Regs : NULL;
+
+    switch (cbVal)
     {
         case 1:
         {
-            PAC97BMREG pReg = NULL;
-            uint32_t index = Port - pThis->IOPortBase[1];
-            *pu32 = ~0U;
-
-            switch (index)
+            switch (uPortIdx)
             {
                 case CAS:
                     /* Codec Access Semaphore Register */
                     LogFlowFunc(("CAS %d\n", pThis->cas));
-                    *pu32 = pThis->cas;
+                    *pu32Val = pThis->cas;
                     pThis->cas = 1;
                     break;
                 case PI_CIV:
                 case PO_CIV:
                 case MC_CIV:
                     /* Current Index Value Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->civ;
-                    LogFlowFunc(("CIV[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->civ;
+                    LogFlowFunc(("CIV[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 case PI_LVI:
                 case PO_LVI:
                 case MC_LVI:
                     /* Last Valid Index Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->lvi;
-                    LogFlowFunc(("LVI[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->lvi;
+                    LogFlowFunc(("LVI[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 case PI_PIV:
                 case PO_PIV:
                 case MC_PIV:
                     /* Prefetched Index Value Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->piv;
-                    LogFlowFunc(("PIV[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->piv;
+                    LogFlowFunc(("PIV[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 case PI_CR:
                 case PO_CR:
                 case MC_CR:
                     /* Control Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->cr;
-                    LogFlowFunc(("CR[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->cr;
+                    LogFlowFunc(("CR[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 case PI_SR:
                 case PO_SR:
                 case MC_SR:
                     /* Status Register (lower part) */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->sr & 0xff;
-                    LogFlowFunc(("SRb[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->sr & 0xff; /** @todo r=andy Use RT_LO_U8. */
+                    LogFlowFunc(("SRb[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 default:
-                    LogFlowFunc(("U nabm readb %#x -> %#x\n", Port, *pu32));
+                    *pu32Val = UINT32_MAX;
+                    LogFlowFunc(("U nabm readb %#x -> %#x\n", Port, *pu32Val));
                     break;
             }
             break;
@@ -1444,30 +1473,25 @@ static DECLCALLBACK(int) ichac97IOPortNABMRead(PPDMDEVINS pDevIns, void *pvUser,
 
         case 2:
         {
-            PAC97BMREG pReg = NULL;
-            uint32_t index = Port - pThis->IOPortBase[1];
-            *pu32 = ~0U;
-
-            switch (index)
+            switch (uPortIdx)
             {
                 case PI_SR:
                 case PO_SR:
                 case MC_SR:
                     /* Status Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->sr;
-                    LogFlowFunc(("SR[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->sr;
+                    LogFlowFunc(("SR[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 case PI_PICB:
                 case PO_PICB:
                 case MC_PICB:
                     /* Position in Current Buffer Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->picb;
-                    LogFlowFunc(("PICB[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->picb;
+                    LogFlowFunc(("PICB[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 default:
-                    LogFlowFunc(("U nabm readw %#x -> %#x\n", Port, *pu32));
+                    *pu32Val = UINT32_MAX;
+                    LogFlowFunc(("U nabm readw %#x -> %#x\n", Port, *pu32Val));
                     break;
             }
             break;
@@ -1475,19 +1499,14 @@ static DECLCALLBACK(int) ichac97IOPortNABMRead(PPDMDEVINS pDevIns, void *pvUser,
 
         case 4:
         {
-            PAC97BMREG pReg = NULL;
-            uint32_t index = Port - pThis->IOPortBase[1];
-            *pu32 = ~0U;
-
-            switch (index)
+            switch (uPortIdx)
             {
                 case PI_BDBAR:
                 case PO_BDBAR:
                 case MC_BDBAR:
                     /* Buffer Descriptor Base Address Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->bdbar;
-                    LogFlowFunc(("BMADDR[%d] -> %#x\n", GET_BM(index), *pu32));
+                    *pu32Val = pRegs->bdbar;
+                    LogFlowFunc(("BMADDR[%d] -> %#x\n", AC97_PORT2IDX(uPortIdx), *pu32Val));
                     break;
                 case PI_CIV:
                 case PO_CIV:
@@ -1495,9 +1514,9 @@ static DECLCALLBACK(int) ichac97IOPortNABMRead(PPDMDEVINS pDevIns, void *pvUser,
                     /* 32-bit access: Current Index Value Register +
                      *                Last Valid Index Register +
                      *                Status Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->civ | (pReg->lvi << 8) | (pReg->sr << 16);
-                    LogFlowFunc(("CIV LVI SR[%d] -> %#x, %#x, %#x\n", GET_BM(index), pReg->civ, pReg->lvi, pReg->sr));
+                    *pu32Val = pRegs->civ | (pRegs->lvi << 8) | (pRegs->sr << 16); /** @todo r=andy Use RT_MAKE_U32_FROM_U8. */
+                    LogFlowFunc(("CIV LVI SR[%d] -> %#x, %#x, %#x\n",
+                                 AC97_PORT2IDX(uPortIdx), pRegs->civ, pRegs->lvi, pRegs->sr));
                     break;
                 case PI_PICB:
                 case PO_PICB:
@@ -1505,22 +1524,23 @@ static DECLCALLBACK(int) ichac97IOPortNABMRead(PPDMDEVINS pDevIns, void *pvUser,
                     /* 32-bit access: Position in Current Buffer Register +
                      *                Prefetched Index Value Register +
                      *                Control Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    *pu32 = pReg->picb | (pReg->piv << 16) | (pReg->cr << 24);
-                    LogFlowFunc(("PICB PIV CR[%d] -> %#x %#x %#x %#x\n", GET_BM(index), *pu32, pReg->picb, pReg->piv, pReg->cr));
+                    *pu32Val = pRegs->picb | (pRegs->piv << 16) | (pRegs->cr << 24); /** @todo r=andy Use RT_MAKE_U32_FROM_U8. */
+                    LogFlowFunc(("PICB PIV CR[%d] -> %#x %#x %#x %#x\n",
+                                 AC97_PORT2IDX(uPortIdx), *pu32Val, pRegs->picb, pRegs->piv, pRegs->cr));
                     break;
                 case GLOB_CNT:
                     /* Global Control */
-                    *pu32 = pThis->glob_cnt;
-                    LogFlowFunc(("glob_cnt -> %#x\n", *pu32));
+                    *pu32Val = pThis->glob_cnt;
+                    LogFlowFunc(("glob_cnt -> %#x\n", *pu32Val));
                     break;
                 case GLOB_STA:
                     /* Global Status */
-                    *pu32 = pThis->glob_sta | GS_S0CR;
-                    LogFlowFunc(("glob_sta -> %#x\n", *pu32));
+                    *pu32Val = pThis->glob_sta | GS_S0CR;
+                    LogFlowFunc(("glob_sta -> %#x\n", *pu32Val));
                     break;
                 default:
-                    LogFlowFunc(("U nabm readl %#x -> %#x\n", Port, *pu32));
+                    *pu32Val = UINT32_MAX;
+                    LogFlowFunc(("U nabm readl %#x -> %#x\n", Port, *pu32Val));
                     break;
             }
             break;
@@ -1535,70 +1555,79 @@ static DECLCALLBACK(int) ichac97IOPortNABMRead(PPDMDEVINS pDevIns, void *pvUser,
 /**
  * @callback_method_impl{FNIOMIOPORTOUT}
  */
-static DECLCALLBACK(int) ichac97IOPortNABMWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
+static DECLCALLBACK(int) ichac97IOPortNABMWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port,
+                                                uint32_t u32Val, unsigned cbVal)
 {
-    PAC97STATE pThis = (PAC97STATE)pvUser;
+    PAC97STATE  pThis   = (PAC97STATE)pvUser;
+
+    /* Get the index of the NABMBAR register. */
+    const uint32_t uPortIdx = Port - pThis->IOPortBase[1];
+
+    PAC97STREAM pStrmSt     = ichac97GetStreamFromID(pThis, AC97_PORT2IDX(uPortIdx));
+    PAC97BMREGS pRegs       = pStrmSt ? &pStrmSt->Regs : NULL;
 
-    switch (cb)
+    switch (cbVal)
     {
         case 1:
         {
-            PAC97BMREG pReg = NULL;
-            uint32_t index = Port - pThis->IOPortBase[1];
-            switch (index)
+            switch (uPortIdx)
             {
                 case PI_LVI:
                 case PO_LVI:
                 case MC_LVI:
                     /* Last Valid Index */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    if ((pReg->cr & CR_RPBM) && (pReg->sr & SR_DCH))
+                    if ((pRegs->cr & CR_RPBM) && (pRegs->sr & SR_DCH))
                     {
-                        pReg->sr &= ~(SR_DCH | SR_CELV);
-                        pReg->civ = pReg->piv;
-                        pReg->piv = (pReg->piv + 1) % 32;
-                        ichac97FetchBufDesc(pThis, pReg);
+                        pRegs->sr &= ~(SR_DCH | SR_CELV);
+                        pRegs->civ = pRegs->piv;
+                        pRegs->piv = (pRegs->piv + 1) % 32;
+
+                        ichac97StreamFetchBDLE(pThis, pStrmSt);
                     }
-                    pReg->lvi = u32 % 32;
-                    LogFlowFunc(("LVI[%d] <- %#x\n", GET_BM(index), u32));
+                    pRegs->lvi = u32Val % 32;
+                    LogFlowFunc(("LVI[%d] <- %#x\n", AC97_PORT2IDX(uPortIdx), u32Val));
                     break;
                 case PI_CR:
                 case PO_CR:
                 case MC_CR:
+                {
                     /* Control Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    if (u32 & CR_RR)
-                        ichac97ResetBMRegs(pThis, pReg);
+                    if (u32Val & CR_RR) /* Busmaster reset */
+                    {
+                        ichac97StreamResetBMRegs(pThis, pStrmSt);
+                    }
                     else
                     {
-                        pReg->cr = u32 & CR_VALID_MASK;
-                        if (!(pReg->cr & CR_RPBM))
+                        pRegs->cr = u32Val & CR_VALID_MASK;
+                        if (!(pRegs->cr & CR_RPBM))
                         {
-                            ichac97StreamSetActive(pThis, pReg - pThis->bm_regs, 0);
-                            pReg->sr |= SR_DCH;
+                            ichac97StreamSetActive(pThis, pStrmSt, false /* fActive */);
+                            pRegs->sr |= SR_DCH;
                         }
                         else
                         {
-                            pReg->civ = pReg->piv;
-                            pReg->piv = (pReg->piv + 1) % 32;
-                            ichac97FetchBufDesc(pThis, pReg);
-                            pReg->sr &= ~SR_DCH;
-                            ichac97StreamSetActive(pThis, pReg - pThis->bm_regs, 1);
+                            pRegs->civ = pRegs->piv;
+                            pRegs->piv = (pRegs->piv + 1) % 32;
+
+                            ichac97StreamFetchBDLE(pThis, pStrmSt);
+
+                            pRegs->sr &= ~SR_DCH;
+                            ichac97StreamSetActive(pThis, pStrmSt, true /* fActive */);
                         }
                     }
-                    LogFlowFunc(("CR[%d] <- %#x (cr %#x)\n", GET_BM(index), u32, pReg->cr));
+                    LogFlowFunc(("CR[%d] <- %#x (cr %#x)\n", AC97_PORT2IDX(uPortIdx), u32Val, pRegs->cr));
                     break;
+                }
                 case PI_SR:
                 case PO_SR:
                 case MC_SR:
                     /* Status Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    pReg->sr |= u32 & ~(SR_RO_MASK | SR_WCLEAR_MASK);
-                    ichac97UpdateStatus(pThis, pReg, pReg->sr & ~(u32 & SR_WCLEAR_MASK));
-                    LogFlowFunc(("SR[%d] <- %#x (sr %#x)\n", GET_BM(index), u32, pReg->sr));
+                    pRegs->sr |= u32Val & ~(SR_RO_MASK | SR_WCLEAR_MASK);
+                    ichac97StreamUpdateStatus(pThis, pStrmSt, pRegs->sr & ~(u32Val & SR_WCLEAR_MASK));
+                    LogFlowFunc(("SR[%d] <- %#x (sr %#x)\n", AC97_PORT2IDX(uPortIdx), u32Val, pRegs->sr));
                     break;
                 default:
-                    LogFlowFunc(("U nabm writeb %#x <- %#x\n", Port, u32));
+                    LogFlowFunc(("U nabm writeb %#x <- %#x\n", Port, u32Val));
                     break;
             }
             break;
@@ -1606,21 +1635,18 @@ static DECLCALLBACK(int) ichac97IOPortNABMWrite(PPDMDEVINS pDevIns, void *pvUser
 
         case 2:
         {
-            PAC97BMREG pReg = NULL;
-            uint32_t index = Port - pThis->IOPortBase[1];
-            switch (index)
+            switch (uPortIdx)
             {
                 case PI_SR:
                 case PO_SR:
                 case MC_SR:
                     /* Status Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    pReg->sr |= u32 & ~(SR_RO_MASK | SR_WCLEAR_MASK);
-                    ichac97UpdateStatus(pThis, pReg, pReg->sr & ~(u32 & SR_WCLEAR_MASK));
-                    LogFlowFunc(("SR[%d] <- %#x (sr %#x)\n", GET_BM(index), u32, pReg->sr));
+                    pRegs->sr |= u32Val & ~(SR_RO_MASK | SR_WCLEAR_MASK);
+                    ichac97StreamUpdateStatus(pThis, pStrmSt, pRegs->sr & ~(u32Val & SR_WCLEAR_MASK));
+                    LogFlowFunc(("SR[%d] <- %#x (sr %#x)\n", AC97_PORT2IDX(uPortIdx), u32Val, pRegs->sr));
                     break;
                 default:
-                    LogFlowFunc(("U nabm writew %#x <- %#x\n", Port, u32));
+                    LogFlowFunc(("U nabm writew %#x <- %#x\n", Port, u32Val));
                     break;
             }
             break;
@@ -1628,43 +1654,40 @@ static DECLCALLBACK(int) ichac97IOPortNABMWrite(PPDMDEVINS pDevIns, void *pvUser
 
         case 4:
         {
-            PAC97BMREG pReg = NULL;
-            uint32_t index = Port - pThis->IOPortBase[1];
-            switch (index)
+            switch (uPortIdx)
             {
                 case PI_BDBAR:
                 case PO_BDBAR:
                 case MC_BDBAR:
                     /* Buffer Descriptor list Base Address Register */
-                    pReg = &pThis->bm_regs[GET_BM(index)];
-                    pReg->bdbar = u32 & ~3;
-                    LogFlowFunc(("BDBAR[%d] <- %#x (bdbar %#x)\n", GET_BM(index), u32, pReg->bdbar));
+                    pRegs->bdbar = u32Val & ~3;
+                    LogFlowFunc(("BDBAR[%d] <- %#x (bdbar %#x)\n", AC97_PORT2IDX(uPortIdx), u32Val, pRegs->bdbar));
                     break;
                 case GLOB_CNT:
                     /* Global Control */
-                    if (u32 & GC_WR)
+                    if (u32Val & GC_WR)
                         ichac97WarmReset(pThis);
-                    if (u32 & GC_CR)
+                    if (u32Val & GC_CR)
                         ichac97ColdReset(pThis);
-                    if (!(u32 & (GC_WR | GC_CR)))
-                        pThis->glob_cnt = u32 & GC_VALID_MASK;
-                    LogFlowFunc(("glob_cnt <- %#x (glob_cnt %#x)\n", u32, pThis->glob_cnt));
+                    if (!(u32Val & (GC_WR | GC_CR)))
+                        pThis->glob_cnt = u32Val & GC_VALID_MASK;
+                    LogFlowFunc(("glob_cnt <- %#x (glob_cnt %#x)\n", u32Val, pThis->glob_cnt));
                     break;
                 case GLOB_STA:
                     /* Global Status */
-                    pThis->glob_sta &= ~(u32 & GS_WCLEAR_MASK);
-                    pThis->glob_sta |= (u32 & ~(GS_WCLEAR_MASK | GS_RO_MASK)) & GS_VALID_MASK;
-                    LogFlowFunc(("glob_sta <- %#x (glob_sta %#x)\n", u32, pThis->glob_sta));
+                    pThis->glob_sta &= ~(u32Val & GS_WCLEAR_MASK);
+                    pThis->glob_sta |= (u32Val & ~(GS_WCLEAR_MASK | GS_RO_MASK)) & GS_VALID_MASK;
+                    LogFlowFunc(("glob_sta <- %#x (glob_sta %#x)\n", u32Val, pThis->glob_sta));
                     break;
                 default:
-                    LogFlowFunc(("U nabm writel %#x <- %#x\n", Port, u32));
+                    LogFlowFunc(("U nabm writel %#x <- %#x\n", Port, u32Val));
                     break;
             }
             break;
         }
 
         default:
-            AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cb, u32));
+            AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cbVal, u32Val));
             break;
     }
     return VINF_SUCCESS;
@@ -1673,30 +1696,30 @@ static DECLCALLBACK(int) ichac97IOPortNABMWrite(PPDMDEVINS pDevIns, void *pvUser
 /**
  * @callback_method_impl{FNIOMIOPORTIN}
  */
-static DECLCALLBACK(int) ichac97IOPortNAMRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
+static DECLCALLBACK(int) ichac97IOPortNAMRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32Val, unsigned cbVal)
 {
     PAC97STATE pThis = (PAC97STATE)pvUser;
 
-    switch (cb)
+    switch (cbVal)
     {
         case 1:
         {
             LogFlowFunc(("U nam readb %#x\n", Port));
             pThis->cas = 0;
-            *pu32 = ~0U;
+            *pu32Val = UINT32_MAX;
             break;
         }
 
         case 2:
         {
             uint32_t index = Port - pThis->IOPortBase[0];
-            *pu32 = ~0U;
+            *pu32Val = UINT32_MAX;
             pThis->cas = 0;
             switch (index)
             {
                 default:
-                    *pu32 = ichac97MixerLoad(pThis, index);
-                    LogFlowFunc(("nam readw %#x -> %#x\n", Port, *pu32));
+                    *pu32Val = ichac97MixerGet(pThis, index);
+                    LogFlowFunc(("nam readw %#x -> %#x\n", Port, *pu32Val));
                     break;
             }
             break;
@@ -1706,7 +1729,7 @@ static DECLCALLBACK(int) ichac97IOPortNAMRead(PPDMDEVINS pDevIns, void *pvUser,
         {
             LogFlowFunc(("U nam readl %#x\n", Port));
             pThis->cas = 0;
-            *pu32 = ~0U;
+            *pu32Val = UINT32_MAX;
             break;
         }
 
@@ -1720,15 +1743,15 @@ static DECLCALLBACK(int) ichac97IOPortNAMRead(PPDMDEVINS pDevIns, void *pvUser,
  * @callback_method_impl{FNIOMIOPORTOUT}
  */
 static DECLCALLBACK(int) ichac97IOPortNAMWrite(PPDMDEVINS pDevIns,
-                                               void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
+                                               void *pvUser, RTIOPORT Port, uint32_t u32Val, unsigned cbVal)
 {
     PAC97STATE pThis = (PAC97STATE)pvUser;
 
-    switch (cb)
+    switch (cbVal)
     {
         case 1:
         {
-            LogFlowFunc(("U nam writeb %#x <- %#x\n", Port, u32));
+            LogFlowFunc(("U nam writeb %#x <- %#x\n", Port, u32Val));
             pThis->cas = 0;
             break;
         }
@@ -1740,90 +1763,91 @@ static DECLCALLBACK(int) ichac97IOPortNAMWrite(PPDMDEVINS pDevIns,
             switch (index)
             {
                 case AC97_Reset:
-                    ichac97MixerReset(pThis);
+                    ichac97Reset(pThis->CTX_SUFF(pDevIns));
                     break;
                 case AC97_Powerdown_Ctrl_Stat:
-                    u32 &= ~0xf;
-                    u32 |= ichac97MixerLoad(pThis, index) & 0xf;
-                    ichac97MixerStore(pThis, index, u32);
+                    u32Val &= ~0xf;
+                    u32Val |= ichac97MixerGet(pThis, index) & 0xf;
+                    ichac97MixerSet(pThis, index, u32Val);
                     break;
                 case AC97_Master_Volume_Mute:
                     if (pThis->uCodecModel == Codec_AD1980)
-                        if (ichac97MixerLoad(pThis, AC97_AD_Misc) & AD_MISC_LOSEL)
+                        if (ichac97MixerGet(pThis, AC97_AD_Misc) & AD_MISC_LOSEL)
                             break;  /* Register controls surround (rear), do nothing. */
-                    ichac97SetVolume(pThis, index, PDMAUDIOMIXERCTL_VOLUME, u32);
+                    ichac97MixerSetVolume(pThis, index, PDMAUDIOMIXERCTL_VOLUME, u32Val);
                     break;
                 case AC97_Headphone_Volume_Mute:
                     if (pThis->uCodecModel == Codec_AD1980)
-                        if (ichac97MixerLoad(pThis, AC97_AD_Misc) & AD_MISC_HPSEL)
+                        if (ichac97MixerGet(pThis, AC97_AD_Misc) & AD_MISC_HPSEL)
                             /* Register controls PCM (front) outputs. */
-                            ichac97SetVolume(pThis, index, PDMAUDIOMIXERCTL_VOLUME, u32);
+                            ichac97MixerSetVolume(pThis, index, PDMAUDIOMIXERCTL_VOLUME, u32Val);
                     break;
                 case AC97_PCM_Out_Volume_Mute:
-                    ichac97SetVolume(pThis, index, PDMAUDIOMIXERCTL_PCM, u32);
+                    ichac97MixerSetVolume(pThis, index, PDMAUDIOMIXERCTL_PCM, u32Val);
                     break;
                 case AC97_Line_In_Volume_Mute:
-                    ichac97SetVolume(pThis, index, PDMAUDIOMIXERCTL_LINE_IN, u32);
+                    ichac97MixerSetVolume(pThis, index, PDMAUDIOMIXERCTL_LINE_IN, u32Val);
                     break;
                 case AC97_Record_Select:
-                    ichac97RecordSelect(pThis, u32);
+                    ichac97RecordSelect(pThis, u32Val);
                     break;
                 case AC97_Vendor_ID1:
                 case AC97_Vendor_ID2:
-                    LogFlowFunc(("Attempt to write vendor ID to %#x\n", u32));
+                    LogFlowFunc(("Attempt to write vendor ID to %#x\n", u32Val));
                     break;
                 case AC97_Extended_Audio_ID:
-                    LogFlowFunc(("Attempt to write extended audio ID to %#x\n", u32));
+                    LogFlowFunc(("Attempt to write extended audio ID to %#x\n", u32Val));
                     break;
                 case AC97_Extended_Audio_Ctrl_Stat:
-                    if (!(u32 & EACS_VRA))
+                    if (!(u32Val & EACS_VRA))
                     {
-                        ichac97MixerStore(pThis, AC97_PCM_Front_DAC_Rate, 0xbb80);
-                        ichac97MixerStore(pThis, AC97_PCM_LR_ADC_Rate,    0xbb80);
-                        ichac97OpenStream(pThis, PI_INDEX, 48000);
-                        ichac97OpenStream(pThis, PO_INDEX, 48000);
+                        ichac97MixerSet(pThis, AC97_PCM_Front_DAC_Rate, 48000);
+                        ichac97StreamReInit(pThis, &pThis->StrmStOut);
+
+                        ichac97MixerSet(pThis, AC97_PCM_LR_ADC_Rate,    48000);
+                        ichac97StreamReInit(pThis, &pThis->StrmStLineIn);
                     }
-                    if (!(u32 & EACS_VRM))
+                    if (!(u32Val & EACS_VRM))
                     {
-                        ichac97MixerStore(pThis, AC97_MIC_ADC_Rate, 0xbb80);
-                        ichac97OpenStream(pThis, MC_INDEX, 48000);
+                        ichac97MixerSet(pThis, AC97_MIC_ADC_Rate,       48000);
+                        ichac97StreamReInit(pThis, &pThis->StrmStMicIn);
                     }
-                    LogFlowFunc(("Setting extended audio control to %#x\n", u32));
-                    ichac97MixerStore(pThis, AC97_Extended_Audio_Ctrl_Stat, u32);
+                    LogFlowFunc(("Setting extended audio control to %#x\n", u32Val));
+                    ichac97MixerSet(pThis, AC97_Extended_Audio_Ctrl_Stat, u32Val);
                     break;
                 case AC97_PCM_Front_DAC_Rate:
-                    if (ichac97MixerLoad(pThis, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRA)
+                    if (ichac97MixerGet(pThis, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRA)
                     {
-                        ichac97MixerStore(pThis, index, u32);
-                        LogFlowFunc(("Set front DAC rate to %d\n", u32));
-                        ichac97OpenStream(pThis, PO_INDEX, u32);
+                        ichac97MixerSet(pThis, index, u32Val);
+                        LogFlowFunc(("Set front DAC rate to %RU32\n", u32Val));
+                        ichac97StreamReInit(pThis, &pThis->StrmStOut);
                     }
                     else
-                        LogFlowFunc(("Attempt to set front DAC rate to %d, but VRA is not set\n", u32));
+                        LogFlowFunc(("Attempt to set front DAC rate to %RU32, but VRA is not set\n", u32Val));
                     break;
                 case AC97_MIC_ADC_Rate:
-                    if (ichac97MixerLoad(pThis, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRM)
+                    if (ichac97MixerGet(pThis, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRM)
                     {
-                        ichac97MixerStore(pThis, index, u32);
-                        LogFlowFunc(("Set MIC ADC rate to %d\n", u32));
-                        ichac97OpenStream(pThis, MC_INDEX, u32);
+                        ichac97MixerSet(pThis, index, u32Val);
+                        LogFlowFunc(("Set MIC ADC rate to %RU32\n", u32Val));
+                        ichac97StreamReInit(pThis, &pThis->StrmStMicIn);
                     }
                     else
-                        LogFlowFunc(("Attempt to set MIC ADC rate to %d, but VRM is not set\n", u32));
+                        LogFlowFunc(("Attempt to set MIC ADC rate to %RU32, but VRM is not set\n", u32Val));
                     break;
                 case AC97_PCM_LR_ADC_Rate:
-                    if (ichac97MixerLoad(pThis, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRA)
+                    if (ichac97MixerGet(pThis, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRA)
                     {
-                        ichac97MixerStore(pThis, index, u32);
-                        LogFlowFunc(("Set front LR ADC rate to %d\n", u32));
-                        ichac97OpenStream(pThis, PI_INDEX, u32);
+                        ichac97MixerSet(pThis, index, u32Val);
+                        LogFlowFunc(("Set front LR ADC rate to %RU32\n", u32Val));
+                        ichac97StreamReInit(pThis, &pThis->StrmStLineIn);
                     }
                     else
-                        LogFlowFunc(("Attempt to set LR ADC rate to %d, but VRA is not set\n", u32));
+                        LogFlowFunc(("Attempt to set LR ADC rate to %RU32, but VRA is not set\n", u32Val));
                     break;
                 default:
-                    LogFlowFunc(("U nam writew %#x <- %#x\n", Port, u32));
-                    ichac97MixerStore(pThis, index, u32);
+                    LogFlowFunc(("U nam writew %#x <- %#x\n", Port, u32Val));
+                    ichac97MixerSet(pThis, index, u32Val);
                     break;
             }
             break;
@@ -1831,13 +1855,13 @@ static DECLCALLBACK(int) ichac97IOPortNAMWrite(PPDMDEVINS pDevIns,
 
         case 4:
         {
-            LogFlowFunc(("U nam writel %#x <- %#x\n", Port, u32));
+            LogFlowFunc(("U nam writel %#x <- %#x\n", Port, u32Val));
             pThis->cas = 0;
             break;
         }
 
         default:
-            AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cb, u32));
+            AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cbVal, u32Val));
             break;
     }
 
@@ -1852,13 +1876,16 @@ static DECLCALLBACK(int) ichac97IOPortMap(PPCIDEVICE pPciDev, int iRegion, RTGCP
                                           PCIADDRESSSPACE enmType)
 {
     PPDMDEVINS  pDevIns = pPciDev->pDevIns;
-    PAC97STATE  pThis = RT_FROM_MEMBER(pPciDev, AC97STATE, PciDev);
-    RTIOPORT    Port = (RTIOPORT)GCPhysAddress;
-    int         rc;
+    PAC97STATE  pThis   = RT_FROM_MEMBER(pPciDev, AC97STATE, PciDev);
+    RTIOPORT    Port    = (RTIOPORT)GCPhysAddress;
 
     Assert(enmType == PCI_ADDRESS_SPACE_IO);
     Assert(cb >= 0x20);
 
+    if (iRegion < 0 || iRegion > 1) /* We support 2 regions max. at the moment. */
+        return VERR_INVALID_PARAMETER;
+
+    int rc;
     if (iRegion == 0)
         rc = PDMDevHlpIOPortRegister(pDevIns, Port, 256, pThis,
                                      ichac97IOPortNAMWrite, ichac97IOPortNAMRead,
@@ -1874,32 +1901,58 @@ static DECLCALLBACK(int) ichac97IOPortMap(PPCIDEVICE pPciDev, int iRegion, RTGCP
     return VINF_SUCCESS;
 }
 
+DECLINLINE(PAC97STREAM) ichac97GetStreamFromID(PAC97STATE pThis, uint32_t uID)
+{
+    switch (uID)
+    {
+        case PI_INDEX: return &pThis->StrmStLineIn;
+        case MC_INDEX: return &pThis->StrmStMicIn;
+        case PO_INDEX: return &pThis->StrmStOut;
+        default:       break;
+    }
+
+    return NULL;
+}
+
 #ifdef IN_RING3
+static int ichac97SaveStream(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, PAC97STREAM pStrmSt)
+{
+    PAC97BMREGS pRegs = &pStrmSt->Regs;
+
+    SSMR3PutU32(pSSM, pRegs->bdbar);
+    SSMR3PutU8( pSSM, pRegs->civ);
+    SSMR3PutU8( pSSM, pRegs->lvi);
+    SSMR3PutU16(pSSM, pRegs->sr);
+    SSMR3PutU16(pSSM, pRegs->picb);
+    SSMR3PutU8( pSSM, pRegs->piv);
+    SSMR3PutU8( pSSM, pRegs->cr);
+    SSMR3PutS32(pSSM, pRegs->bd_valid);
+    SSMR3PutU32(pSSM, pRegs->bd.addr);
+    SSMR3PutU32(pSSM, pRegs->bd.ctl_len);
+
+    return VINF_SUCCESS;
+}
+
 /**
  * @callback_method_impl{FNSSMDEVSAVEEXEC}
  */
 static DECLCALLBACK(int) ichac97SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
-    PAC97STATE pThis = PDMINS_2_DATA(pDevIns, AC97STATE *);
+    PAC97STATE pThis = PDMINS_2_DATA(pDevIns, PAC97STATE);
 
     SSMR3PutU32(pSSM, pThis->glob_cnt);
     SSMR3PutU32(pSSM, pThis->glob_sta);
     SSMR3PutU32(pSSM, pThis->cas);
 
-    for (unsigned i = 0; i < RT_ELEMENTS(pThis->bm_regs); i++)
-    {
-        PAC97BMREG pReg = &pThis->bm_regs[i];
-        SSMR3PutU32(pSSM, pReg->bdbar);
-        SSMR3PutU8( pSSM, pReg->civ);
-        SSMR3PutU8( pSSM, pReg->lvi);
-        SSMR3PutU16(pSSM, pReg->sr);
-        SSMR3PutU16(pSSM, pReg->picb);
-        SSMR3PutU8( pSSM, pReg->piv);
-        SSMR3PutU8( pSSM, pReg->cr);
-        SSMR3PutS32(pSSM, pReg->bd_valid);
-        SSMR3PutU32(pSSM, pReg->bd.addr);
-        SSMR3PutU32(pSSM, pReg->bd.ctl_len);
-    }
+    /** @todo r=andy For the next saved state version, add unique stream identifiers and a stream count. */
+    /* Note: The order the streams are saved here is critical, so don't touch. */
+    int rc2 = ichac97SaveStream(pDevIns, pSSM, &pThis->StrmStLineIn);
+    AssertRC(rc2);
+    rc2 = ichac97SaveStream(pDevIns, pSSM, &pThis->StrmStOut);
+    AssertRC(rc2);
+    rc2 = ichac97SaveStream(pDevIns, pSSM, &pThis->StrmStMicIn);
+    AssertRC(rc2);
+
     SSMR3PutMem(pSSM, pThis->mixer_data, sizeof(pThis->mixer_data));
 
     uint8_t active[LAST_INDEX];
@@ -1919,52 +1972,79 @@ static DECLCALLBACK(int) ichac97SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
     return VINF_SUCCESS;
 }
 
+static int ichac97LoadStream(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, PAC97STREAM pStrmSt)
+{
+    PAC97BMREGS pRegs = &pStrmSt->Regs;
+
+    SSMR3GetU32(pSSM, &pRegs->bdbar);
+    SSMR3GetU8( pSSM, &pRegs->civ);
+    SSMR3GetU8( pSSM, &pRegs->lvi);
+    SSMR3GetU16(pSSM, &pRegs->sr);
+    SSMR3GetU16(pSSM, &pRegs->picb);
+    SSMR3GetU8( pSSM, &pRegs->piv);
+    SSMR3GetU8( pSSM, &pRegs->cr);
+    SSMR3GetS32(pSSM, &pRegs->bd_valid);
+    SSMR3GetU32(pSSM, &pRegs->bd.addr);
+    SSMR3GetU32(pSSM, &pRegs->bd.ctl_len);
+
+    return VINF_SUCCESS;
+}
 
 /**
  * @callback_method_impl{FNSSMDEVLOADEXEC}
  */
 static DECLCALLBACK(int) ichac97LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
-    PAC97STATE pThis = PDMINS_2_DATA(pDevIns, AC97STATE *);
+    PAC97STATE pThis = PDMINS_2_DATA(pDevIns, PAC97STATE);
 
-    AssertMsgReturn (uVersion == AC97_SSM_VERSION, ("%d\n", uVersion), VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION);
+    AssertMsgReturn (uVersion == AC97_SSM_VERSION, ("%RU32\n", uVersion), VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION);
     Assert(uPass == SSM_PASS_FINAL); NOREF(uPass);
 
     SSMR3GetU32(pSSM, &pThis->glob_cnt);
     SSMR3GetU32(pSSM, &pThis->glob_sta);
     SSMR3GetU32(pSSM, &pThis->cas);
 
-    for (unsigned i = 0; i < RT_ELEMENTS(pThis->bm_regs); i++)
-    {
-        PAC97BMREG pReg = &pThis->bm_regs[i];
-        SSMR3GetU32(pSSM, &pReg->bdbar);
-        SSMR3GetU8( pSSM, &pReg->civ);
-        SSMR3GetU8( pSSM, &pReg->lvi);
-        SSMR3GetU16(pSSM, &pReg->sr);
-        SSMR3GetU16(pSSM, &pReg->picb);
-        SSMR3GetU8( pSSM, &pReg->piv);
-        SSMR3GetU8( pSSM, &pReg->cr);
-        SSMR3GetS32(pSSM, &pReg->bd_valid);
-        SSMR3GetU32(pSSM, &pReg->bd.addr);
-        SSMR3GetU32(pSSM, &pReg->bd.ctl_len);
-    }
+    /** @todo r=andy For the next saved state version, add unique stream identifiers and a stream count. */
+    /* Note: The order the streams are loaded here is critical, so don't touch. */
+    int rc2 = ichac97LoadStream(pDevIns, pSSM, &pThis->StrmStLineIn);
+    AssertRC(rc2);
+    rc2 = ichac97LoadStream(pDevIns, pSSM, &pThis->StrmStOut);
+    AssertRC(rc2);
+    rc2 = ichac97LoadStream(pDevIns, pSSM, &pThis->StrmStMicIn);
+    AssertRC(rc2);
 
     SSMR3GetMem(pSSM, pThis->mixer_data, sizeof(pThis->mixer_data));
-    uint8_t active[LAST_INDEX];
-    SSMR3GetMem(pSSM, active, sizeof(active));
 
-    ichac97RecordSelect(pThis, ichac97MixerLoad(pThis, AC97_Record_Select));
-# define V_(a, b) ichac97SetVolume(pThis, a, b, ichac97MixerLoad(pThis, a))
+    /** @todo r=andy Stream IDs are hardcoded to certain streams. */
+    uint8_t uaStrmsActive[LAST_INDEX];
+    SSMR3GetMem(pSSM, uaStrmsActive, sizeof(uaStrmsActive));
+
+    ichac97RecordSelect(pThis, ichac97MixerGet(pThis, AC97_Record_Select));
+# define V_(a, b) ichac97MixerSetVolume(pThis, a, b, ichac97MixerGet(pThis, a))
     V_(AC97_Master_Volume_Mute,  PDMAUDIOMIXERCTL_VOLUME);
     V_(AC97_PCM_Out_Volume_Mute, PDMAUDIOMIXERCTL_PCM);
     V_(AC97_Line_In_Volume_Mute, PDMAUDIOMIXERCTL_LINE_IN);
 # undef V_
     if (pThis->uCodecModel == Codec_AD1980)
-        if (ichac97MixerLoad(pThis, AC97_AD_Misc) & AD_MISC_HPSEL)
-            ichac97SetVolume(pThis, AC97_Headphone_Volume_Mute, PDMAUDIOMIXERCTL_VOLUME,
-                             ichac97MixerLoad(pThis, AC97_Headphone_Volume_Mute));
+        if (ichac97MixerGet(pThis, AC97_AD_Misc) & AD_MISC_HPSEL)
+            ichac97MixerSetVolume(pThis, AC97_Headphone_Volume_Mute, PDMAUDIOMIXERCTL_VOLUME,
+                             ichac97MixerGet(pThis, AC97_Headphone_Volume_Mute));
 
-    ichac97ResetStreams(pThis, active);
+    int rc;
+    rc = ichac97StreamInit(pThis, &pThis->StrmStLineIn, PI_INDEX);
+    AssertRC(rc);
+    rc = ichac97StreamInit(pThis, &pThis->StrmStMicIn,  MC_INDEX);
+    AssertRC(rc);
+    rc = ichac97StreamInit(pThis, &pThis->StrmStOut,    PO_INDEX);
+    AssertRC(rc);
+
+    /** @todo r=andy Stream IDs are hardcoded to certain streams. */
+    rc = ichac97StreamSetActive(pThis, &pThis->StrmStLineIn, RT_BOOL(uaStrmsActive[PI_INDEX]));
+    AssertRC(rc);
+    rc = ichac97StreamSetActive(pThis, &pThis->StrmStMicIn,  RT_BOOL(uaStrmsActive[MC_INDEX]));
+    AssertRC(rc);
+    rc = ichac97StreamSetActive(pThis, &pThis->StrmStOut,    RT_BOOL(uaStrmsActive[PO_INDEX]));
+    AssertRC(rc);
 
     pThis->bup_flag = 0;
     pThis->last_samp = 0;
@@ -1992,16 +2072,18 @@ static DECLCALLBACK(void *) ichac97QueryInterface(struct PDMIBASE *pInterface, c
  * @remarks The original sources didn't install a reset handler, but it seems to
  *          make sense to me so we'll do it.
  */
-static DECLCALLBACK(void) ac97Reset(PPDMDEVINS pDevIns)
+static DECLCALLBACK(void) ichac97Reset(PPDMDEVINS pDevIns)
 {
-    PAC97STATE pThis = PDMINS_2_DATA(pDevIns, AC97STATE *);
+    PAC97STATE pThis = PDMINS_2_DATA(pDevIns, PAC97STATE);
+
+    LogFlowFuncEnter();
 
     /*
      * Reset the device state (will need pDrv later).
      */
-    ichac97ResetBMRegs(pThis, &pThis->bm_regs[0]);
-    ichac97ResetBMRegs(pThis, &pThis->bm_regs[1]);
-    ichac97ResetBMRegs(pThis, &pThis->bm_regs[2]);
+    ichac97StreamResetBMRegs(pThis, &pThis->StrmStLineIn);
+    ichac97StreamResetBMRegs(pThis, &pThis->StrmStMicIn);
+    ichac97StreamResetBMRegs(pThis, &pThis->StrmStOut);
 
     /*
      * Reset the mixer too. The Windows XP driver seems to rely on
@@ -2009,6 +2091,29 @@ static DECLCALLBACK(void) ac97Reset(PPDMDEVINS pDevIns)
      * the codec manually.
      */
     ichac97MixerReset(pThis);
+
+    /*
+     * Stop any audio currently playing.
+     */
+    PAC97DRIVER pDrv;
+    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+    {
+        pDrv->pConnector->pfnEnableIn(pDrv->pConnector,  pDrv->LineIn.pStrmIn, false /* Disable */);
+        /* Ignore rc. */
+        pDrv->pConnector->pfnEnableIn(pDrv->pConnector,  pDrv->MicIn.pStrmIn,  false /* Disable */);
+        /* Ditto. */
+        pDrv->pConnector->pfnEnableOut(pDrv->pConnector, pDrv->Out.pStrmOut,   false /* Disable */);
+        /* Ditto. */
+    }
+
+    /*
+     * Reset all streams.
+     */
+    ichac97StreamReset(pThis, &pThis->StrmStLineIn);
+    ichac97StreamReset(pThis, &pThis->StrmStMicIn);
+    ichac97StreamReset(pThis, &pThis->StrmStOut);
+
+    LogRel(("AC97: Reset\n"));
 }
 
 
@@ -2137,12 +2242,14 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
     /*
      * Validations.
      */
-    if (!CFGMR3AreValuesValid(pCfg, "Codec\0"))
+    if (!CFGMR3AreValuesValid(pCfg,
+                              "Codec\0"
+                              "TimerHz\0"))
         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
                                 N_("Invalid configuration for the AC'97 device"));
 
     /*
-     * Determine the codec model.
+     * Read config data.
      */
     char szCodec[20];
     int rc = CFGMR3QueryStringDef(pCfg, "Codec", &szCodec[0], sizeof(szCodec), "STAC9700");
@@ -2150,6 +2257,14 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
                                 N_("AC'97 configuration error: Querying \"Codec\" as string failed"));
 
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+    uint16_t uTimerHz;
+    rc = CFGMR3QueryU16Def(pCfg, "TimerHz", &uTimerHz, 200 /* Hz */);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("AC'97 configuration error: failed to read Hertz (Hz) rate as unsigned integer"));
+#endif
+
     /*
      * The AD1980 codec (with corresponding PCI subsystem vendor ID) is whitelisted
      * in the Linux kernel; Linux makes no attempt to measure the data rate and assumes
@@ -2172,7 +2287,7 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
     /*
      * Initialize data (most of it anyway).
      */
-    pThis->pDevIns                  = pDevIns;
+    pThis->pDevInsR3                = pDevIns;
     /* IBase */
     pThis->IBase.pfnQueryInterface  = ichac97QueryInterface;
 
@@ -2214,19 +2329,19 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
      * saved state item.
      */
     rc = PDMDevHlpPCIRegister(pDevIns, &pThis->PciDev);
-    if (RT_FAILURE (rc))
+    if (RT_FAILURE(rc))
         return rc;
 
     rc = PDMDevHlpPCIIORegionRegister(pDevIns, 0, 256, PCI_ADDRESS_SPACE_IO, ichac97IOPortMap);
-    if (RT_FAILURE (rc))
+    if (RT_FAILURE(rc))
         return rc;
 
     rc = PDMDevHlpPCIIORegionRegister(pDevIns, 1, 64, PCI_ADDRESS_SPACE_IO, ichac97IOPortMap);
-    if (RT_FAILURE (rc))
+    if (RT_FAILURE(rc))
         return rc;
 
     rc = PDMDevHlpSSMRegister(pDevIns, AC97_SSM_VERSION, sizeof(*pThis), ichac97SaveExec, ichac97LoadExec);
-    if (RT_FAILURE (rc))
+    if (RT_FAILURE(rc))
         return rc;
 
     /*
@@ -2249,70 +2364,109 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
 
     LogFunc(("cLUNs=%RU8, rc=%Rrc\n", uLUN, rc));
 
-    ac97Reset(pDevIns);
-
-    PAC97DRIVER pDrv;
-    uLUN = 0;
-    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+    if (RT_SUCCESS(rc))
     {
-        if (!pDrv->pConnector->pfnIsInputOK(pDrv->pConnector, pDrv->LineIn.pStrmIn))
-            LogRel(("AC97: WARNING: Unable to open PCM line input for LUN #%RU32!\n", uLUN));
-        if (!pDrv->pConnector->pfnIsOutputOK(pDrv->pConnector, pDrv->Out.pStrmOut))
-            LogRel(("AC97: WARNING: Unable to open PCM output for LUN #%RU32!\n", uLUN));
-        if (!pDrv->pConnector->pfnIsInputOK(pDrv->pConnector, pDrv->MicIn.pStrmIn))
-            LogRel(("AC97: WARNING: Unable to open PCM microphone input for LUN #%RU32!\n", uLUN));
+        rc = AudioMixerCreate("AC'97 Mixer", 0 /* uFlags */, &pThis->pMixer);
+        if (RT_SUCCESS(rc))
+        {
+            /* Set a default audio format for our mixer. */
+            PDMAUDIOSTREAMCFG streamCfg;
+            streamCfg.uHz           = 44100;
+            streamCfg.cChannels     = 2;
+            streamCfg.enmFormat     = AUD_FMT_S16;
+            streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
 
-        uLUN++;
+            rc = AudioMixerSetDeviceFormat(pThis->pMixer, &streamCfg);
+            AssertRC(rc);
+
+            /* Add all required audio sinks. */
+            rc = AudioMixerAddSink(pThis->pMixer, "[Playback] PCM Output", AUDMIXSINKDIR_OUTPUT, &pThis->pSinkOutput);
+            AssertRC(rc);
+
+            rc = AudioMixerAddSink(pThis->pMixer, "[Recording] Line In", AUDMIXSINKDIR_INPUT, &pThis->pSinkLineIn);
+            AssertRC(rc);
+
+            rc = AudioMixerAddSink(pThis->pMixer, "[Recording] Microphone In", AUDMIXSINKDIR_INPUT, &pThis->pSinkMicIn);
+            AssertRC(rc);
+        }
     }
 
-    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+    ichac97Reset(pDevIns);
+
+    if (RT_SUCCESS(rc))
     {
-        /*
-         * Only primary drivers are critical for the VM to run. Everything else
-         * might not worth showing an own error message box in the GUI.
-         */
-        if (!(pDrv->Flags & PDMAUDIODRVFLAG_PRIMARY))
-            continue;
+        rc = ichac97StreamInit(pThis, &pThis->StrmStLineIn, PI_INDEX);
+        if (RT_FAILURE(rc))
+            return rc;
+        rc = ichac97StreamInit(pThis, &pThis->StrmStMicIn,  MC_INDEX);
+        if (RT_FAILURE(rc))
+            return rc;
+        rc = ichac97StreamInit(pThis, &pThis->StrmStOut,    PO_INDEX);
+        if (RT_FAILURE(rc))
+            return rc;
 
-        PPDMIAUDIOCONNECTOR pCon = pDrv->pConnector;
-        AssertPtr(pCon);
-        if (   !pCon->pfnIsInputOK (pCon, pDrv->LineIn.pStrmIn)
-            && !pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn)
-            && !pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut))
+        PAC97DRIVER pDrv;
+        RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
         {
-            LogRel(("AC97: Falling back to NULL driver (no sound audible)\n"));
-
-            ac97Reset(pDevIns);
+            /*
+             * Only primary drivers are critical for the VM to run. Everything else
+             * might not worth showing an own error message box in the GUI.
+             */
+            if (!(pDrv->Flags & PDMAUDIODRVFLAG_PRIMARY))
+                continue;
 
-            /* Was not able initialize *any* stream.
-             * Select the NULL audio driver instead. */
-            pCon->pfnInitNull(pCon);
+            PPDMIAUDIOCONNECTOR pCon = pDrv->pConnector;
+            AssertPtr(pCon);
 
-            PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
-                N_("No audio devices could be opened. Selecting the NULL audio backend "
-                   "with the consequence that no sound is audible"));
-        }
-        else if (   !pCon->pfnIsInputOK (pCon, pDrv->LineIn.pStrmIn)
-                 || !pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn)
-                 || !pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut))
-        {
-            char   szMissingStreams[255];
-            size_t len = 0;
+            uint8_t cFailed = 0;
             if (!pCon->pfnIsInputOK (pCon, pDrv->LineIn.pStrmIn))
-                len = RTStrPrintf(szMissingStreams,
-                                  sizeof(szMissingStreams), "PCM Input");
-            if (!pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut))
-                len += RTStrPrintf(szMissingStreams + len,
-                                   sizeof(szMissingStreams) - len, len ? ", PCM Output" : "PCM Output");
+                cFailed++;
             if (!pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn))
-                len += RTStrPrintf(szMissingStreams + len,
-                                   sizeof(szMissingStreams) - len, len ? ", PCM Microphone" : "PCM Microphone");
-
-            PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
-                N_("Some AC'97 audio streams (%s) could not be opened. Guest applications generating audio "
-                "output or depending on audio input may hang. Make sure your host audio device "
-                "is working properly. Check the logfile for error messages of the audio "
-                "subsystem"), szMissingStreams);
+                cFailed++;
+            if (!pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut))
+                cFailed++;
+
+            if (cFailed == 3)
+            {
+                LogRel(("AC97: Falling back to NULL driver (no sound audible)\n"));
+
+                ichac97Reset(pDevIns);
+
+                /* Was not able initialize *any* stream.
+                 * Select the NULL audio driver instead. */
+                pCon->pfnInitNull(pCon);
+
+                PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
+                    N_("No audio devices could be opened. Selecting the NULL audio backend "
+                       "with the consequence that no sound is audible"));
+            }
+            else if (cFailed)
+            {
+                if (!pDrv->pConnector->pfnIsInputOK(pDrv->pConnector, pDrv->LineIn.pStrmIn))
+                    LogRel(("AC97: WARNING: Unable to open PCM line input for LUN #%RU32!\n",       pDrv->uLUN));
+                if (!pDrv->pConnector->pfnIsInputOK(pDrv->pConnector, pDrv->MicIn.pStrmIn))
+                    LogRel(("AC97: WARNING: Unable to open PCM microphone input for LUN #%RU32!\n", pDrv->uLUN));
+                if (!pDrv->pConnector->pfnIsOutputOK(pDrv->pConnector, pDrv->Out.pStrmOut))
+                    LogRel(("AC97: WARNING: Unable to open PCM output for LUN #%RU32!\n",           pDrv->uLUN));
+
+                char   szMissingStreams[255];
+                size_t len = 0;
+                if (!pCon->pfnIsInputOK (pCon, pDrv->LineIn.pStrmIn))
+                    len = RTStrPrintf(szMissingStreams,
+                                      sizeof(szMissingStreams), "PCM Input");
+                if (!pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut))
+                    len += RTStrPrintf(szMissingStreams + len,
+                                       sizeof(szMissingStreams) - len, len ? ", PCM Output" : "PCM Output");
+                if (!pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn))
+                    len += RTStrPrintf(szMissingStreams + len,
+                                       sizeof(szMissingStreams) - len, len ? ", PCM Microphone" : "PCM Microphone");
+
+                PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
+                    N_("Some AC'97 audio streams (%s) could not be opened. Guest applications generating audio "
+                    "output or depending on audio input may hang. Make sure your host audio device "
+                    "is working properly. Check the logfile for error messages of the audio "
+                    "subsystem"), szMissingStreams);
+            }
         }
     }
 
@@ -2324,6 +2478,7 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
             rc = VERR_NO_MEMORY;
     }
 
+# ifndef VBOX_WITH_AUDIO_CALLBACKS
     if (RT_SUCCESS(rc))
     {
         /* Start the emulation timer. */
@@ -2333,15 +2488,45 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
 
         if (RT_SUCCESS(rc))
         {
-            pThis->uTicks = PDMDevHlpTMTimeVirtGetFreq(pDevIns) / 200; /** Hz. @todo Make this configurable! */
-            if (pThis->uTicks < 100)
-                pThis->uTicks = 100;
-            LogFunc(("Timer ticks=%RU64\n", pThis->uTicks));
+            pThis->cTimerTicks = TMTimerGetFreq(pThis->pTimer) / uTimerHz;
+            pThis->uTimerTS    = TMTimerGet(pThis->pTimer);
+            LogFunc(("Timer ticks=%RU64 (%RU16 Hz)\n", pThis->cTimerTicks, uTimerHz));
 
             /* Fire off timer. */
-            TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->uTicks);
+            TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->cTimerTicks);
         }
     }
+# else
+    if (RT_SUCCESS(rc))
+    {
+        PAC97DRIVER pDrv;
+        RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+        {
+            /* Only register primary driver.
+             * The device emulation does the output multiplexing then. */
+            if (pDrv->Flags != PDMAUDIODRVFLAG_PRIMARY)
+                continue;
+
+            PDMAUDIOCALLBACK AudioCallbacks[2];
+
+            AC97CALLBACKCTX Ctx = { pThis, pDrv };
+
+            AudioCallbacks[0].enmType     = PDMAUDIOCALLBACKTYPE_INPUT;
+            AudioCallbacks[0].pfnCallback = ac97CallbackInput;
+            AudioCallbacks[0].pvCtx       = &Ctx;
+            AudioCallbacks[0].cbCtx       = sizeof(AC97CALLBACKCTX);
+
+            AudioCallbacks[1].enmType     = PDMAUDIOCALLBACKTYPE_OUTPUT;
+            AudioCallbacks[1].pfnCallback = ac97CallbackOutput;
+            AudioCallbacks[1].pvCtx       = &Ctx;
+            AudioCallbacks[1].cbCtx       = sizeof(AC97CALLBACKCTX);
+
+            rc = pDrv->pConnector->pfnRegisterCallbacks(pDrv->pConnector, AudioCallbacks, RT_ELEMENTS(AudioCallbacks));
+            if (RT_FAILURE(rc))
+                break;
+        }
+    }
+# endif
 
 # ifdef VBOX_WITH_STATISTICS
     if (RT_SUCCESS(rc))
@@ -2355,7 +2540,8 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
     }
 # endif
 
-    return VINF_SUCCESS;
+    LogFlowFuncLeaveRC(rc);
+    return rc;
 }
 
 /**
@@ -2392,7 +2578,7 @@ const PDMDEVREG g_DeviceICHAC97 =
     /* pfnPowerOn */
     NULL,
     /* pfnReset */
-    ac97Reset,
+    ichac97Reset,
     /* pfnSuspend */
     NULL,
     /* pfnResume */
diff --git a/src/VBox/Devices/Audio/DevIchHda.cpp b/src/VBox/Devices/Audio/DevIchHda.cpp
index c905c31..a096510 100644
--- a/src/VBox/Devices/Audio/DevIchHda.cpp
+++ b/src/VBox/Devices/Audio/DevIchHda.cpp
@@ -32,15 +32,17 @@
 #include <iprt/assert.h>
 #include <iprt/asm.h>
 #include <iprt/asm-math.h>
+#include <iprt/list.h>
 #ifdef IN_RING3
-# include <iprt/uuid.h>
-# include <iprt/string.h>
 # include <iprt/mem.h>
+# include <iprt/semaphore.h>
+# include <iprt/string.h>
+# include <iprt/uuid.h>
 #endif
-#include <iprt/list.h>
 
 #include "VBoxDD.h"
 
+#include "AudioMixBuffer.h"
 #include "AudioMixer.h"
 #include "DevIchHdaCodec.h"
 
@@ -276,7 +278,7 @@
 #define HDA_REG_DPUBASE             33 /* 0x74 */
 #define HDA_RMX_DPUBASE             31
 #define DPUBASE(pThis)              (HDA_REG((pThis), DPUBASE))
-#define DPBASE_ENABLED              1
+
 #define DPBASE_ADDR_MASK            (~(uint64_t)0x7f)
 
 #define HDA_STREAM_REG_DEF(name, num)           (HDA_REG_SD##num##name)
@@ -284,6 +286,8 @@
 /* Note: sdnum here _MUST_ be stream reg number [0,7]. */
 #define HDA_STREAM_REG(pThis, name, sdnum)      (HDA_REG_IND((pThis), HDA_REG_SD0##name + (sdnum) * 10))
 
+#define HDA_SD_NUM_FROM_REG(pThis, func, reg)   ((reg - HDA_STREAM_REG_DEF(func, 0)) / 10)
+
 #define HDA_REG_SD0CTL              34 /* 0x80 */
 #define HDA_REG_SD1CTL              (HDA_STREAM_REG_DEF(CTL, 0) + 10) /* 0xA0 */
 #define HDA_REG_SD2CTL              (HDA_STREAM_REG_DEF(CTL, 0) + 20) /* 0xC0 */
@@ -302,8 +306,9 @@
 #define HDA_RMX_SD7CTL              (HDA_STREAM_RMX_DEF(CTL, 0) + 70)
 
 #define SD(func, num)               SD##num##func
-#define SDCTL(pThis, num)           HDA_REG((pThis), SD(CTL, num))
-#define SDCTL_NUM(pThis, num)       ((SDCTL((pThis), num) & HDA_REG_FIELD_MASK(SDCTL,NUM)) >> HDA_REG_FIELD_SHIFT(SDCTL, NUM))
+
+#define HDA_SDCTL(pThis, num)       HDA_REG((pThis), SD(CTL, num))
+#define HDA_SDCTL_NUM(pThis, num)   ((HDA_SDCTL((pThis), num) & HDA_REG_FIELD_MASK(SDCTL,NUM)) >> HDA_REG_FIELD_SHIFT(SDCTL, NUM))
 #define HDA_SDCTL_NUM_MASK          0xF
 #define HDA_SDCTL_NUM_SHIFT         20
 #define HDA_SDCTL_DIR_SHIFT         19
@@ -373,7 +378,6 @@
 #define HDA_RMX_SD6CBL              (HDA_STREAM_RMX_DEF(CBL, 0) + 60)
 #define HDA_RMX_SD7CBL              (HDA_STREAM_RMX_DEF(CBL, 0) + 70)
 
-
 #define HDA_REG_SD0LVI              38 /* 0x8C */
 #define HDA_REG_SD1LVI              (HDA_STREAM_REG_DEF(LVI, 0) + 10) /* 0xAC */
 #define HDA_REG_SD2LVI              (HDA_STREAM_REG_DEF(LVI, 0) + 20) /* 0xCC */
@@ -409,7 +413,7 @@
 #define HDA_RMX_SD7FIFOW            (HDA_STREAM_RMX_DEF(FIFOW, 0) + 70)
 
 /*
- * ICH6 datasheet defined limits for FIFOW values (18.2.38)
+ * ICH6 datasheet defined limits for FIFOW values (18.2.38).
  */
 #define HDA_SDFIFOW_8B              0x2
 #define HDA_SDFIFOW_16B             0x3
@@ -437,14 +441,15 @@
  * formula: size - 1
  * Other values not listed are not supported.
  */
+#define HDA_SDINFIFO_120B           0x77 /* 8-, 16-, 20-, 24-, 32-bit Input Streams */
+#define HDA_SDINFIFO_160B           0x9F /* 20-, 24-bit Input Streams Streams */
+
 #define HDA_SDONFIFO_16B            0x0F /* 8-, 16-, 20-, 24-, 32-bit Output Streams */
 #define HDA_SDONFIFO_32B            0x1F /* 8-, 16-, 20-, 24-, 32-bit Output Streams */
 #define HDA_SDONFIFO_64B            0x3F /* 8-, 16-, 20-, 24-, 32-bit Output Streams */
 #define HDA_SDONFIFO_128B           0x7F /* 8-, 16-, 20-, 24-, 32-bit Output Streams */
 #define HDA_SDONFIFO_192B           0xBF /* 8-, 16-, 20-, 24-, 32-bit Output Streams */
 #define HDA_SDONFIFO_256B           0xFF /* 20-, 24-bit Output Streams */
-#define HDA_SDINFIFO_120B           0x77 /* 8-, 16-, 20-, 24-, 32-bit Input Streams */
-#define HDA_SDINFIFO_160B           0x9F /* 20-, 24-bit Input Streams Streams */
 #define SDFIFOS(pThis, num)         HDA_REG((pThis), SD(FIFOS, num))
 
 #define HDA_REG_SD0FMT              41 /* 0x92 */
@@ -519,28 +524,104 @@
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
-typedef struct HDABDLEDESC
-{
-    uint64_t    u64BdleCviAddr;
-    uint32_t    u32BdleMaxCvi;
-    uint32_t    u32BdleCvi;
-    uint32_t    u32BdleCviLen;
-    uint32_t    u32BdleCviPos;
-    bool        fBdleCviIoc;
-    uint32_t    cbUnderFifoW;
-    uint8_t     au8HdaBuffer[HDA_SDONFIFO_256B + 1];
-} HDABDLEDESC, *PHDABDLEDESC;
-
-typedef struct HDASTREAMTRANSFERDESC
-{
-    uint64_t u64BaseDMA;
-    uint32_t u32Ctl;
-    uint32_t *pu32Sts;
-    uint8_t  u8Strm;
-    uint32_t *pu32Lpib;
-    uint32_t u32Cbl;
-    uint32_t u32Fifos;
-} HDASTREAMTRANSFERDESC, *PHDASTREAMTRANSFERDESC;
+
+/**
+ * Internal state of a Buffer Descriptor List Entry (BDLE),
+ * needed to keep track of the data needed for the actual device
+ * emulation.
+ */
+typedef struct HDABDLESTATE
+{
+    /** Own index within the BDL (Buffer Descriptor List). */
+    uint32_t     u32BDLIndex;
+    /** Number of bytes below the stream's FIFO watermark (SDFIFOW).
+     *  Used to check if we need fill up the FIFO again. */
+    uint32_t     cbBelowFIFOW;
+    /** The buffer descriptor's internal DMA buffer. */
+    uint8_t      au8FIFO[HDA_SDONFIFO_256B + 1];
+    /** Current offset in DMA buffer (in bytes).*/
+    uint32_t     u32BufOff;
+    uint32_t     Padding;
+} HDABDLESTATE, *PHDABDLESTATE;
+
+/**
+ * Buffer Descriptor List Entry (BDLE) (3.6.3).
+ *
+ * Contains only register values which do *not* change until a
+ * stream reset occurs.
+ */
+typedef struct HDABDLE
+{
+    /** Starting address of the actual buffer. Must be 128-bit aligned. */
+    uint64_t     u64BufAdr;
+    /** Size of the actual buffer (in bytes). */
+    uint32_t     u32BufSize;
+    /** Interrupt on completion; the controller will generate
+     *  an interrupt when the last byte of the buffer has been
+     *  fetched by the DMA engine. */
+    bool         fIntOnCompletion;
+    /** Internal state of this BDLE.
+     *  Not part of the actual BDLE registers. */
+    HDABDLESTATE State;
+} HDABDLE, *PHDABDLE;
+
+/**
+ * Internal state of a HDA stream.
+ */
+typedef struct HDASTREAMSTATE
+{
+    /** Number of BDLEs (Buffer Descriptor List Entry).
+     *  Should be SDnLVI + 1 usually. */
+    uint16_t            cBDLE;
+    /** Current BDLE to use. Wraps around to 0 if
+     *  maximum (cBDLE) is reached. */
+    uint16_t            uCurBDLE;
+    /** Stop indicator. */
+    volatile bool       fDoStop;
+    /** Flag indicating whether this stream is in an
+     *  active (operative) state or not. */
+    volatile bool       fActive;
+    /** Flag indicating whether this stream currently is
+     *  in reset mode and therefore not acccessible by the guest. */
+    volatile bool       fInReset;
+    /** Unused, padding. */
+    bool                fPadding;
+    /** Event signalling that the stream's state has been changed. */
+    RTSEMEVENT          hStateChangedEvent;
+    /** Array of BDLEs. */
+    R3PTRTYPE(PHDABDLE) paBDLE;
+} HDASTREAMSTATE, *PHDASTREAMSTATE;
+
+/**
+ * Structure for keeping a HDA stream state.
+ *
+ * Contains only register values which do *not* change until a
+ * stream reset occurs.
+ */
+typedef struct HDASTREAM
+{
+    /** Stream number (SDn). */
+    uint8_t        u8Strm;
+    uint8_t        Padding0[7];
+    /** DMA base address (SDnBDPU - SDnBDPL). */
+    uint64_t       u64BaseDMA;
+    /** Cyclic Buffer Length (SDnCBL).
+     *  Represents the size of the ring buffer. */
+    uint32_t       u32CBL;
+    /** Format (SDnFMT). */
+    uint16_t       u16FMT;
+    /** FIFO Size (FIFOS).
+     *  Maximum number of bytes that may have been DMA'd into
+     *  memory but not yet transmitted on the link.
+     *
+     *  Must be a power of two. */
+    uint16_t       u16FIFOS;
+    /** Last Valid Index (SDnLVI). */
+    uint16_t       u16LVI;
+    uint16_t       Padding1[3];
+    /** Internal state of this stream. */
+    HDASTREAMSTATE State;
+} HDASTREAM, *PHDASTREAM;
 
 typedef struct HDAINPUTSTREAM
 {
@@ -569,18 +650,8 @@ typedef struct HDAOUTPUTSTREAM
  */
 typedef struct HDADRIVER
 {
-    union
-    {
-        /** Node for storing this driver in our device driver
-         *  list of HDASTATE. */
-        RTLISTNODE                     Node;
-        struct
-        {
-            R3PTRTYPE(void *)          dummy1;
-            R3PTRTYPE(void *)          dummy2;
-        } dummy;
-    };
-
+    /** Node for storing this driver in our device driver list of HDASTATE. */
+    RTLISTNODER3                       Node;
     /** Pointer to HDA controller (state). */
     R3PTRTYPE(PHDASTATE)               pHDAState;
     /** Driver flags. */
@@ -612,60 +683,68 @@ typedef struct HDASTATE
     PPDMDEVINSR0                       pDevInsR0;
     /** R0 Pointer to the device instance. */
     PPDMDEVINSRC                       pDevInsRC;
-
+    /** Padding for alignment. */
     uint32_t                           u32Padding;
-
     /** Pointer to the attached audio driver. */
     R3PTRTYPE(PPDMIBASE)               pDrvBase;
     /** The base interface for LUN\#0. */
     PDMIBASE                           IBase;
     RTGCPHYS                           MMIOBaseAddr;
+    /** The HDA's register set. */
     uint32_t                           au32Regs[HDA_NREGS];
-    HDABDLEDESC                        StInBdle;
-    HDABDLEDESC                        StOutBdle;
-    HDABDLEDESC                        StMicBdle;
+    /** Stream state for line-in. */
+    HDASTREAM                          StrmStLineIn;
+    /** Stream state for microphone-in. */
+    HDASTREAM                          StrmStMicIn;
+    /** Stream state for output. */
+    HDASTREAM                          StrmStOut;
+    /** CORB buffer base address. */
     uint64_t                           u64CORBBase;
+    /** RIRB buffer base address. */
     uint64_t                           u64RIRBBase;
+    /** DMA base address.
+     *  Made out of DPLBASE + DPUBASE (3.3.32 + 3.3.33). */
     uint64_t                           u64DPBase;
+    /** DMA position buffer enable bit. */
+    bool                               fDMAPosition;
+    /** Padding for alignment. */
+    uint8_t                            u32Padding0[7];
     /** Pointer to CORB buffer. */
     R3PTRTYPE(uint32_t *)              pu32CorbBuf;
     /** Size in bytes of CORB buffer. */
     uint32_t                           cbCorbBuf;
-    uint32_t                           u32Padding2;
+    /** Padding for alignment. */
+    uint32_t                           u32Padding1;
     /** Pointer to RIRB buffer. */
     R3PTRTYPE(uint64_t *)              pu64RirbBuf;
     /** Size in bytes of RIRB buffer. */
     uint32_t                           cbRirbBuf;
     /** Indicates if HDA is in reset. */
     bool                               fInReset;
-    /** Interrupt on completion */
-    bool                               fCviIoc;
     /** Flag whether the R0 part is enabled. */
     bool                               fR0Enabled;
     /** Flag whether the RC part is enabled. */
     bool                               fRCEnabled;
-    /** The emulation timer for handling the attached
-     *  LUN drivers. */
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+    /** The timer for pumping data thru the attached LUN drivers. */
     PTMTIMERR3                         pTimer;
-    /** Timer ticks for handling the LUN drivers. */
-    uint64_t                           uTicks;
-# ifdef VBOX_WITH_STATISTICS
+    /** The timer interval for pumping data thru the LUN drivers in timer ticks. */
+    uint64_t                           cTimerTicks;
+    /** Timestamp of the last timer callback (hdaTimer).
+     * Used to calculate the time actually elapsed between two timer callbacks. */
+    uint64_t                           uTimerTS;
+#endif
+#ifdef VBOX_WITH_STATISTICS
+# ifndef VBOX_WITH_AUDIO_CALLBACKS
     STAMPROFILE                        StatTimer;
+# endif
     STAMCOUNTER                        StatBytesRead;
     STAMCOUNTER                        StatBytesWritten;
-# endif
+#endif
     /** Pointer to HDA codec to use. */
     R3PTRTYPE(PHDACODEC)               pCodec;
-    union
-    {
-        /** List of associated LUN drivers. */
-        RTLISTANCHOR                   lstDrv;
-        struct
-        {
-            R3PTRTYPE(void *)          dummy1;
-            R3PTRTYPE(void *)          dummy2;
-        } dummy;
-    };
+    /** List of associated LUN drivers (HDADRIVER). */
+    RTLISTANCHORR3                     lstDrv;
     /** The device' software mixer. */
     R3PTRTYPE(PAUDIOMIXER)             pMixer;
     /** Audio sink for PCM output. */
@@ -675,18 +754,21 @@ typedef struct HDASTATE
     /** Audio mixer sink for microphone input. */
     R3PTRTYPE(PAUDMIXSINK)             pSinkMicIn;
     uint64_t                           u64BaseTS;
-    /** 1.2.3.4.5.6.7. - someone please tell me what I'm counting! - .8.9.10... */
-    uint8_t                            u8Counter;
-    uint8_t                            au8Padding[7];
+    /** Response Interrupt Count (RINTCNT). */
+    uint8_t                            u8RespIntCnt;
+    /** Padding for alignment. */
+    uint8_t                            au8Padding2[7];
 } HDASTATE;
 /** Pointer to the ICH Intel HD Audio Controller state. */
 typedef HDASTATE *PHDASTATE;
 
-#define ISD0FMT_TO_AUDIO_SELECTOR(pThis) \
-    ( AUDIO_FORMAT_SELECTOR((pThis)->pCodec, In, SDFMT_BASE_RATE(pThis, 0), SDFMT_MULT(pThis, 0), SDFMT_DIV(pThis, 0)) )
-#define OSD0FMT_TO_AUDIO_SELECTOR(pThis) \
-    ( AUDIO_FORMAT_SELECTOR((pThis)->pCodec, Out, SDFMT_BASE_RATE(pThis, 4), SDFMT_MULT(pThis, 4), SDFMT_DIV(pThis, 4)) )
-
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+typedef struct HDACALLBACKCTX
+{
+    PHDASTATE  pThis;
+    PHDADRIVER pDriver;
+} HDACALLBACKCTX, *PHDACALLBACKCTX;
+#endif
 
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
@@ -694,12 +776,18 @@ typedef HDASTATE *PHDASTATE;
 #ifndef VBOX_DEVICE_STRUCT_TESTCASE
 static FNPDMDEVRESET hdaReset;
 
+/*
+ * Stubs.
+ */
 static int hdaRegReadUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
 static int hdaRegWriteUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
+
+/*
+ * Global register set read/write functions.
+ */
 static int hdaRegWriteGCTL(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
-static int hdaRegReadSTATESTS(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteSTATESTS(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
 static int hdaRegReadINTSTS(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegReadLPIB(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
 static int hdaRegReadWALCLK(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
 static int hdaRegWriteINTSTS(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
 static int hdaRegWriteCORBWP(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
@@ -708,10 +796,16 @@ static int hdaRegWriteCORBCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 static int hdaRegWriteCORBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 static int hdaRegWriteRIRBWP(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
 static int hdaRegWriteRIRBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSTATESTS(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
 static int hdaRegWriteIRS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 static int hdaRegReadIRS(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteBase(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 
+/*
+ * {IOB}SDn read/write functions.
+ */
+static int hdaRegWriteSDCBL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 static int hdaRegWriteSDLVI(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 static int hdaRegWriteSDFIFOW(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
@@ -719,7 +813,10 @@ static int hdaRegWriteSDFIFOS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 static int hdaRegWriteSDBDPL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 static int hdaRegWriteSDBDPU(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteBase(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+
+/*
+ * Generic register read/write functions.
+ */
 static int hdaRegReadU32(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
 static int hdaRegWriteU32(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
 static int hdaRegReadU24(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
@@ -729,16 +826,22 @@ static int hdaRegWriteU16(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
 static int hdaRegReadU8(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
 static int hdaRegWriteU8(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
 
-static DECLCALLBACK(void) hdaTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser);
-static int hdaTransfer(PHDASTATE pThis, ENMSOUNDSOURCE enmSrc, uint32_t cbAvail);
-
 #ifdef IN_RING3
-DECLINLINE(void) hdaInitTransferDescriptor(PHDASTATE pThis, PHDABDLEDESC pBdle, uint8_t u8Strm,
-                                           PHDASTREAMTRANSFERDESC pStreamDesc);
-static void hdaFetchBdle(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc);
-#ifdef LOG_ENABLED
-static void dump_bd(PHDASTATE pThis, PHDABDLEDESC pBdle, uint64_t u64BaseDMA);
+static int hdaStreamInit(PHDASTATE pThis, PHDASTREAM pStrmSt, uint8_t u8Strm);
+static void hdaStreamDestroy(PHDASTREAM pStrmSt);
+static int hdaStreamStart(PHDASTREAM pStrmSt);
+static int hdaStreamStop(PHDASTREAM pStrmSt);
+static int hdaStreamWaitForStateChange(PHDASTREAM pStrmSt, RTMSINTERVAL msTimeout);
+static int hdaTransfer(PHDASTATE pThis, ENMSOUNDSOURCE enmSrc, uint32_t cbToProcess, uint32_t *pcbProcessed);
 #endif
+
+#ifdef IN_RING3
+static int hdaBDLEFetch(PHDASTATE pThis, PHDABDLE pBDLE, uint64_t u64BaseDMA, uint16_t u16Entry);
+static void hdaStreamUpdateLPIB(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32_t u32LPIB);
+# ifdef LOG_ENABLED
+static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t u16LVI);
+# endif
+static void hdaBDLEReset(PHDABDLE pBDLE);
 #endif
 
 
@@ -746,7 +849,49 @@ static void dump_bd(PHDASTATE pThis, PHDABDLEDESC pBdle, uint64_t u64BaseDMA);
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
 
-/* see 302349 p 6.2*/
+/** Offset of the SD0 register map. */
+#define HDA_REG_DESC_SD0_BASE 0x80
+
+/** Turn a short global register name into an memory index and a stringized name. */
+#define HDA_REG_IDX(abbrev)         HDA_MEM_IND_NAME(abbrev), #abbrev
+
+/** Turns a short stream register name into an memory index and a stringized name. */
+#define HDA_REG_IDX_STRM(reg, suff) HDA_MEM_IND_NAME(reg ## suff), #reg #suff
+
+/** Same as above for a register *not* stored in memory. */
+#define HDA_REG_IDX_LOCAL(abbrev)   0, #abbrev
+
+/** Emits a single audio stream register set (e.g. OSD0) at a specified offset. */
+#define HDA_REG_MAP_STRM(offset, name) \
+    /* offset        size     read mask   write mask  read callback   write callback     index + abbrev                  description */ \
+    /* -------       -------  ----------  ----------  --------------  -----------------  ------------------------------  ----------- */ \
+    /* Offset 0x80 (SD0) */ \
+    { offset,        0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24 , hdaRegWriteSDCTL , HDA_REG_IDX_STRM(name, CTL)  , #name " Stream Descriptor Control" }, \
+    /* Offset 0x83 (SD0) */ \
+    { offset + 0x3,  0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8  , hdaRegWriteSDSTS , HDA_REG_IDX_STRM(name, STS)  , #name " Status" }, \
+    /* Offset 0x84 (SD0) */ \
+    { offset + 0x4,  0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadLPIB, hdaRegWriteU32   , HDA_REG_IDX_STRM(name, LPIB) , #name " Link Position In Buffer" }, \
+    /* Offset 0x88 (SD0) */ \
+    { offset + 0x8,  0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32, hdaRegWriteU32    , HDA_REG_IDX_STRM(name, CBL)  , #name " Cyclic Buffer Length" }, \
+    /* Offset 0x8C (SD0) */ \
+    { offset + 0xC,  0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16, hdaRegWriteSDLVI  , HDA_REG_IDX_STRM(name, LVI)  , #name " Last Valid Index" }, \
+    /* Reserved: FIFO Watermark. ** @todo Document this! */ \
+    { offset + 0xE,  0x00002, 0x00000007, 0x00000007, hdaRegReadU16, hdaRegWriteSDFIFOW, HDA_REG_IDX_STRM(name, FIFOW), #name " FIFO Watermark" }, \
+    /* Offset 0x90 (SD0) */ \
+    { offset + 0x10, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16, hdaRegWriteSDFIFOS, HDA_REG_IDX_STRM(name, FIFOS), #name " FIFO Size" }, \
+    /* Offset 0x92 (SD0) */ \
+    { offset + 0x12, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16, hdaRegWriteSDFMT  , HDA_REG_IDX_STRM(name, FMT)  , #name " Format" }, \
+    /* Reserved: 0x94 - 0x98. */ \
+    /* Offset 0x98 (SD0) */ \
+    { offset + 0x18, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32, hdaRegWriteSDBDPL , HDA_REG_IDX_STRM(name, BDPL) , #name " Buffer Descriptor List Pointer-Lower Base Address" }, \
+    /* Offset 0x9C (SD0) */ \
+    { offset + 0x1C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32, hdaRegWriteSDBDPU , HDA_REG_IDX_STRM(name, BDPU) , #name " Buffer Descriptor List Pointer-Upper Base Address" }
+
+/** Defines a single audio stream register set (e.g. OSD0). */
+#define HDA_REG_MAP_DEF_STREAM(index, name) \
+    HDA_REG_MAP_STRM(HDA_REG_DESC_SD0_BASE + (index * 32 /* 0x20 */), name)
+
+/* See 302349 p 6.2. */
 static const struct HDAREGDESC
 {
     /** Register offset in the register space. */
@@ -765,143 +910,57 @@ static const struct HDAREGDESC
     uint32_t    mem_idx;
     /** Abbreviated name. */
     const char *abbrev;
+    /** Descripton. */
+    const char *desc;
 } g_aHdaRegMap[HDA_NREGS] =
 
-/* Turn a short register name into an memory index and a stringized name. */
-#define RA(abbrev)  HDA_MEM_IND_NAME(abbrev), #abbrev
-/* Same as above for an input stream ('I' prefixed). */
-#define IA(abbrev)  HDA_MEM_IND_NAME(abbrev), "I"#abbrev
-/* Same as above for an output stream ('O' prefixed). */
-#define OA(abbrev)  HDA_MEM_IND_NAME(abbrev), "O"#abbrev
-/* Same as above for a register *not* stored in memory. */
-#define UA(abbrev)  0, #abbrev
-
-{
-    /* offset  size     read mask   write mask         read callback         write callback         abbrev     */
-    /*-------  -------  ----------  ----------  -----------------------  ------------------------ ----------   */
-    { 0x00000, 0x00002, 0x0000FFFB, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , RA(GCAP)      }, /* Global Capabilities */
-    { 0x00002, 0x00001, 0x000000FF, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , RA(VMIN)      }, /* Minor Version */
-    { 0x00003, 0x00001, 0x000000FF, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , RA(VMAJ)      }, /* Major Version */
-    { 0x00004, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , RA(OUTPAY)    }, /* Output Payload Capabilities */
-    { 0x00006, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , RA(INPAY)     }, /* Input Payload Capabilities */
-    { 0x00008, 0x00004, 0x00000103, 0x00000103, hdaRegReadU32          , hdaRegWriteGCTL       , RA(GCTL)      }, /* Global Control */
-    { 0x0000c, 0x00002, 0x00007FFF, 0x00007FFF, hdaRegReadU16          , hdaRegWriteU16        , RA(WAKEEN)    }, /* Wake Enable */
-    { 0x0000e, 0x00002, 0x00000007, 0x00000007, hdaRegReadU8           , hdaRegWriteSTATESTS   , RA(STATESTS)  }, /* State Change Status */
-    { 0x00010, 0x00002, 0xFFFFFFFF, 0x00000000, hdaRegReadUnimpl       , hdaRegWriteUnimpl     , RA(GSTS)      }, /* Global Status */
-    { 0x00018, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , RA(OUTSTRMPAY)}, /* Output Stream Payload Capability */
-    { 0x0001A, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , RA(INSTRMPAY) }, /* Input Stream Payload Capability */
-    { 0x00020, 0x00004, 0xC00000FF, 0xC00000FF, hdaRegReadU32          , hdaRegWriteU32        , RA(INTCTL)    }, /* Interrupt Control */
-    { 0x00024, 0x00004, 0xC00000FF, 0x00000000, hdaRegReadINTSTS       , hdaRegWriteUnimpl     , RA(INTSTS)    }, /* Interrupt Status */
-    { 0x00030, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadWALCLK       , hdaRegWriteUnimpl     , UA(WALCLK)    }, /* Wall Clock Counter */
-    /// @todo r=michaln: Doesn't the SSYNC register need to actually stop the stream(s)?
-    { 0x00034, 0x00004, 0x000000FF, 0x000000FF, hdaRegReadU32          , hdaRegWriteU32        , RA(SSYNC)     }, /* Stream Synchronization */
-    { 0x00040, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteBase       , RA(CORBLBASE) }, /* CORB Lower Base Address */
-    { 0x00044, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteBase       , RA(CORBUBASE) }, /* CORB Upper Base Address */
-    { 0x00048, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteCORBWP     , RA(CORBWP)    }, /* CORB Write Pointer */
-    { 0x0004A, 0x00002, 0x000080FF, 0x000080FF, hdaRegReadU16          , hdaRegWriteCORBRP     , RA(CORBRP)    }, /* CORB Read Pointer */
-    { 0x0004C, 0x00001, 0x00000003, 0x00000003, hdaRegReadU8           , hdaRegWriteCORBCTL    , RA(CORBCTL)   }, /* CORB Control */
-    { 0x0004D, 0x00001, 0x00000001, 0x00000001, hdaRegReadU8           , hdaRegWriteCORBSTS    , RA(CORBSTS)   }, /* CORB Status */
-    { 0x0004E, 0x00001, 0x000000F3, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , RA(CORBSIZE)  }, /* CORB Size */
-    { 0x00050, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteBase       , RA(RIRBLBASE) }, /* RIRB Lower Base Address */
-    { 0x00054, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteBase       , RA(RIRBUBASE) }, /* RIRB Upper Base Address */
-    { 0x00058, 0x00002, 0x000000FF, 0x00008000, hdaRegReadU8           , hdaRegWriteRIRBWP     , RA(RIRBWP)    }, /* RIRB Write Pointer */
-    { 0x0005A, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteU16        , RA(RINTCNT)   }, /* Response Interrupt Count */
-    { 0x0005C, 0x00001, 0x00000007, 0x00000007, hdaRegReadU8           , hdaRegWriteU8         , RA(RIRBCTL)   }, /* RIRB Control */
-    { 0x0005D, 0x00001, 0x00000005, 0x00000005, hdaRegReadU8           , hdaRegWriteRIRBSTS    , RA(RIRBSTS)   }, /* RIRB Status */
-    { 0x0005E, 0x00001, 0x000000F3, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , RA(RIRBSIZE)  }, /* RIRB Size */
-    { 0x00060, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , RA(IC)        }, /* Immediate Command */
-    { 0x00064, 0x00004, 0x00000000, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteUnimpl     , RA(IR)        }, /* Immediate Response */
-    { 0x00068, 0x00002, 0x00000002, 0x00000002, hdaRegReadIRS          , hdaRegWriteIRS        , RA(IRS)       }, /* Immediate Command Status */
-    { 0x00070, 0x00004, 0xFFFFFFFF, 0xFFFFFF81, hdaRegReadU32          , hdaRegWriteBase       , RA(DPLBASE)   }, /* MA Position Lower Base */
-    { 0x00074, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteBase       , RA(DPUBASE)   }, /* DMA Position Upper Base */
-
-    { 0x00080, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , IA(SD0CTL)    }, /* Input Stream Descriptor 0 (ICD0) Control */
-    { 0x00083, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , IA(SD0STS)    }, /* ISD0 Status */
-    { 0x00084, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , IA(SD0LPIB)   }, /* ISD0 Link Position In Buffer */
-    { 0x00088, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , IA(SD0CBL)    }, /* ISD0 Cyclic Buffer Length */
-    { 0x0008C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , IA(SD0LVI)    }, /* ISD0 Last Valid Index */
-    { 0x0008E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , IA(SD0FIFOW)  }, /* ISD0 FIFO Watermark */
-    { 0x00090, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16          , hdaRegWriteU16        , IA(SD0FIFOS)  }, /* ISD0 FIFO Size */
-    { 0x00092, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , IA(SD0FMT)    }, /* ISD0 Format */
-    { 0x00098, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , IA(SD0BDPL)   }, /* ISD0 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x0009C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , IA(SD0BDPU)   }, /* ISD0 Buffer Descriptor List Pointer-Upper Base Address */
-
-    { 0x000A0, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , IA(SD1CTL)    }, /* Input Stream Descriptor 1 (ISD1) Control */
-    { 0x000A3, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , IA(SD1STS)    }, /* ISD1 Status */
-    { 0x000A4, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , IA(SD1LPIB)   }, /* ISD1 Link Position In Buffer */
-    { 0x000A8, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , IA(SD1CBL)    }, /* ISD1 Cyclic Buffer Length */
-    { 0x000AC, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , IA(SD1LVI)    }, /* ISD1 Last Valid Index */
-    { 0x000AE, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , IA(SD1FIFOW)  }, /* ISD1 FIFO Watermark */
-    { 0x000B0, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16          , hdaRegWriteU16        , IA(SD1FIFOS)  }, /* ISD1 FIFO Size */
-    { 0x000B2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , IA(SD1FMT)    }, /* ISD1 Format */
-    { 0x000B8, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , IA(SD1BDPL)   }, /* ISD1 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x000BC, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , IA(SD1BDPU)   }, /* ISD1 Buffer Descriptor List Pointer-Upper Base Address */
-
-    { 0x000C0, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , IA(SD2CTL)    }, /* Input Stream Descriptor 2 (ISD2) Control */
-    { 0x000C3, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , IA(SD2STS)    }, /* ISD2 Status */
-    { 0x000C4, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , IA(SD2LPIB)   }, /* ISD2 Link Position In Buffer */
-    { 0x000C8, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , IA(SD2CBL)    }, /* ISD2 Cyclic Buffer Length */
-    { 0x000CC, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , IA(SD2LVI)    }, /* ISD2 Last Valid Index */
-    { 0x000CE, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , IA(SD2FIFOW)  }, /* ISD2 FIFO Watermark */
-    { 0x000D0, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16          , hdaRegWriteU16        , IA(SD2FIFOS)  }, /* ISD2 FIFO Size */
-    { 0x000D2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , IA(SD2FMT)    }, /* ISD2 Format */
-    { 0x000D8, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , IA(SD2BDPL)   }, /* ISD2 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x000DC, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , IA(SD2BDPU)   }, /* ISD2 Buffer Descriptor List Pointer-Upper Base Address */
-
-    { 0x000E0, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , IA(SD3CTL)    }, /* Input Stream Descriptor 3 (ISD3) Control */
-    { 0x000E3, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , IA(SD3STS)    }, /* ISD3 Status */
-    { 0x000E4, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , IA(SD3LPIB)   }, /* ISD3 Link Position In Buffer */
-    { 0x000E8, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , IA(SD3CBL)    }, /* ISD3 Cyclic Buffer Length */
-    { 0x000EC, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , IA(SD3LVI)    }, /* ISD3 Last Valid Index */
-    { 0x000EE, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , IA(SD3FIFOW)  }, /* ISD3 FIFO Watermark */
-    { 0x000F0, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16          , hdaRegWriteU16        , IA(SD3FIFOS)  }, /* ISD3 FIFO Size */
-    { 0x000F2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , IA(SD3FMT)    }, /* ISD3 Format */
-    { 0x000F8, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , IA(SD3BDPL)   }, /* ISD3 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x000FC, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , IA(SD3BDPU)   }, /* ISD3 Buffer Descriptor List Pointer-Upper Base Address */
-
-    { 0x00100, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , OA(SD4CTL)    }, /* Output Stream Descriptor 4 (OSD4) Control */
-    { 0x00103, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , OA(SD4STS)    }, /* OSD4 Status */
-    { 0x00104, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , OA(SD4LPIB)   }, /* OSD4 Link Position In Buffer */
-    { 0x00108, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , OA(SD4CBL)    }, /* OSD4 Cyclic Buffer Length */
-    { 0x0010C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , OA(SD4LVI)    }, /* OSD4 Last Valid Index */
-    { 0x0010E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , OA(SD4FIFOW)  }, /* OSD4 FIFO Watermark */
-    { 0x00110, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteSDFIFOS    , OA(SD4FIFOS)  }, /* OSD4 FIFO Size */
-    { 0x00112, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , OA(SD4FMT)    }, /* OSD4 Format */
-    { 0x00118, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , OA(SD4BDPL)   }, /* OSD4 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x0011C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , OA(SD4BDPU)   }, /* OSD4 Buffer Descriptor List Pointer-Upper Base Address */
-
-    { 0x00120, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , OA(SD5CTL)    }, /* Output Stream Descriptor 5 (OSD5) Control */
-    { 0x00123, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , OA(SD5STS)    }, /* OSD5 Status */
-    { 0x00124, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , OA(SD5LPIB)   }, /* OSD5 Link Position In Buffer */
-    { 0x00128, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , OA(SD5CBL)    }, /* OSD5 Cyclic Buffer Length */
-    { 0x0012C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , OA(SD5LVI)    }, /* OSD5 Last Valid Index */
-    { 0x0012E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , OA(SD5FIFOW)  }, /* OSD5 FIFO Watermark */
-    { 0x00130, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteSDFIFOS    , OA(SD5FIFOS)  }, /* OSD5 FIFO Size */
-    { 0x00132, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , OA(SD5FMT)    }, /* OSD5 Format */
-    { 0x00138, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , OA(SD5BDPL)   }, /* OSD5 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x0013C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , OA(SD5BDPU)   }, /* OSD5 Buffer Descriptor List Pointer-Upper Base Address */
-
-    { 0x00140, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , OA(SD6CTL)    }, /* Output Stream Descriptor 6 (OSD6) Control */
-    { 0x00143, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , OA(SD6STS)    }, /* OSD6 Status */
-    { 0x00144, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , OA(SD6LPIB)   }, /* OSD6 Link Position In Buffer */
-    { 0x00148, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , OA(SD6CBL)    }, /* OSD6 Cyclic Buffer Length */
-    { 0x0014C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , OA(SD6LVI)    }, /* OSD6 Last Valid Index */
-    { 0x0014E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , OA(SD6FIFOW)  }, /* OSD6 FIFO Watermark */
-    { 0x00150, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteSDFIFOS    , OA(SD6FIFOS)  }, /* OSD6 FIFO Size */
-    { 0x00152, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , OA(SD6FMT)    }, /* OSD6 Format */
-    { 0x00158, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , OA(SD6BDPL)   }, /* OSD6 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x0015C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , OA(SD6BDPU)   }, /* OSD6 Buffer Descriptor List Pointer-Upper Base Address */
-
-    { 0x00160, 0x00003, 0x00FF001F, 0x00F0001F, hdaRegReadU24          , hdaRegWriteSDCTL      , OA(SD7CTL)    }, /* Output Stream Descriptor 7 (OSD7) Control */
-    { 0x00163, 0x00001, 0x0000001C, 0x0000003C, hdaRegReadU8           , hdaRegWriteSDSTS      , OA(SD7STS)    }, /* OSD7 Status */
-    { 0x00164, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadU32          , hdaRegWriteU32        , OA(SD7LPIB)   }, /* OSD7 Link Position In Buffer */
-    { 0x00168, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , OA(SD7CBL)    }, /* OSD7 Cyclic Buffer Length */
-    { 0x0016C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16          , hdaRegWriteSDLVI      , OA(SD7LVI)    }, /* OSD7 Last Valid Index */
-    { 0x0016E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16          , hdaRegWriteSDFIFOW    , OA(SD7FIFOW)  }, /* OSD7 FIFO Watermark */
-    { 0x00170, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteSDFIFOS    , OA(SD7FIFOS)  }, /* OSD7 FIFO Size */
-    { 0x00172, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16          , hdaRegWriteSDFMT      , OA(SD7FMT)    }, /* OSD7 Format */
-    { 0x00178, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteSDBDPL     , OA(SD7BDPL)   }, /* OSD7 Buffer Descriptor List Pointer-Lower Base Address */
-    { 0x0017C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteSDBDPU     , OA(SD7BDPU)   }, /* OSD7 Buffer Descriptor List Pointer-Upper Base Address */
+{
+    /* offset  size     read mask   write mask  read callback            write callback         index + abbrev   */
+    /*-------  -------  ----------  ----------  -----------------------  ---------------------- ---------------- */
+    { 0x00000, 0x00002, 0x0000FFFB, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , HDA_REG_IDX(GCAP)         }, /* Global Capabilities */
+    { 0x00002, 0x00001, 0x000000FF, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , HDA_REG_IDX(VMIN)         }, /* Minor Version */
+    { 0x00003, 0x00001, 0x000000FF, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , HDA_REG_IDX(VMAJ)         }, /* Major Version */
+    { 0x00004, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , HDA_REG_IDX(OUTPAY)       }, /* Output Payload Capabilities */
+    { 0x00006, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , HDA_REG_IDX(INPAY)        }, /* Input Payload Capabilities */
+    { 0x00008, 0x00004, 0x00000103, 0x00000103, hdaRegReadU32          , hdaRegWriteGCTL       , HDA_REG_IDX(GCTL)         }, /* Global Control */
+    { 0x0000c, 0x00002, 0x00007FFF, 0x00007FFF, hdaRegReadU16          , hdaRegWriteU16        , HDA_REG_IDX(WAKEEN)       }, /* Wake Enable */
+    { 0x0000e, 0x00002, 0x00000007, 0x00000007, hdaRegReadU8           , hdaRegWriteSTATESTS   , HDA_REG_IDX(STATESTS)     }, /* State Change Status */
+    { 0x00010, 0x00002, 0xFFFFFFFF, 0x00000000, hdaRegReadUnimpl       , hdaRegWriteUnimpl     , HDA_REG_IDX(GSTS)         }, /* Global Status */
+    { 0x00018, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , HDA_REG_IDX(OUTSTRMPAY)   }, /* Output Stream Payload Capability */
+    { 0x0001A, 0x00002, 0x0000FFFF, 0x00000000, hdaRegReadU16          , hdaRegWriteUnimpl     , HDA_REG_IDX(INSTRMPAY)    }, /* Input Stream Payload Capability */
+    { 0x00020, 0x00004, 0xC00000FF, 0xC00000FF, hdaRegReadU32          , hdaRegWriteU32        , HDA_REG_IDX(INTCTL)       }, /* Interrupt Control */
+    { 0x00024, 0x00004, 0xC00000FF, 0x00000000, hdaRegReadINTSTS       , hdaRegWriteUnimpl     , HDA_REG_IDX(INTSTS)       }, /* Interrupt Status */
+    { 0x00030, 0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadWALCLK       , hdaRegWriteUnimpl     , HDA_REG_IDX_LOCAL(WALCLK) }, /* Wall Clock Counter */
+    { 0x00034, 0x00004, 0x000000FF, 0x000000FF, hdaRegReadU32          , hdaRegWriteU32        , HDA_REG_IDX(SSYNC)        }, /* Stream Synchronization */
+    { 0x00040, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteBase       , HDA_REG_IDX(CORBLBASE)    }, /* CORB Lower Base Address */
+    { 0x00044, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteBase       , HDA_REG_IDX(CORBUBASE)    }, /* CORB Upper Base Address */
+    { 0x00048, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteCORBWP     , HDA_REG_IDX(CORBWP)       }, /* CORB Write Pointer */
+    { 0x0004A, 0x00002, 0x000080FF, 0x000080FF, hdaRegReadU16          , hdaRegWriteCORBRP     , HDA_REG_IDX(CORBRP)       }, /* CORB Read Pointer */
+    { 0x0004C, 0x00001, 0x00000003, 0x00000003, hdaRegReadU8           , hdaRegWriteCORBCTL    , HDA_REG_IDX(CORBCTL)      }, /* CORB Control */
+    { 0x0004D, 0x00001, 0x00000001, 0x00000001, hdaRegReadU8           , hdaRegWriteCORBSTS    , HDA_REG_IDX(CORBSTS)      }, /* CORB Status */
+    { 0x0004E, 0x00001, 0x000000F3, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , HDA_REG_IDX(CORBSIZE)     }, /* CORB Size */
+    { 0x00050, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32          , hdaRegWriteBase       , HDA_REG_IDX(RIRBLBASE)    }, /* RIRB Lower Base Address */
+    { 0x00054, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteBase       , HDA_REG_IDX(RIRBUBASE)    }, /* RIRB Upper Base Address */
+    { 0x00058, 0x00002, 0x000000FF, 0x00008000, hdaRegReadU8           , hdaRegWriteRIRBWP     , HDA_REG_IDX(RIRBWP)       }, /* RIRB Write Pointer */
+    { 0x0005A, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16          , hdaRegWriteU16        , HDA_REG_IDX(RINTCNT)      }, /* Response Interrupt Count */
+    { 0x0005C, 0x00001, 0x00000007, 0x00000007, hdaRegReadU8           , hdaRegWriteU8         , HDA_REG_IDX(RIRBCTL)      }, /* RIRB Control */
+    { 0x0005D, 0x00001, 0x00000005, 0x00000005, hdaRegReadU8           , hdaRegWriteRIRBSTS    , HDA_REG_IDX(RIRBSTS)      }, /* RIRB Status */
+    { 0x0005E, 0x00001, 0x000000F3, 0x00000000, hdaRegReadU8           , hdaRegWriteUnimpl     , HDA_REG_IDX(RIRBSIZE)     }, /* RIRB Size */
+    { 0x00060, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteU32        , HDA_REG_IDX(IC)           }, /* Immediate Command */
+    { 0x00064, 0x00004, 0x00000000, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteUnimpl     , HDA_REG_IDX(IR)           }, /* Immediate Response */
+    { 0x00068, 0x00002, 0x00000002, 0x00000002, hdaRegReadIRS          , hdaRegWriteIRS        , HDA_REG_IDX(IRS)          }, /* Immediate Command Status */
+    { 0x00070, 0x00004, 0xFFFFFFFF, 0xFFFFFF81, hdaRegReadU32          , hdaRegWriteBase       , HDA_REG_IDX(DPLBASE)      }, /* DMA Position Lower Base */
+    { 0x00074, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32          , hdaRegWriteBase       , HDA_REG_IDX(DPUBASE)      }, /* DMA Position Upper Base */
+    /* 4 Input Stream Descriptors (ISD). */
+    HDA_REG_MAP_DEF_STREAM(0, SD0),
+    HDA_REG_MAP_DEF_STREAM(1, SD1),
+    HDA_REG_MAP_DEF_STREAM(2, SD2),
+    HDA_REG_MAP_DEF_STREAM(3, SD3),
+    /* 4 Output Stream Descriptors (OSD). */
+    HDA_REG_MAP_DEF_STREAM(4, SD4),
+    HDA_REG_MAP_DEF_STREAM(5, SD5),
+    HDA_REG_MAP_DEF_STREAM(6, SD6),
+    HDA_REG_MAP_DEF_STREAM(7, SD7)
 };
 
 /**
@@ -927,32 +986,22 @@ static const struct
 };
 
 #ifdef IN_RING3
-/** HDABDLEDESC field descriptors the v3+ saved state. */
-static SSMFIELD const g_aHdaBDLEDescFields[] =
-{
-    SSMFIELD_ENTRY(     HDABDLEDESC, u64BdleCviAddr),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleMaxCvi),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleCvi),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleCviLen),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleCviPos),
-    SSMFIELD_ENTRY(     HDABDLEDESC, fBdleCviIoc),
-    SSMFIELD_ENTRY(     HDABDLEDESC, cbUnderFifoW),
-    SSMFIELD_ENTRY(     HDABDLEDESC, au8HdaBuffer),
+/** HDABDLESTATE field descriptors for the v5+ saved state. */
+static SSMFIELD const g_aSSMBDLEStateFields5[] =
+{
+    SSMFIELD_ENTRY(HDABDLESTATE, u32BDLIndex),
+    SSMFIELD_ENTRY(HDABDLESTATE, cbBelowFIFOW),
+    SSMFIELD_ENTRY(HDABDLESTATE, au8FIFO),
+    SSMFIELD_ENTRY(HDABDLESTATE, u32BufOff),
     SSMFIELD_ENTRY_TERM()
 };
 
-/** HDABDLEDESC field descriptors the v1 and v2 saved state. */
-static SSMFIELD const g_aHdaBDLEDescFieldsOld[] =
-{
-    SSMFIELD_ENTRY(     HDABDLEDESC, u64BdleCviAddr),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleMaxCvi),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleCvi),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleCviLen),
-    SSMFIELD_ENTRY(     HDABDLEDESC, u32BdleCviPos),
-    SSMFIELD_ENTRY(     HDABDLEDESC, fBdleCviIoc),
-    SSMFIELD_ENTRY_PAD_HC_AUTO(3, 3),
-    SSMFIELD_ENTRY(     HDABDLEDESC, cbUnderFifoW),
-    SSMFIELD_ENTRY(     HDABDLEDESC, au8HdaBuffer),
+/** HDASTREAMSTATE field descriptors for the v5+ saved state. */
+static SSMFIELD const g_aSSMStreamStateFields5[] =
+{
+    SSMFIELD_ENTRY       (HDASTREAMSTATE, cBDLE),
+    SSMFIELD_ENTRY       (HDASTREAMSTATE, uCurBDLE),
+    SSMFIELD_ENTRY_IGNORE(HDASTREAMSTATE, paBDLE),
     SSMFIELD_ENTRY_TERM()
 };
 #endif
@@ -960,34 +1009,171 @@ static SSMFIELD const g_aHdaBDLEDescFieldsOld[] =
 /**
  * 32-bit size indexed masks, i.e. g_afMasks[2 bytes] = 0xffff.
  */
-static uint32_t const   g_afMasks[5] =
+static uint32_t const g_afMasks[5] =
 {
     UINT32_C(0), UINT32_C(0x000000ff), UINT32_C(0x0000ffff), UINT32_C(0x00ffffff), UINT32_C(0xffffffff)
 };
 
 #ifdef IN_RING3
-DECLINLINE(void) hdaUpdatePosBuf(PHDASTATE pThis, PHDASTREAMTRANSFERDESC pStreamDesc)
+DECLINLINE(void) hdaStreamUpdateLPIB(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32_t u32LPIB)
 {
-    if (pThis->u64DPBase & DPBASE_ENABLED)
-        PDMDevHlpPCIPhysWrite(pThis->CTX_SUFF(pDevIns),
-                              (pThis->u64DPBase & DPBASE_ADDR_MASK) + pStreamDesc->u8Strm * 8,
-                              pStreamDesc->pu32Lpib, sizeof(uint32_t));
+    AssertPtrReturnVoid(pThis);
+    AssertPtrReturnVoid(pStrmSt);
+
+    Assert(u32LPIB <= pStrmSt->u32CBL);
+
+    LogFlowFunc(("uStrm=%RU8, LPIB=%RU32 (DMA Position Buffer Enabled: %RTbool)\n",
+                 pStrmSt->u8Strm, u32LPIB, pThis->fDMAPosition));
+
+    /* Update LPIB in any case. */
+    HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm) = u32LPIB;
+
+    /* Do we need to tell the current DMA position? */
+    if (pThis->fDMAPosition)
+    {
+        int rc2 = PDMDevHlpPCIPhysWrite(pThis->CTX_SUFF(pDevIns),
+                                        (pThis->u64DPBase & DPBASE_ADDR_MASK) + (pStrmSt->u8Strm * 8),
+                                        (void *)&u32LPIB, sizeof(uint32_t));
+        AssertRC(rc2);
+    }
 }
 #endif
 
-DECLINLINE(uint32_t) hdaFifoWToSz(PHDASTATE pThis, PHDASTREAMTRANSFERDESC pStreamDesc)
+/**
+ * Retrieves the number of bytes of a FIFOS register.
+ *
+ * @return Number of bytes of a given FIFOS register.
+ */
+DECLINLINE(uint16_t) hdaSDFIFOSToBytes(uint32_t u32RegFIFOS)
 {
-#if 0
-    switch(HDA_STREAM_REG(pThis, FIFOW, pStreamDesc->u8Strm))
+    uint16_t cb;
+    switch (u32RegFIFOS)
     {
-        case HDA_SDFIFOW_8B: return 8;
-        case HDA_SDFIFOW_16B: return 16;
-        case HDA_SDFIFOW_32B: return 32;
+        /* Input */
+        case HDA_SDINFIFO_120B: cb = 120; break;
+        case HDA_SDINFIFO_160B: cb = 160; break;
+
+        /* Output */
+        case HDA_SDONFIFO_16B:  cb = 16;  break;
+        case HDA_SDONFIFO_32B:  cb = 32;  break;
+        case HDA_SDONFIFO_64B:  cb = 64;  break;
+        case HDA_SDONFIFO_128B: cb = 128; break;
+        case HDA_SDONFIFO_192B: cb = 192; break;
+        case HDA_SDONFIFO_256B: cb = 256; break;
         default:
-            AssertMsgFailed(("unsupported value (%x) in SDFIFOW(,%d)\n", HDA_REG_IND(pThis, pStreamDesc->u8Strm), pStreamDesc->u8Strm));
+        {
+            cb = 0; /* Can happen on stream reset. */
+            break;
+        }
+    }
+
+    return cb;
+}
+
+/**
+ * Retrieves the number of bytes of a FIFOW register.
+ *
+ * @return Number of bytes of a given FIFOW register.
+ */
+DECLINLINE(uint8_t) hdaSDFIFOWToBytes(uint32_t u32RegFIFOW)
+{
+    uint32_t cb;
+    switch (u32RegFIFOW)
+    {
+        case HDA_SDFIFOW_8B:  cb = 8;  break;
+        case HDA_SDFIFOW_16B: cb = 16; break;
+        case HDA_SDFIFOW_32B: cb = 32; break;
+        default:              cb = 0;  break;
+    }
+
+#ifdef RT_STRICT
+    Assert(RT_IS_POWER_OF_TWO(cb));
+#endif
+    return cb;
+}
+
+#ifdef IN_RING3
+/**
+ * Returns the current BDLE to use for a stream.
+ *
+ * @return BDLE to use, NULL if none found.
+ */
+DECLINLINE(PHDABDLE) hdaStreamGetCurrentBDLE(PHDASTATE pThis, PHDASTREAM pStrmSt)
+{
+    AssertPtrReturn(pThis,   NULL);
+    AssertPtrReturn(pStrmSt, NULL);
+
+    Assert(pStrmSt->State.paBDLE);
+    Assert(pStrmSt->State.uCurBDLE < pStrmSt->State.cBDLE);
+
+    PHDABDLE pBDLE = &pStrmSt->State.paBDLE[pStrmSt->State.uCurBDLE];
+    return pBDLE;
+}
+
+/**
+ * Returns the next BDLE to use for a stream.
+ *
+ * @return BDLE to use next, NULL if none found.
+ */
+DECLINLINE(PHDABDLE) hdaStreamGetNextBDLE(PHDASTATE pThis, PHDASTREAM pStrmSt)
+{
+    AssertPtrReturn(pThis,   NULL);
+    AssertPtrReturn(pStrmSt, NULL);
+
+    NOREF(pThis);
+
+    Assert(pStrmSt->State.paBDLE);
+    Assert(pStrmSt->State.uCurBDLE < pStrmSt->State.cBDLE);
+
+#ifdef DEBUG
+    uint32_t uOldBDLE = pStrmSt->State.uCurBDLE;
+#endif
+
+    /*
+     * Switch to the next BDLE entry and do a wrap around
+     * if we reached the end of the Buffer Descriptor List (BDL).
+     */
+    pStrmSt->State.uCurBDLE++;
+    if (pStrmSt->State.uCurBDLE == pStrmSt->State.cBDLE)
+    {
+        pStrmSt->State.uCurBDLE = 0;
+
+        hdaStreamUpdateLPIB(pThis, pStrmSt, 0);
     }
+
+    Assert(pStrmSt->State.uCurBDLE < pStrmSt->State.cBDLE);
+
+    PHDABDLE pBDLE = &pStrmSt->State.paBDLE[pStrmSt->State.uCurBDLE];
+    AssertPtr(pBDLE);
+
+    hdaBDLEReset(pBDLE);
+
+#ifdef DEBUG
+    LogFlowFunc(("[SD%RU8]: uOldBDLE=%RU16, uCurBDLE=%RU16, cBDLE=%RU32, %R[bdle]\n",
+                 pStrmSt->u8Strm, uOldBDLE, pStrmSt->State.uCurBDLE, pStrmSt->State.cBDLE, pBDLE));
 #endif
+    return pBDLE;
+}
+#endif
+
+/**
+ * Retrieves the minimum number of bytes accumulated/free in the
+ * FIFO before the controller will start a fetch/eviction of data.
+ *
+ * Uses SDFIFOW (FIFO Watermark Register).
+ *
+ * @return Number of bytes accumulated/free in the FIFO.
+ */
+DECLINLINE(uint8_t) hdaStreamGetFIFOW(PHDASTATE pThis, PHDASTREAM pStrmSt)
+{
+    AssertPtrReturn(pThis, 0);
+    AssertPtrReturn(pStrmSt, 0);
+
+#ifdef VBOX_HDA_WITH_FIFO
+    return hdaSDFIFOWToBytes(HDA_STREAM_REG(pThis, FIFOW, pStrmSt->u8Strm));
+#else
     return 0;
+#endif
 }
 
 static int hdaProcessInterrupt(PHDASTATE pThis)
@@ -995,22 +1181,34 @@ static int hdaProcessInterrupt(PHDASTATE pThis)
 #define IS_INTERRUPT_OCCURED_AND_ENABLED(pThis, num) \
         (   INTCTL_SX((pThis), num) \
          && (SDSTS(pThis, num) & HDA_REG_FIELD_FLAG_MASK(SDSTS, BCIS)))
+
     bool fIrq = false;
-    if (   HDA_REG_FLAG_VALUE(pThis, INTCTL, CIE)
+
+    if (/* Controller Interrupt Enable (CIE). */
+          HDA_REG_FLAG_VALUE(pThis, INTCTL, CIE)
        && (   HDA_REG_FLAG_VALUE(pThis, RIRBSTS, RINTFL)
            || HDA_REG_FLAG_VALUE(pThis, RIRBSTS, RIRBOIS)
            || (HDA_REG(pThis, STATESTS) & HDA_REG(pThis, WAKEEN))))
         fIrq = true;
 
+    /** @todo Don't hardcode stream numbers here. */
     if (   IS_INTERRUPT_OCCURED_AND_ENABLED(pThis, 0)
         || IS_INTERRUPT_OCCURED_AND_ENABLED(pThis, 4))
+    {
+#ifdef IN_RING3
+        LogFunc(("BCIS\n"));
+#endif
         fIrq = true;
+    }
 
     if (HDA_REG_FLAG_VALUE(pThis, INTCTL, GIE))
     {
-        LogFunc(("irq %s\n", fIrq ? "asserted" : "deasserted"));
+        LogFunc(("%s\n", fIrq ? "Asserted" : "Deasserted"));
         PDMDevHlpPCISetIrq(pThis->CTX_SUFF(pDevIns), 0 , fIrq);
     }
+
+#undef IS_INTERRUPT_OCCURED_AND_ENABLED
+
     return VINF_SUCCESS;
 }
 
@@ -1091,7 +1289,7 @@ static int hdaRegLookupWithin(PHDASTATE pThis, uint32_t offReg)
     }
 
     /*
-     * Binary search the
+     * Binary search the register map.
      */
     int idxEnd  = RT_ELEMENTS(g_aHdaRegMap);
     int idxLow  = 0;
@@ -1135,18 +1333,18 @@ static int hdaCmdSync(PHDASTATE pThis, bool fLocal)
         uint8_t i = 0;
         do
         {
-            LogFunc(("corb%02x: ", i));
+            LogFunc(("CORB%02x: ", i));
             uint8_t j = 0;
             do
             {
-                const char *prefix;
+                const char *pszPrefix;
                 if ((i + j) == HDA_REG(pThis, CORBRP));
-                    prefix = "[R]";
+                    pszPrefix = "[R]";
                 else if ((i + j) == HDA_REG(pThis, CORBWP));
-                    prefix = "[W]";
+                    pszPrefix = "[W]";
                 else
-                    prefix = "   "; /* three spaces */
-                LogFunc(("%s%08x", prefix, pThis->pu32CorbBuf[i + j]));
+                    pszPrefix = "   "; /* three spaces */
+                LogFunc(("%s%08x", pszPrefix, pThis->pu32CorbBuf[i + j]));
                 j++;
             } while (j < 8);
             LogFunc(("\n"));
@@ -1163,7 +1361,7 @@ static int hdaCmdSync(PHDASTATE pThis, bool fLocal)
 #ifdef DEBUG_CMD_BUFFER
         uint8_t i = 0;
         do {
-            LogFunc(("rirb%02x: ", i));
+            LogFunc(("RIRB%02x: ", i));
             uint8_t j = 0;
             do {
                 const char *prefix;
@@ -1183,22 +1381,19 @@ static int hdaCmdSync(PHDASTATE pThis, bool fLocal)
 
 static int hdaCORBCmdProcess(PHDASTATE pThis)
 {
-    int rc;
-    uint8_t corbRp;
-    uint8_t corbWp;
-    uint8_t rirbWp;
-
     PFNHDACODECVERBPROCESSOR pfn = (PFNHDACODECVERBPROCESSOR)NULL;
 
-    rc = hdaCmdSync(pThis, true);
+    int rc = hdaCmdSync(pThis, true);
     if (RT_FAILURE(rc))
         AssertRCReturn(rc, rc);
-    corbRp = HDA_REG(pThis, CORBRP);
-    corbWp = HDA_REG(pThis, CORBWP);
-    rirbWp = HDA_REG(pThis, RIRBWP);
+
+    uint8_t corbRp = HDA_REG(pThis, CORBRP);
+    uint8_t corbWp = HDA_REG(pThis, CORBWP);
+    uint8_t rirbWp = HDA_REG(pThis, RIRBWP);
+
     Assert((corbWp != corbRp));
-    LogFlowFunc(("CORB(RP:%x, WP:%x) RIRBWP:%x\n", HDA_REG(pThis, CORBRP),
-                 HDA_REG(pThis, CORBWP), HDA_REG(pThis, RIRBWP)));
+    LogFlowFunc(("CORB(RP:%x, WP:%x) RIRBWP:%x\n", HDA_REG(pThis, CORBRP), HDA_REG(pThis, CORBWP), HDA_REG(pThis, RIRBWP)));
+
     while (corbRp != corbWp)
     {
         uint32_t cmd;
@@ -1207,18 +1402,15 @@ static int hdaCORBCmdProcess(PHDASTATE pThis)
         corbRp++;
         cmd = pThis->pu32CorbBuf[corbRp];
 
-        rc = pThis->pCodec->pfnLookup(pThis->pCodec,
-                                      HDA_CODEC_CMD(cmd, 0 /* Codec index */),
-                                      &pfn);
+        rc = pThis->pCodec->pfnLookup(pThis->pCodec, HDA_CODEC_CMD(cmd, 0 /* Codec index */), &pfn);
         if (RT_SUCCESS(rc))
         {
-            rc = pfn(pThis->pCodec,
-                     HDA_CODEC_CMD(cmd, 0 /* LUN */), &resp);
+            AssertPtr(pfn);
+            rc = pfn(pThis->pCodec, HDA_CODEC_CMD(cmd, 0 /* LUN */), &resp);
         }
 
         if (RT_FAILURE(rc))
             AssertRCReturn(rc, rc);
-        Assert(pfn);
         (rirbWp)++;
 
         LogFunc(("verb:%08x->%016lx\n", cmd, resp));
@@ -1229,9 +1421,11 @@ static int hdaCORBCmdProcess(PHDASTATE pThis)
             HDA_REG(pThis, CORBRP) = corbRp;
             return rc;
         }
+
         pThis->pu64RirbBuf[rirbWp] = resp;
-        pThis->u8Counter++;
-        if (pThis->u8Counter == RINTCNT_N(pThis))
+
+        pThis->u8RespIntCnt++;
+        if (pThis->u8RespIntCnt == RINTCNT_N(pThis))
             break;
     }
     HDA_REG(pThis, CORBRP) = corbRp;
@@ -1242,141 +1436,350 @@ static int hdaCORBCmdProcess(PHDASTATE pThis)
     if (HDA_REG_FLAG_VALUE(pThis, RIRBCTL, RIC))
     {
         HDA_REG(pThis, RIRBSTS) |= HDA_REG_FIELD_FLAG_MASK(RIRBSTS,RINTFL);
-        pThis->u8Counter = 0;
+
+        pThis->u8RespIntCnt = 0;
         rc = hdaProcessInterrupt(pThis);
     }
     if (RT_FAILURE(rc))
         AssertRCReturn(rc, rc);
     return rc;
 }
-#endif
 
-static void hdaStreamReset(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc, uint8_t u8Strm)
+static int hdaStreamCreate(PHDASTREAM pStrmSt)
 {
-    LogFunc(("reset of stream (%d) started\n", u8Strm));
-    Assert((   pThis
-            && pBdle
-            && pStreamDesc
-            && u8Strm <= 7));
-    RT_BZERO(pBdle, sizeof(HDABDLEDESC));
-    *pStreamDesc->pu32Lpib = 0;
-    *pStreamDesc->pu32Sts = 0;
-    /* According to the ICH6 datasheet, 0x40000 is the default value for stream descriptor register 23:20
-     * bits are reserved for stream number 18.2.33, resets SDnCTL except SRCT bit */
-    HDA_STREAM_REG(pThis, CTL, u8Strm) = 0x40000 | (HDA_STREAM_REG(pThis, CTL, u8Strm) & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST));
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
 
-    /* ICH6 defines default values (0x77 for input and 0xBF for output descriptors) of FIFO size. 18.2.39 */
-    HDA_STREAM_REG(pThis, FIFOS, u8Strm) =  u8Strm < 4 ? HDA_SDINFIFO_120B : HDA_SDONFIFO_192B;
-    HDA_STREAM_REG(pThis, FIFOW, u8Strm) = u8Strm < 4 ? HDA_SDFIFOW_8B : HDA_SDFIFOW_32B;
-    HDA_STREAM_REG(pThis, CBL, u8Strm) = 0;
-    HDA_STREAM_REG(pThis, LVI, u8Strm) = 0;
-    HDA_STREAM_REG(pThis, FMT, u8Strm) = 0;
-    HDA_STREAM_REG(pThis, BDPU, u8Strm) = 0;
-    HDA_STREAM_REG(pThis, BDPL, u8Strm) = 0;
-    LogFunc(("reset of stream (%d) finished\n", u8Strm));
-}
+    int rc = RTSemEventCreate(&pStrmSt->State.hStateChangedEvent);
+    AssertRC(rc);
 
-/* Register access handlers. */
+    pStrmSt->State.fActive  = false;
+    pStrmSt->State.fInReset = false;
+    pStrmSt->State.fDoStop  = false;
 
-static int hdaRegReadUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    *pu32Value = 0;
-    return VINF_SUCCESS;
+    LogFlowFuncLeaveRC(rc);
+    return rc;
 }
 
-static int hdaRegWriteUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaStreamInit(PHDASTATE pThis, PHDASTREAM pStrmSt, uint8_t u8Strm)
 {
-    return VINF_SUCCESS;
-}
+    AssertPtrReturn(pThis,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
 
-/* U8 */
-static int hdaRegReadU8(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xffffff00) == 0);
-    return hdaRegReadU32(pThis, iReg, pu32Value);
-}
+#ifdef VBOX_STRICT
+    AssertReleaseMsg(!RT_BOOL(HDA_STREAM_REG(pThis, CTL, u8Strm) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)),
+                     ("Cannot initialize stream %RU8 while in running state\n", u8Strm));
+#endif
 
-static int hdaRegWriteU8(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    Assert((u32Value & 0xffffff00) == 0);
-    return hdaRegWriteU32(pThis, iReg, u32Value);
-}
+    pStrmSt->u8Strm     = u8Strm;
+    pStrmSt->u64BaseDMA = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, u8Strm),
+                                      HDA_STREAM_REG(pThis, BDPU, u8Strm));
+    pStrmSt->u16LVI     = HDA_STREAM_REG(pThis, LVI, u8Strm);
+    pStrmSt->u32CBL     = HDA_STREAM_REG(pThis, CBL, u8Strm);
+    pStrmSt->u16FIFOS   = hdaSDFIFOSToBytes(HDA_STREAM_REG(pThis, FIFOS, u8Strm));
 
-/* U16 */
-static int hdaRegReadU16(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xffff0000) == 0);
-    return hdaRegReadU32(pThis, iReg, pu32Value);
-}
+    int rc = VINF_SUCCESS;
 
-static int hdaRegWriteU16(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    Assert((u32Value & 0xffff0000) == 0);
-    return hdaRegWriteU32(pThis, iReg, u32Value);
-}
+    if (pStrmSt->State.paBDLE)
+    {
+        Assert(pStrmSt->State.cBDLE);
+        RTMemFree(pStrmSt->State.paBDLE);
+        pStrmSt->State.paBDLE = NULL;
+    }
 
-/* U24 */
-static int hdaRegReadU24(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xff000000) == 0);
-    return hdaRegReadU32(pThis, iReg, pu32Value);
-}
+    pStrmSt->State.cBDLE = 0;
 
-static int hdaRegWriteU24(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    Assert((u32Value & 0xff000000) == 0);
-    return hdaRegWriteU32(pThis, iReg, u32Value);
-}
+    if (pStrmSt->u16LVI) /* Any BDLEs to fetch? */
+    {
+        AssertMsg(pStrmSt->u64BaseDMA, ("No base DMA address set for stream %RU8\n", u8Strm));
 
-/* U32 */
-static int hdaRegReadU32(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    uint32_t    iRegMem = g_aHdaRegMap[iReg].mem_idx;
+        uint32_t cbBDLE = 0;
 
-    *pu32Value = pThis->au32Regs[iRegMem] & g_aHdaRegMap[iReg].readable;
-    return VINF_SUCCESS;
-}
+        pStrmSt->State.cBDLE  = pStrmSt->u16LVI + 1; /* See 18.2.37: If LVI is n, then there are n + 1 entries. */
+        pStrmSt->State.paBDLE = (PHDABDLE)RTMemAllocZ(sizeof(HDABDLE) * pStrmSt->State.cBDLE);
+        if (pStrmSt->State.paBDLE)
+        {
+            for (uint16_t i = 0; i < pStrmSt->State.cBDLE; i++)
+            {
+                rc = hdaBDLEFetch(pThis, &pStrmSt->State.paBDLE[i], pStrmSt->u64BaseDMA, i);
+                if (RT_FAILURE(rc))
+                    break;
 
-static int hdaRegWriteU32(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    uint32_t    iRegMem = g_aHdaRegMap[iReg].mem_idx;
+                cbBDLE += pStrmSt->State.paBDLE[i].u32BufSize;
+            }
 
-    pThis->au32Regs[iRegMem]  = (u32Value & g_aHdaRegMap[iReg].writable)
-                              | (pThis->au32Regs[iRegMem] & ~g_aHdaRegMap[iReg].writable);
-    return VINF_SUCCESS;
+#ifdef DEBUG
+            hdaBDLEDumpAll(pThis, pStrmSt->u64BaseDMA, pStrmSt->State.cBDLE);
+#endif
+            if (RT_SUCCESS(rc))
+            {
+                if (pStrmSt->u32CBL != cbBDLE)
+                {
+                    AssertMsgFailed(("CBL (%RU32) does not match BDL entries (%RU32)\n", pStrmSt->u32CBL, cbBDLE));
+                    LogRel(("HDA: Warning: CBL (%RU32) does not match BDL entries (%RU32); expect sound hickups\n",
+                            pStrmSt->u32CBL, cbBDLE));
+                }
+
+                HDA_STREAM_REG(pThis, STS, pStrmSt->u8Strm) |= HDA_REG_FIELD_FLAG_MASK(SDSTS, BCIS);
+            }
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+
+    LogFunc(("[SD%RU8]: DMA=0x%x, LVI=%RU16, CBL=%RU32, FIFOS=%RU16\n",
+             u8Strm, pStrmSt->u64BaseDMA, pStrmSt->u16LVI, pStrmSt->u32CBL, pStrmSt->u16FIFOS));
+
+    return rc;
 }
 
-static int hdaRegWriteGCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static void hdaStreamDestroy(PHDASTREAM pStrmSt)
 {
-    if (u32Value & HDA_REG_FIELD_FLAG_MASK(GCTL, RST))
-    {
-        /* exit reset state */
-        HDA_REG(pThis, GCTL) |= HDA_REG_FIELD_FLAG_MASK(GCTL, RST);
-        pThis->fInReset = false;
+    AssertPtrReturnVoid(pStrmSt);
+
+    LogFlowFuncEnter();
+
+    int rc2 = hdaStreamStop(pStrmSt);
+    AssertRC(rc2);
+
+    if (pStrmSt->State.hStateChangedEvent != NIL_RTSEMEVENT)
+    {
+        rc2 = RTSemEventDestroy(pStrmSt->State.hStateChangedEvent);
+        AssertRC(rc2);
+    }
+
+    /*
+     * Destroy.
+     */
+    if (pStrmSt->State.paBDLE)
+    {
+        Assert(pStrmSt->State.cBDLE);
+        RTMemFree(pStrmSt->State.paBDLE);
+        pStrmSt->State.paBDLE = NULL;
+    }
+
+    pStrmSt->State.cBDLE = 0;
+
+    LogFlowFuncLeave();
+}
+
+static void hdaStreamReset(PHDASTATE pThis, PHDASTREAM pStrmSt, uint8_t u8Strm)
+{
+    AssertPtrReturnVoid(pThis);
+    AssertPtrReturnVoid(pStrmSt);
+    AssertReturnVoid(u8Strm <= 7); /** @todo Use a define for MAX_STREAMS! */
+
+#ifdef VBOX_STRICT
+    AssertReleaseMsg(!RT_BOOL(HDA_STREAM_REG(pThis, CTL, u8Strm) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)),
+                     ("Cannot reset stream %RU8 while in running state\n", u8Strm));
+#endif
+
+    /*
+     * Set reset state.
+     */
+    Assert(ASMAtomicReadBool(&pStrmSt->State.fInReset) == false); /* No nested calls. */
+    ASMAtomicXchgBool(&pStrmSt->State.fInReset, true);
+
+    /*
+     * First, reset the internal stream state.
+     */
+    pStrmSt->u8Strm     = u8Strm;
+    pStrmSt->u64BaseDMA = 0;
+    pStrmSt->u32CBL     = 0;
+    pStrmSt->u16FMT     = 0;
+    pStrmSt->u16FIFOS   = 0;
+    pStrmSt->u16LVI     = 0;
+
+    /*
+     * Second, initialize the registers.
+     */
+    HDA_STREAM_REG(pThis, STS,   u8Strm) = 0;
+    /* According to the ICH6 datasheet, 0x40000 is the default value for stream descriptor register 23:20
+     * bits are reserved for stream number 18.2.33, resets SDnCTL except SRST bit. */
+    HDA_STREAM_REG(pThis, CTL,   u8Strm) = 0x40000 | (HDA_STREAM_REG(pThis, CTL, u8Strm) & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST));
+    /* ICH6 defines default values (0x77 for input and 0xBF for output descriptors) of FIFO size. 18.2.39. */
+    HDA_STREAM_REG(pThis, FIFOS, u8Strm) = u8Strm < 4 ? HDA_SDINFIFO_120B : HDA_SDONFIFO_192B;
+    /* See 18.2.38: Always defaults to 0x4 (32 bytes). */
+    HDA_STREAM_REG(pThis, FIFOW, u8Strm) = HDA_SDFIFOW_32B;
+    HDA_STREAM_REG(pThis, LPIB,  u8Strm) = 0;
+    HDA_STREAM_REG(pThis, CBL,   u8Strm) = 0;
+    HDA_STREAM_REG(pThis, LVI,   u8Strm) = 0;
+    HDA_STREAM_REG(pThis, FMT,   u8Strm) = 0;
+    HDA_STREAM_REG(pThis, BDPU,  u8Strm) = 0;
+    HDA_STREAM_REG(pThis, BDPL,  u8Strm) = 0;
+
+    /* Report that we're done resetting this stream. */
+    HDA_STREAM_REG(pThis, CTL,   u8Strm) = 0;
+
+    LogFunc(("[SD%RU8]: Reset\n", u8Strm));
+
+    /* Exit reset mode. */
+    ASMAtomicXchgBool(&pStrmSt->State.fInReset, false);
+}
+
+static int hdaStreamStart(PHDASTREAM pStrmSt)
+{
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
+
+    ASMAtomicXchgBool(&pStrmSt->State.fDoStop, false);
+    ASMAtomicXchgBool(&pStrmSt->State.fActive, true);
+
+    LogFlowFuncLeave();
+    return VINF_SUCCESS;
+}
+
+static int hdaStreamStop(PHDASTREAM pStrmSt)
+{
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
+
+    /* Already in stopped state? */
+    bool fActive = ASMAtomicReadBool(&pStrmSt->State.fActive);
+    if (!fActive)
+        return VINF_SUCCESS;
+
+#if 0 /** @todo Does not work (yet), as EMT deadlocks then. */
+    /*
+     * Wait for the stream to stop.
+     */
+    ASMAtomicXchgBool(&pStrmSt->State.fDoStop, true);
+
+    int rc = hdaStreamWaitForStateChange(pStrmSt, 60 * 1000 /* ms timeout */);
+    fActive = ASMAtomicReadBool(&pStrmSt->State.fActive);
+    if (   /* Waiting failed? */
+           RT_FAILURE(rc)
+           /* Stream is still active? */
+        || fActive)
+    {
+        AssertRC(rc);
+        LogRel(("HDA: Warning: Unable to stop stream %RU8 (state: %s), rc=%Rrc\n",
+                pStrmSt->u8Strm, fActive ? "active" : "stopped", rc));
+    }
+#else
+    int rc = VINF_SUCCESS;
+#endif
+
+    LogFlowFuncLeaveRC(rc);
+    return rc;
+}
+
+static int hdaStreamWaitForStateChange(PHDASTREAM pStrmSt, RTMSINTERVAL msTimeout)
+{
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
+
+    LogFlowFunc(("[SD%RU8]: msTimeout=%RU32\n", pStrmSt->u8Strm, msTimeout));
+    return RTSemEventWait(pStrmSt->State.hStateChangedEvent, msTimeout);
+}
+#endif /* IN_RING3 */
+
+/* Register access handlers. */
+
+static int hdaRegReadUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    *pu32Value = 0;
+    return VINF_SUCCESS;
+}
+
+static int hdaRegWriteUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    return VINF_SUCCESS;
+}
+
+/* U8 */
+static int hdaRegReadU8(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xffffff00) == 0);
+    return hdaRegReadU32(pThis, iReg, pu32Value);
+}
+
+static int hdaRegWriteU8(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    Assert((u32Value & 0xffffff00) == 0);
+    return hdaRegWriteU32(pThis, iReg, u32Value);
+}
+
+/* U16 */
+static int hdaRegReadU16(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xffff0000) == 0);
+    return hdaRegReadU32(pThis, iReg, pu32Value);
+}
+
+static int hdaRegWriteU16(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    Assert((u32Value & 0xffff0000) == 0);
+    return hdaRegWriteU32(pThis, iReg, u32Value);
+}
+
+/* U24 */
+static int hdaRegReadU24(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xff000000) == 0);
+    return hdaRegReadU32(pThis, iReg, pu32Value);
+}
+
+static int hdaRegWriteU24(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    Assert((u32Value & 0xff000000) == 0);
+    return hdaRegWriteU32(pThis, iReg, u32Value);
+}
+
+/* U32 */
+static int hdaRegReadU32(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    uint32_t iRegMem = g_aHdaRegMap[iReg].mem_idx;
+
+    *pu32Value = pThis->au32Regs[iRegMem] & g_aHdaRegMap[iReg].readable;
+    return VINF_SUCCESS;
+}
+
+static int hdaRegWriteU32(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    uint32_t iRegMem = g_aHdaRegMap[iReg].mem_idx;
+
+    pThis->au32Regs[iRegMem]  = (u32Value & g_aHdaRegMap[iReg].writable)
+                              | (pThis->au32Regs[iRegMem] & ~g_aHdaRegMap[iReg].writable);
+    return VINF_SUCCESS;
+}
+
+static int hdaRegWriteGCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    if (u32Value & HDA_REG_FIELD_FLAG_MASK(GCTL, RST))
+    {
+        /* Set the CRST bit to indicate that we're leaving reset mode. */
+        HDA_REG(pThis, GCTL) |= HDA_REG_FIELD_FLAG_MASK(GCTL, RST);
+
+        if (pThis->fInReset)
+        {
+            LogFunc(("Leaving reset\n"));
+            pThis->fInReset = false;
+        }
     }
     else
     {
 #ifdef IN_RING3
-        /* enter reset state*/
+        /* Enter reset state. */
         if (   HDA_REG_FLAG_VALUE(pThis, CORBCTL, DMA)
             || HDA_REG_FLAG_VALUE(pThis, RIRBCTL, DMA))
         {
-            LogFunc(("HDA enters in reset with DMA(RIRB:%s, CORB:%s)\n",
-                HDA_REG_FLAG_VALUE(pThis, CORBCTL, DMA) ? "on" : "off",
-                HDA_REG_FLAG_VALUE(pThis, RIRBCTL, DMA) ? "on" : "off"));
+            LogFunc(("Entering reset with DMA(RIRB:%s, CORB:%s)\n",
+                     HDA_REG_FLAG_VALUE(pThis, CORBCTL, DMA) ? "on" : "off",
+                     HDA_REG_FLAG_VALUE(pThis, RIRBCTL, DMA) ? "on" : "off"));
         }
-        hdaReset(pThis->CTX_SUFF(pDevIns));
+
+        /* Clear the CRST bit to indicate that we're in reset mode. */
         HDA_REG(pThis, GCTL) &= ~HDA_REG_FIELD_FLAG_MASK(GCTL, RST);
         pThis->fInReset = true;
+
+        /* As the CRST bit now is set, we now can proceed resetting stuff. */
+        hdaReset(pThis->CTX_SUFF(pDevIns));
 #else
         return VINF_IOM_R3_MMIO_WRITE;
 #endif
     }
     if (u32Value & HDA_REG_FIELD_FLAG_MASK(GCTL, FSH))
     {
-        /* Flush: GSTS:1 set,  see 6.2.6*/
-        HDA_REG(pThis, GSTS) |= HDA_REG_FIELD_FLAG_MASK(GSTS, FSH); /* set the flush state */
-        /* DPLBASE and DPUBASE should be initialized with initial value (see 6.2.6)*/
+        /* Flush: GSTS:1 set, see 6.2.6. */
+        HDA_REG(pThis, GSTS) |= HDA_REG_FIELD_FLAG_MASK(GSTS, FSH); /* Set the flush state. */
+        /* DPLBASE and DPUBASE should be initialized with initial value (see 6.2.6). */
     }
     return VINF_SUCCESS;
 }
@@ -1398,37 +1801,63 @@ static int hdaRegReadINTSTS(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
         || HDA_REG_FLAG_VALUE(pThis, RIRBSTS, RINTFL)
         || HDA_REG_FLAG_VALUE(pThis, CORBSTS, CMEI)
         || HDA_REG(pThis, STATESTS))
-        v |= RT_BIT(30);
-#define HDA_IS_STREAM_EVENT(pThis, stream)             \
-       (   (SDSTS((pThis),stream) & HDA_REG_FIELD_FLAG_MASK(SDSTS, DE))  \
-        || (SDSTS((pThis),stream) & HDA_REG_FIELD_FLAG_MASK(SDSTS, FE))  \
-        || (SDSTS((pThis),stream) & HDA_REG_FIELD_FLAG_MASK(SDSTS, BCIS)))
-#define MARK_STREAM(pThis, stream, v) do { (v) |= HDA_IS_STREAM_EVENT((pThis),stream) ? RT_BIT((stream)) : 0; } while(0)
-    MARK_STREAM(pThis, 0, v);
-    MARK_STREAM(pThis, 1, v);
-    MARK_STREAM(pThis, 2, v);
-    MARK_STREAM(pThis, 3, v);
-    MARK_STREAM(pThis, 4, v);
-    MARK_STREAM(pThis, 5, v);
-    MARK_STREAM(pThis, 6, v);
-    MARK_STREAM(pThis, 7, v);
+    {
+        v |= RT_BIT(30); /* Touch CIS. */
+    }
+
+#define HDA_IS_STREAM_EVENT(pThis, num)                                  \
+       (   (SDSTS((pThis), num) & HDA_REG_FIELD_FLAG_MASK(SDSTS, DE))    \
+        || (SDSTS((pThis), num) & HDA_REG_FIELD_FLAG_MASK(SDSTS, FE))    \
+        || (SDSTS((pThis), num) & HDA_REG_FIELD_FLAG_MASK(SDSTS, BCIS)))
+
+#define HDA_MARK_STREAM(pThis, num, v) \
+        do { (v) |= HDA_IS_STREAM_EVENT((pThis), num) ? RT_BIT((num)) : 0; } while(0)
+
+    HDA_MARK_STREAM(pThis, 0, v);
+    HDA_MARK_STREAM(pThis, 1, v);
+    HDA_MARK_STREAM(pThis, 2, v);
+    HDA_MARK_STREAM(pThis, 3, v);
+    HDA_MARK_STREAM(pThis, 4, v);
+    HDA_MARK_STREAM(pThis, 5, v);
+    HDA_MARK_STREAM(pThis, 6, v);
+    HDA_MARK_STREAM(pThis, 7, v);
+
+#undef HDA_IS_STREAM_EVENT
+#undef HDA_MARK_STREAM
+
     v |= v ? RT_BIT(31) : 0;
+
     *pu32Value = v;
     return VINF_SUCCESS;
 }
 
+static int hdaRegReadLPIB(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    const uint8_t  u8Strm  = HDA_SD_NUM_FROM_REG(pThis, LPIB, iReg);
+          uint32_t u32LPIB = HDA_STREAM_REG(pThis, LPIB, u8Strm);
+    const uint32_t u32CBL  = HDA_STREAM_REG(pThis, CBL,  u8Strm);
+
+    LogFlowFunc(("[SD%RU8]: LPIB=%RU32, CBL=%RU32\n", u8Strm, u32LPIB, u32CBL));
+
+    *pu32Value = u32LPIB;
+    return VINF_SUCCESS;
+}
+
 static int hdaRegReadWALCLK(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
 {
     /* HDA spec (1a): 3.3.16 WALCLK counter ticks with 24Mhz bitclock rate. */
     *pu32Value = (uint32_t)ASMMultU64ByU32DivByU32(PDMDevHlpTMTimeVirtGetNano(pThis->CTX_SUFF(pDevIns))
                                                    - pThis->u64BaseTS, 24, 1000);
+    LogFlowFunc(("%RU32\n", *pu32Value));
     return VINF_SUCCESS;
 }
 
 static int hdaRegWriteCORBRP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     if (u32Value & HDA_REG_FIELD_FLAG_MASK(CORBRP, RST))
+    {
         HDA_REG(pThis, CORBRP) = 0;
+    }
 #ifndef BIRD_THINKS_CORBRP_IS_MOSTLY_RO
     else
         return hdaRegWriteU8(pThis, iReg, u32Value);
@@ -1441,9 +1870,11 @@ static int hdaRegWriteCORBCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 #ifdef IN_RING3
     int rc = hdaRegWriteU8(pThis, iReg, u32Value);
     AssertRC(rc);
-    if (   HDA_REG(pThis, CORBWP) != HDA_REG(pThis, CORBRP)
+    if (   HDA_REG(pThis, CORBWP)                  != HDA_REG(pThis, CORBRP)
         && HDA_REG_FLAG_VALUE(pThis, CORBCTL, DMA) != 0)
+    {
         return hdaCORBCmdProcess(pThis);
+    }
     return rc;
 #else
     return VINF_IOM_R3_MMIO_WRITE;
@@ -1475,55 +1906,70 @@ static int hdaRegWriteCORBWP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 #endif
 }
 
+static int hdaRegWriteSDCBL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    const uint8_t  u8Strm  = HDA_SD_NUM_FROM_REG(pThis, CBL, iReg);
+          uint32_t u32LPIB = HDA_STREAM_REG(pThis, LPIB, u8Strm);
+
+    LogFlowFunc(("[SD%RU8]: LPIB=%RU32, CBL=%RU32\n", u8Strm, u32LPIB, u32Value));
+
+    return hdaRegWriteU32(pThis, iReg, u32Value);
+}
+
 static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
-    bool fRun     = RT_BOOL(u32Value & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
-    bool fInRun   = RT_BOOL(HDA_REG_IND(pThis, iReg) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
-    bool fReset   = RT_BOOL(u32Value & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST));
-    bool fInReset = RT_BOOL(HDA_REG_IND(pThis, iReg) & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST));
+    bool fRun      = RT_BOOL(u32Value & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
+    bool fInRun    = RT_BOOL(HDA_REG_IND(pThis, iReg) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
+    bool fReset    = RT_BOOL(u32Value & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST));
+    bool fInReset  = RT_BOOL(HDA_REG_IND(pThis, iReg) & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST));
+
+    uint8_t u8Strm = HDA_SD_NUM_FROM_REG(pThis, CTL, iReg);
+
+    PHDASTREAM pStrmSt;
+    switch (u8Strm)
+    {
+        case 0: /** @todo Use dynamic indices, based on stream assignment. */
+        {
+            pStrmSt = &pThis->StrmStLineIn;
+            break;
+        }
+# ifdef VBOX_WITH_HDA_MIC_IN
+        case 2: /** @todo Use dynamic indices, based on stream assignment. */
+        {
+            pStrmSt = &pThis->StrmStMicIn;
+            break;
+        }
+# endif
+        case 4: /** @todo Use dynamic indices, based on stream assignment. */
+        {
+            pStrmSt = &pThis->StrmStOut;
+            break;
+        }
+
+        default:
+        {
+            LogFunc(("Warning: Changing SDCTL on non-attached stream (iReg=0x%x)\n", iReg));
+            return hdaRegWriteU24(pThis, iReg, u32Value); /* Write 3 bytes. */
+        }
+    }
+
+    LogFunc(("[SD%RU8]: fRun=%RTbool, fInRun=%RTbool, fReset=%RTbool, fInReset=%RTbool, %R[sdctl]\n",
+             u8Strm, fRun, fInRun, fReset, fInReset, u32Value));
 
     if (fInReset)
     {
-        /*
-         * Assert!!! Guest is resetting HDA's stream, we're expecting guest will mark stream as exit
-         * from reset
-         */
-        Assert((!fReset));
-        LogFunc(("guest initiated exit of stream reset.\n"));
+        /* Guest is resetting HDA's stream, we're expecting guest will mark stream as exit. */
+        Assert(!fReset);
+        LogFunc(("Guest initiated exit of stream reset\n"));
     }
     else if (fReset)
     {
 #ifdef IN_RING3
-        /*
-         * Assert!!! ICH6 datasheet 18.2.33 says that RUN bit should be cleared before initiation of reset.
-         */
-        uint8_t u8Strm = 0;
-        PHDABDLEDESC pBdle = NULL;
-        HDASTREAMTRANSFERDESC StreamDesc;
-        Assert((!fInRun && !fRun));
-        switch (iReg)
-        {
-            case HDA_REG_SD0CTL:
-                u8Strm = 0;
-                pBdle = &pThis->StInBdle;
-                break;
-#ifdef VBOX_WITH_HDA_MIC_IN
-            case HDA_REG_SD2CTL:
-                u8Strm = 2;
-                pBdle = &pThis->StMicBdle;
-                break;
-#endif
-            case HDA_REG_SD4CTL:
-                u8Strm = 4;
-                pBdle = &pThis->StOutBdle;
-                break;
-            default:
-                LogFunc(("changing SRST bit on non-attached stream\n"));
-                return hdaRegWriteU24(pThis, iReg, u32Value);
-        }
-        LogFunc(("guest initiated enter to stream reset.\n"));
-        hdaInitTransferDescriptor(pThis, pBdle, u8Strm, &StreamDesc);
-        hdaStreamReset(pThis, pBdle, &StreamDesc, u8Strm);
+        /* ICH6 datasheet 18.2.33 says that RUN bit should be cleared before initiation of reset. */
+        Assert(!fInRun && !fRun);
+
+        LogFunc(("Guest initiated enter to stream reset\n"));
+        hdaStreamReset(pThis, pStrmSt, u8Strm);
 #else
         return VINF_IOM_R3_MMIO_WRITE;
 #endif
@@ -1531,16 +1977,27 @@ static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
     else
     {
 #ifdef IN_RING3
-        /* we enter here to change DMA states only */
-        if (   (fInRun && !fRun)
-            || (fRun && !fInRun))
+        /*
+         * Only (re-)initialize the stream when not running.
+         */
+        if (!fRun && !fInRun)
+        {
+            int rc2 = hdaStreamInit(pThis, pStrmSt, u8Strm);
+            AssertRC(rc2);
+        }
+
+        /*
+         * We enter here to change DMA states only.
+         */
+        if (fInRun != fRun)
         {
-            Assert((!fReset && !fInReset));
+            Assert(!fReset && !fInReset);
+            LogFunc(("[SD%RU8]: fRun=%RTbool\n", u8Strm, fRun));
 
             PHDADRIVER pDrv;
-            switch (iReg)
+            switch (u8Strm)
             {
-                case HDA_REG_SD0CTL:
+                case 0: /** @todo Use a variable here. Later. */
                 {
                     RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
                         pDrv->pConnector->pfnEnableIn(pDrv->pConnector,
@@ -1548,7 +2005,7 @@ static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
                     break;
                 }
 # ifdef VBOX_WITH_HDA_MIC_IN
-                case HDA_REG_SD2CTL:
+                case 2: /** @todo Use a variable here. Later. */
                 {
                     RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
                         pDrv->pConnector->pfnEnableIn(pDrv->pConnector,
@@ -1556,7 +2013,7 @@ static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
                     break;
                 }
 # endif
-                case HDA_REG_SD4CTL:
+                case 4: /** @todo Use a variable here. Later. */
                 {
                     RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
                         pDrv->pConnector->pfnEnableOut(pDrv->pConnector,
@@ -1587,6 +2044,14 @@ static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 
 static int hdaRegWriteSDLVI(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
+    /* Only can be modified if RUN bit is 0. */
+    bool fIsRunning = RT_BOOL(HDA_REG_IND(pThis, iReg) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
+    if (fIsRunning)
+    {
+        AssertMsgFailed(("Cannot write to register when RUN bit is set\n"));
+        return VINF_SUCCESS;
+    }
+
     int rc = hdaRegWriteU32(pThis, iReg, u32Value);
     if (RT_FAILURE(rc))
         AssertRCReturn(rc, VINF_SUCCESS);
@@ -1605,28 +2070,34 @@ static int hdaRegWriteSDFIFOW(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
             LogFunc(("Attempt to store unsupported value(%x) in SDFIFOW\n", u32Value));
             return hdaRegWriteU16(pThis, iReg, HDA_SDFIFOW_32B);
     }
-    return VINF_SUCCESS;
+    return VINF_SUCCESS; /* Never reached. */
 }
 
 /**
  * @note This method could be called for changing value on Output Streams
- *       only (ICH6 datasheet 18.2.39)
+ *       only (ICH6 datasheet 18.2.39).
  */
 static int hdaRegWriteSDFIFOS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
+    /** @todo Only allow updating FIFOS if RUN bit is 0? */
+    uint32_t u32FIFOS = 0;
+
     switch (iReg)
     {
-        /* SDInFIFOS is RO, n=0-3 */
+        /* SDInFIFOS is RO, n=0-3. */
         case HDA_REG_SD0FIFOS:
         case HDA_REG_SD1FIFOS:
         case HDA_REG_SD2FIFOS:
         case HDA_REG_SD3FIFOS:
-            LogFunc(("Guest tries change value of FIFO size of input stream\n"));
+        {
+            LogFunc(("Guest tries to change R/O value of FIFO size of input stream, ignoring\n"));
             break;
+        }
         case HDA_REG_SD4FIFOS:
         case HDA_REG_SD5FIFOS:
         case HDA_REG_SD6FIFOS:
         case HDA_REG_SD7FIFOS:
+        {
             switch(u32Value)
             {
                 case HDA_SDONFIFO_16B:
@@ -1634,16 +2105,32 @@ static int hdaRegWriteSDFIFOS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
                 case HDA_SDONFIFO_64B:
                 case HDA_SDONFIFO_128B:
                 case HDA_SDONFIFO_192B:
-                    return hdaRegWriteU16(pThis, iReg, u32Value);
+                    u32FIFOS = u32Value;
+                    break;
 
-                case HDA_SDONFIFO_256B:
+                case HDA_SDONFIFO_256B: /** @todo r=andy Investigate this. */
                     LogFunc(("256-bit is unsupported, HDA is switched into 192-bit mode\n"));
+                    /* Fall through is intentional. */
                 default:
-                    return hdaRegWriteU16(pThis, iReg, HDA_SDONFIFO_192B);
+                    u32FIFOS = HDA_SDONFIFO_192B;
+                    break;
             }
+
             break;
+        }
         default:
+        {
             AssertMsgFailed(("Something weird happened with register lookup routine\n"));
+            break;
+        }
+    }
+
+    if (u32FIFOS)
+    {
+        LogFunc(("[SD%RU8]: Updating FIFOS to %RU32 bytes\n", 0, hdaSDFIFOSToBytes(u32FIFOS)));
+        /** @todo Update internal stream state with new FIFOS. */
+
+        return hdaRegWriteU16(pThis, iReg, u32FIFOS);
     }
 
     return VINF_SUCCESS;
@@ -1658,9 +2145,9 @@ static int hdaSdFmtToAudSettings(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
 
     int rc = VINF_SUCCESS;
 
-    uint32_t u32Hz = (u32SdFmt & HDA_SDFMT_BASE_RATE_SHIFT) ? 44100 : 48000;
+    uint32_t u32Hz     = (u32SdFmt & HDA_SDFMT_BASE_RATE_SHIFT) ? 44100 : 48000;
     uint32_t u32HzMult = 1;
-    uint32_t u32HzDiv = 1;
+    uint32_t u32HzDiv  = 1;
 
     switch (EXTRACT_VALUE(u32SdFmt, HDA_SDFMT_MULT_MASK, HDA_SDFMT_MULT_SHIFT))
     {
@@ -1721,14 +2208,15 @@ static int hdaSdFmtToAudSettings(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
 
     if (RT_SUCCESS(rc))
     {
-        pCfg->uHz = u32Hz * u32HzMult / u32HzDiv;
-        pCfg->cChannels = (u32SdFmt & 0xf) + 1;
-        pCfg->enmFormat = enmFmt;
+        pCfg->uHz           = u32Hz * u32HzMult / u32HzDiv;
+        pCfg->cChannels     = (u32SdFmt & 0xf) + 1;
+        pCfg->enmFormat     = enmFmt;
         pCfg->enmEndianness = PDMAUDIOHOSTENDIANNESS;
     }
 
 # undef EXTRACT_VALUE
 
+    LogFlowFuncLeaveRC(rc);
     return rc;
 }
 #endif
@@ -1737,7 +2225,7 @@ static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
 #ifdef IN_RING3
 # ifdef VBOX_WITH_HDA_CODEC_EMU
-    /* No reason to reopen voice with same settings. */
+    /* No reason to re-open stream with same settings. */
     if (u32Value == HDA_REG_IND(pThis, iReg))
         return VINF_SUCCESS;
 
@@ -1760,7 +2248,7 @@ static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
             break;
 #  endif
         default:
-            LogFunc(("Warning: Attempt to change format on register %d\n", iReg));
+            LogFunc(("Warning: Attempt to change format on register %RU32\n", iReg));
             break;
     }
 
@@ -1892,16 +2380,25 @@ static int hdaRegWriteBase(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
             pThis->u64RIRBBase |= ((uint64_t)pThis->au32Regs[iRegMem] << 32);
             break;
         case HDA_REG_DPLBASE:
-            /** @todo: first bit has special meaning */
+        {
             pThis->u64DPBase &= UINT64_C(0xFFFFFFFF00000000);
             pThis->u64DPBase |= pThis->au32Regs[iRegMem];
+
+            /* Also make sure to handle the DMA position enable bit. */
+            bool fEnabled = pThis->au32Regs[iRegMem] & RT_BIT_32(0);
+            if (pThis->fDMAPosition != fEnabled)
+            {
+                LogRel(("HDA: %s DMA position buffer\n", fEnabled ? "Enabled" : "Disabled"));
+                pThis->fDMAPosition = fEnabled;
+            }
             break;
+        }
         case HDA_REG_DPUBASE:
             pThis->u64DPBase &= UINT64_C(0x00000000FFFFFFFF);
             pThis->u64DPBase |= ((uint64_t)pThis->au32Regs[iRegMem] << 32);
             break;
         default:
-            AssertMsgFailed(("Invalid index"));
+            AssertMsgFailed(("Invalid index\n"));
             break;
     }
 
@@ -1920,207 +2417,281 @@ static int hdaRegWriteRIRBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 
 #ifdef IN_RING3
 #ifdef LOG_ENABLED
-static void dump_bd(PHDASTATE pThis, PHDABDLEDESC pBdle, uint64_t u64BaseDMA)
+static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t cBDLE)
 {
-#if 0
-    uint64_t addr;
-    uint32_t len;
-    uint32_t ioc;
-    uint8_t  bdle[16];
-    uint32_t counter;
-    uint32_t i;
-    uint32_t sum = 0;
-    Assert(pBdle && pBdle->u32BdleMaxCvi);
-    for (i = 0; i <= pBdle->u32BdleMaxCvi; ++i)
-    {
-        PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), u64BaseDMA + i*16, bdle, 16);
-        addr = *(uint64_t *)bdle;
-        len = *(uint32_t *)&bdle[8];
-        ioc = *(uint32_t *)&bdle[12];
-        LogFunc(("%s bdle[%d] a:%llx, len:%d, ioc:%d\n",  (i == pBdle->u32BdleCvi? "[C]": "   "), i, addr, len, ioc & 0x1));
-        sum += len;
-    }
-    LogFunc(("sum: %d\n", sum));
-    for (i = 0; i < 8; ++i)
-    {
-        PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), (pThis->u64DPBase & DPBASE_ADDR_MASK) + i*8, &counter, sizeof(&counter));
-        LogFunc(("%s stream[%d] counter=%x\n", i == SDCTL_NUM(pThis, 4) || i == SDCTL_NUM(pThis, 0)? "[C]": "   ",
-             i , counter));
+    uint32_t cbBDLE = 0;
+
+    for (uint16_t i = 0; i < cBDLE; i++)
+    {
+        uint8_t bdle[16]; /** @todo Use a define. */
+        PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), u64BaseDMA + i * 16, bdle, 16); /** @todo Use a define. */
+
+        uint64_t addr = *(uint64_t *)bdle;
+        uint32_t len  = *(uint32_t *)&bdle[8];
+        uint32_t ioc  = *(uint32_t *)&bdle[12];
+
+        LogFlowFunc(("#%03d BDLE(adr:0x%llx, size:%RU32, ioc:%RTbool)\n",
+                     i, addr, len, RT_BOOL(ioc & 0x1)));
+
+        cbBDLE += len;
+    }
+
+    LogFlowFunc(("Total: %RU32 bytes\n", cbBDLE));
+
+    if (!pThis->u64DPBase) /* No DMA base given? Bail out. */
+        return;
+
+    for (int i = 0; i < 8; i++) /** @todo Use a define for MAX_STREAMS! */
+    {
+        uint32_t uDMACnt;
+        PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), (pThis->u64DPBase & DPBASE_ADDR_MASK) + i * 8, /** @todo Use a define. */
+                          &uDMACnt, sizeof(&uDMACnt));
+
+        LogFlowFunc(("%s #%02d STREAM(0x%x)\n",
+                     i == HDA_SDCTL_NUM(pThis, 4) || i == HDA_SDCTL_NUM(pThis, 0) ? "*" : " ", i , uDMACnt));
     }
-#endif
 }
 #endif
 
-static void hdaFetchBdle(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc)
+/**
+ * Fetches a Bundle Descriptor List Entry (BDLE) from the DMA engine.
+ *
+ * @param   pThis                   Pointer to HDA state.
+ * @param   pBDLE                   Where to store the fetched result.
+ * @param   u64BaseDMA              Address base of DMA engine to use.
+ * @param   u16Entry                BDLE entry to fetch.
+ */
+static int hdaBDLEFetch(PHDASTATE pThis, PHDABDLE pBDLE, uint64_t u64BaseDMA, uint16_t u16Entry)
 {
-    uint8_t  bdle[16];
-    Assert((   pStreamDesc->u64BaseDMA
-            && pBdle
-            && pBdle->u32BdleMaxCvi));
-    PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), pStreamDesc->u64BaseDMA + pBdle->u32BdleCvi*16, bdle, 16);
-    pBdle->u64BdleCviAddr = *(uint64_t *)bdle;
-    pBdle->u32BdleCviLen = *(uint32_t *)&bdle[8];
-    pBdle->fBdleCviIoc = (*(uint32_t *)&bdle[12]) & 0x1;
-#ifdef LOG_ENABLED
-    dump_bd(pThis, pBdle, pStreamDesc->u64BaseDMA);
-#endif
+    AssertPtrReturn(pThis,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pBDLE,   VERR_INVALID_POINTER);
+    AssertReturn(u64BaseDMA, VERR_INVALID_PARAMETER);
+    /** @todo Compare u16Entry with LVI. */
+
+    uint8_t uBundleEntry[16]; /** @todo Define a BDLE length. */
+    int rc = PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), u64BaseDMA + u16Entry * 16, /** @todo Define a BDLE length. */
+                               uBundleEntry, RT_ELEMENTS(uBundleEntry));
+    if (RT_FAILURE(rc))
+        return rc;
+
+    pBDLE->State.u32BDLIndex = u16Entry;
+    pBDLE->u64BufAdr         = *(uint64_t *) uBundleEntry;
+    pBDLE->u32BufSize        = *(uint32_t *)&uBundleEntry[8];
+    if (pBDLE->u32BufSize < sizeof(uint16_t)) /* Must be at least one word. */
+        return VERR_INVALID_STATE;
+
+    pBDLE->fIntOnCompletion  = (*(uint32_t *)&uBundleEntry[12]) & 0x1;
+
+    return VINF_SUCCESS;
 }
 
-DECLINLINE(uint32_t) hdaCalculateTransferBufferLength(PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc,
-                                                      uint32_t u32SoundBackendBufferBytesAvail, uint32_t u32CblLimit)
+static void hdaBDLEReset(PHDABDLE pBDLE)
 {
-    /*
-     * Number of bytes depends on the current position in buffer (u32BdleCviLen-u32BdleCviPos)
-     */
-    Assert((pBdle->u32BdleCviLen >= pBdle->u32BdleCviPos)); /* sanity */
-    uint32_t cb2Copy = pBdle->u32BdleCviLen - pBdle->u32BdleCviPos;
-    /*
-     * we may increase the counter in range of [0, FIFOS + 1]
-     */
-    cb2Copy = RT_MIN(cb2Copy, pStreamDesc->u32Fifos + 1);
-    Assert((u32SoundBackendBufferBytesAvail > 0));
+    AssertPtrReturnVoid(pBDLE);
 
-    /* sanity check to avoid overriding the backend audio buffer */
-    cb2Copy = RT_MIN(cb2Copy, u32SoundBackendBufferBytesAvail);
-    cb2Copy = RT_MIN(cb2Copy, u32CblLimit);
+    pBDLE->State.u32BufOff    = 0;
+    pBDLE->State.cbBelowFIFOW = 0;
+}
 
-    if (cb2Copy <= pBdle->cbUnderFifoW)
+/**
+ * Returns the number of outstanding stream data bytes which need to be processed
+ * by the DMA engine assigned to this stream.
+ *
+ * @return Number of bytes for the DMA engine to process.
+ */
+DECLINLINE(uint32_t) hdaStreamGetTransferSize(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32_t cbMax)
+{
+    AssertPtrReturn(pThis, 0);
+    AssertPtrReturn(pStrmSt, 0);
+
+    if (!cbMax)
         return 0;
-    cb2Copy -= pBdle->cbUnderFifoW; /* forcibly reserve the amount of unreported bytes to copy */
-    return cb2Copy;
+
+    PHDABDLE pBDLE = hdaStreamGetCurrentBDLE(pThis, pStrmSt);
+
+    uint32_t cbFree = pStrmSt->u32CBL - HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm);
+    if (cbFree)
+    {
+        /* Limit to the available free space of the current BDLE. */
+        cbFree = RT_MIN(cbFree, pBDLE->u32BufSize - pBDLE->State.u32BufOff);
+
+        /* Make sure we only copy as much as the stream's FIFO can hold (SDFIFOS, 18.2.39). */
+        cbFree = RT_MIN(cbFree, pStrmSt->u16FIFOS);
+
+        /* Make sure we only transfer as many bytes as requested. */
+        cbFree = RT_MIN(cbFree, cbMax);
+
+        if (pBDLE->State.cbBelowFIFOW)
+        {
+            /* Are we not going to reach (or exceed) the FIFO watermark yet with the data to copy?
+             * No need to read data from DMA then. */
+            if (cbFree > pBDLE->State.cbBelowFIFOW)
+            {
+                /* Subtract the amount of bytes that still would fit in the stream's FIFO
+                 * and therefore do not need to be processed by DMA. */
+                cbFree -= pBDLE->State.cbBelowFIFOW;
+            }
+        }
+    }
+
+    LogFlowFunc(("[SD%RU8]: CBL=%RU32, LPIB=%RU32, cbFree=%RU32, %R[bdle]\n", pStrmSt->u8Strm,
+                 pStrmSt->u32CBL, HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm), cbFree, pBDLE));
+    return cbFree;
 }
 
-DECLINLINE(void) hdaBackendWriteTransferReported(PHDABDLEDESC pBdle, uint32_t cbArranged2Copy, uint32_t cbCopied,
-                                                 uint32_t *pu32DMACursor, uint32_t *pu32BackendBufferCapacity)
+DECLINLINE(void) hdaBDLEUpdate(PHDABDLE pBDLE, uint32_t cbData, uint32_t cbProcessed)
 {
-    LogFunc(("cbArranged2Copy: %d, cbCopied: %d, pu32DMACursor: %d, pu32BackendBufferCapacity:%d\n",
-             cbArranged2Copy, cbCopied, pu32DMACursor ? *pu32DMACursor : 0, pu32BackendBufferCapacity ? *pu32BackendBufferCapacity : 0));
-    Assert((cbCopied));
-    AssertPtr(pu32DMACursor);
-    Assert((pu32BackendBufferCapacity && *pu32BackendBufferCapacity));
-    /* Assertion!!! Fewer than cbUnderFifoW bytes were copied.
+    AssertPtrReturnVoid(pBDLE);
+
+    if (!cbData || !cbProcessed)
+        return;
+
+    /* Fewer than cbBelowFIFOW bytes were copied.
      * Probably we need to move the buffer, but it is rather hard to imagine a situation
-     * where it might happen.
-     */
-    AssertMsg((cbCopied == pBdle->cbUnderFifoW + cbArranged2Copy), /* we assume that we write the entire buffer including unreported bytes */
-              ("cbCopied=%RU32 != pBdle->cbUnderFifoW=%RU32 + cbArranged2Copy=%RU32\n",
-               cbCopied, pBdle->cbUnderFifoW, cbArranged2Copy));
-    if (   pBdle->cbUnderFifoW
-        && pBdle->cbUnderFifoW <= cbCopied)
+     * where it might happen. */
+    AssertMsg((cbProcessed == pBDLE->State.cbBelowFIFOW + cbData), /* we assume that we write the entire buffer including unreported bytes */
+              ("cbProcessed=%RU32 != pBDLE->State.cbBelowFIFOW=%RU32 + cbData=%RU32\n",
+              cbProcessed, pBDLE->State.cbBelowFIFOW, cbData));
+
+#if 0
+    if (   pBDLE->State.cbBelowFIFOW
+        && pBDLE->State.cbBelowFIFOW <= cbWritten)
     {
-        LogFunc(("CVI resetting cbUnderFifoW:%d(pos:%d, len:%d)\n",
-                 pBdle->cbUnderFifoW, pBdle->u32BdleCviPos, pBdle->u32BdleCviLen));
+        LogFlowFunc(("BDLE(cbUnderFifoW:%RU32, off:%RU32, size:%RU32)\n",
+                     pBDLE->State.cbBelowFIFOW, pBDLE->State.u32BufOff, pBDLE->u32BufSize));
     }
+#endif
 
-    pBdle->cbUnderFifoW -= RT_MIN(pBdle->cbUnderFifoW, cbCopied);
-    Assert((!pBdle->cbUnderFifoW)); /* Assert!!! Incorrect assumption */
+    pBDLE->State.cbBelowFIFOW -= RT_MIN(pBDLE->State.cbBelowFIFOW, cbProcessed);
+    Assert(pBDLE->State.cbBelowFIFOW == 0);
 
-    /* We always increment the position of DMA buffer counter because we're always reading into an intermediate buffer */
-    pBdle->u32BdleCviPos += cbArranged2Copy;
+    /* We always increment the position of DMA buffer counter because we're always reading
+     * into an intermediate buffer. */
+    pBDLE->State.u32BufOff += cbData;
+    Assert(pBDLE->State.u32BufOff <= pBDLE->u32BufSize);
 
-    Assert((pBdle->u32BdleCviLen >= pBdle->u32BdleCviPos && *pu32BackendBufferCapacity >= cbCopied)); /* sanity */
-    /* We report all bytes (including previously unreported bytes) */
-    *pu32DMACursor += cbCopied;
-    /* Decrease the backend counter by the number of bytes we copied to the backend */
-    *pu32BackendBufferCapacity -= cbCopied;
-    LogFunc(("CVI(pos:%d, len:%d), pu32DMACursor: %d, pu32BackendBufferCapacity:%d\n",
-             pBdle->u32BdleCviPos, pBdle->u32BdleCviLen, *pu32DMACursor, *pu32BackendBufferCapacity));
+    LogFlowFunc(("cbData=%RU32, cbProcessed=%RU32, %R[bdle]\n", cbData, cbProcessed, pBDLE));
 }
 
-DECLINLINE(void) hdaBackendReadTransferReported(PHDABDLEDESC pBdle, uint32_t cbArranged2Copy, uint32_t cbCopied,
-                                                uint32_t *pu32DMACursor, uint32_t *pu32BackendBufferCapacity)
+DECLINLINE(bool) hdaStreamNeedsNextBDLE(PHDASTATE pThis, PHDASTREAM pStrmSt)
 {
-    Assert((cbCopied, cbArranged2Copy));
-    *pu32BackendBufferCapacity -= cbCopied;
-    pBdle->u32BdleCviPos += cbCopied;
-    LogFunc(("CVI resetting cbUnderFifoW:%d(pos:%d, len:%d)\n", pBdle->cbUnderFifoW, pBdle->u32BdleCviPos, pBdle->u32BdleCviLen));
-    *pu32DMACursor += cbCopied + pBdle->cbUnderFifoW;
-    pBdle->cbUnderFifoW = 0;
-    LogFunc(("CVI(pos:%d, len:%d), pu32DMACursor: %d, pu32BackendBufferCapacity:%d\n",
-        pBdle->u32BdleCviPos, pBdle->u32BdleCviLen, pu32DMACursor ? *pu32DMACursor : 0, pu32BackendBufferCapacity ? *pu32BackendBufferCapacity : 0));
-}
+    AssertPtrReturn(pThis,   false);
+    AssertPtrReturn(pStrmSt, false);
 
-DECLINLINE(void) hdaBackendTransferUnreported(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc,
-                                              uint32_t cbCopied, uint32_t *pu32BackendBufferCapacity)
-{
-    LogFunc(("CVI (cbUnderFifoW:%d, pos:%d, len:%d)\n", pBdle->cbUnderFifoW, pBdle->u32BdleCviPos, pBdle->u32BdleCviLen));
-    pBdle->u32BdleCviPos += cbCopied;
-    pBdle->cbUnderFifoW += cbCopied;
-    /* In case of a read transaction we're always copying from the backend buffer */
-    if (pu32BackendBufferCapacity)
-        *pu32BackendBufferCapacity -= cbCopied;
-    LogFunc(("CVI (cbUnderFifoW:%d, pos:%d, len:%d)\n", pBdle->cbUnderFifoW, pBdle->u32BdleCviPos, pBdle->u32BdleCviLen));
-    Assert((pBdle->cbUnderFifoW <= hdaFifoWToSz(pThis, pStreamDesc)));
-}
+    PHDABDLE pBDLE   = hdaStreamGetCurrentBDLE(pThis, pStrmSt);
+    uint32_t u32LPIB = HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm);
 
-DECLINLINE(bool) hdaIsTransferCountersOverlapped(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc)
-{
-    bool fOnBufferEdge = (   *pStreamDesc->pu32Lpib == pStreamDesc->u32Cbl
-                          || pBdle->u32BdleCviPos == pBdle->u32BdleCviLen);
+    /* Did we reach the CBL (Cyclic Buffer List) limit? */
+    bool fCBLLimitReached = u32LPIB >= pStrmSt->u32CBL;
+
+    /* Do we need to use the next BDLE entry? Either because we reached
+     * the CBL limit or our internal DMA buffer is full. */
+    bool fNeedsNextBDLE   = (   fCBLLimitReached
+                             || (   pBDLE->State.u32BufOff
+                                 && pBDLE->State.u32BufOff >= pBDLE->u32BufSize)
+                            );
+
+    Assert(u32LPIB                <= pStrmSt->u32CBL);
+    Assert(pBDLE->State.u32BufOff <= pBDLE->u32BufSize);
 
-    Assert((*pStreamDesc->pu32Lpib <= pStreamDesc->u32Cbl));
+    LogFlowFunc(("[SD%RU8]: LPIB=%RU32, CBL=%RU32, fCBLLimitReached=%RTbool, fNeedsNextBDLE=%RTbool, %R[bdle]\n",
+                 pStrmSt->u8Strm, u32LPIB, pStrmSt->u32CBL, fCBLLimitReached, fNeedsNextBDLE, pBDLE));
 
-    if (*pStreamDesc->pu32Lpib == pStreamDesc->u32Cbl)
-        *pStreamDesc->pu32Lpib -= pStreamDesc->u32Cbl;
-    hdaUpdatePosBuf(pThis, pStreamDesc);
+    if (fCBLLimitReached)
+    {
+        /* Reset LPIB register. */
+        u32LPIB -= RT_MIN(u32LPIB, pStrmSt->u32CBL);
+        hdaStreamUpdateLPIB(pThis, pStrmSt, u32LPIB);
+    }
 
-    /* don't touch BdleCvi counter on uninitialized descriptor */
-    if (   pBdle->u32BdleCviPos
-        && pBdle->u32BdleCviPos == pBdle->u32BdleCviLen)
+    if (fNeedsNextBDLE)
     {
-        pBdle->u32BdleCviPos = 0;
-        pBdle->u32BdleCvi++;
-        if (pBdle->u32BdleCvi == pBdle->u32BdleMaxCvi + 1)
-            pBdle->u32BdleCvi = 0;
+        /* Reset current BDLE. */
+        hdaBDLEReset(pBDLE);
     }
-    return fOnBufferEdge;
+
+    return fNeedsNextBDLE;
 }
 
-DECLINLINE(void) hdaStreamCounterUpdate(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc,
-                                        uint32_t cbInc)
+DECLINLINE(void) hdaStreamTransferUpdate(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32_t cbInc)
 {
+    AssertPtrReturnVoid(pThis);
+    AssertPtrReturnVoid(pStrmSt);
+
+    LogFlowFunc(("[SD%RU8]: cbInc=%RU32\n", pStrmSt->u8Strm, cbInc));
+
+    Assert(cbInc <= pStrmSt->u16FIFOS);
+
+    PHDABDLE pBDLE = hdaStreamGetCurrentBDLE(pThis, pStrmSt);
+
     /*
-     * if we're below the FIFO Watermark, it's expected that HDA doesn't fetch anything.
-     * (ICH6 datasheet 18.2.38)
+     * If we're below the FIFO watermark (SDFIFOW), it's expected that HDA
+     * doesn't fetch anything via DMA, so just update LPIB.
+     * (ICH6 datasheet 18.2.38).
      */
-    if (!pBdle->cbUnderFifoW)
+    if (pBDLE->State.cbBelowFIFOW == 0) /* Did we hit (or exceed) the watermark? */
     {
-        *pStreamDesc->pu32Lpib += cbInc;
+        const uint32_t u32LPIB = RT_MIN(HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm) + cbInc,
+                                        pStrmSt->u32CBL);
 
-        /*
-         * Assert. The buffer counters should never overlap.
-         */
-        Assert((*pStreamDesc->pu32Lpib <= pStreamDesc->u32Cbl));
+        LogFlowFunc(("[SD%RU8]: LPIB: %RU32 -> %RU32, CBL=%RU32\n",
+                     pStrmSt->u8Strm,
+                     HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm), HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm) + cbInc,
+                     pStrmSt->u32CBL));
 
-        hdaUpdatePosBuf(pThis, pStreamDesc);
+        hdaStreamUpdateLPIB(pThis, pStrmSt, u32LPIB);
     }
 }
 
-static bool hdaDoNextTransferCycle(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTREAMTRANSFERDESC pStreamDesc)
+static bool hdaStreamTransferIsComplete(PHDASTATE pThis, PHDASTREAM pStrmSt)
 {
-    bool fDoNextTransferLoop = true;
-    if (   pBdle->u32BdleCviPos == pBdle->u32BdleCviLen
-        || *pStreamDesc->pu32Lpib == pStreamDesc->u32Cbl)
+    AssertPtrReturn(pThis,   true);
+    AssertPtrReturn(pStrmSt, true);
+
+    bool fIsComplete = false;
+
+    PHDABDLE       pBDLE   = hdaStreamGetCurrentBDLE(pThis, pStrmSt);
+    const uint32_t u32LPIB = HDA_STREAM_REG(pThis, LPIB, pStrmSt->u8Strm);
+
+    if (   pBDLE->State.u32BufOff >= pBDLE->u32BufSize
+        || u32LPIB                >= pStrmSt->u32CBL)
     {
-        if (    !pBdle->cbUnderFifoW
-             && pBdle->fBdleCviIoc)
+        Assert(pBDLE->State.u32BufOff <= pBDLE->u32BufSize);
+        Assert(u32LPIB                <= pStrmSt->u32CBL);
+
+        if (/* IOC (Interrupt On Completion) bit set? */
+               pBDLE->fIntOnCompletion
+            /* All data put into the DMA FIFO? */
+            && pBDLE->State.cbBelowFIFOW == 0
+           )
         {
             /**
-             * @todo - more carefully investigate BCIS flag.
+             * Set the BCIS (Buffer Completion Interrupt Status) flag as the
+             * last byte of data for the current descriptor has been fetched
+             * from memory and put into the DMA FIFO.
+             *
+             ** @todo More carefully investigate BCIS flag.
+             *
              * Speech synthesis works fine on Mac Guest if this bit isn't set
              * but in general sound quality gets worse.
              */
-            *pStreamDesc->pu32Sts |= HDA_REG_FIELD_FLAG_MASK(SDSTS, BCIS);
+            HDA_STREAM_REG(pThis, STS, pStrmSt->u8Strm) |= HDA_REG_FIELD_FLAG_MASK(SDSTS, BCIS);
 
             /*
-             * we should generate the interrupt if ICE bit of SDCTL register is set.
+             * If the ICE (IOCE, "Interrupt On Completion Enable") bit of the SDCTL register is set
+             * we need to generate an interrupt.
              */
-            if (pStreamDesc->u32Ctl & HDA_REG_FIELD_FLAG_MASK(SDCTL, ICE))
+            if (HDA_STREAM_REG(pThis, CTL, pStrmSt->u8Strm) & HDA_REG_FIELD_FLAG_MASK(SDCTL, ICE))
                 hdaProcessInterrupt(pThis);
         }
-        fDoNextTransferLoop = false;
+
+        fIsComplete = true;
     }
-    return fDoNextTransferLoop;
+
+    LogFlowFunc(("[SD%RU8]: u32LPIB=%RU32, CBL=%RU32, %R[bdle] => %s\n",
+                 pStrmSt->u8Strm, u32LPIB, pStrmSt->u32CBL, pBDLE, fIsComplete ? "COMPLETE" : "INCOMPLETE"));
+
+    return fIsComplete;
 }
 
 /**
@@ -2128,140 +2699,170 @@ static bool hdaDoNextTransferCycle(PHDASTATE pThis, PHDABDLEDESC pBdle, PHDASTRE
  * Note: This function writes to the DMA buffer immediately,
  *       but "reports bytes" when all conditions are met (FIFOW).
  */
-static int hdaReadAudio(PHDASTATE pThis, PAUDMIXSINK pSink,
-                        PHDASTREAMTRANSFERDESC pStreamDesc,
-                        uint32_t u32CblLimit, uint32_t *pcbAvail, uint32_t *pcbRead)
+static int hdaReadAudio(PHDASTATE pThis, PHDASTREAM pStrmSt, PAUDMIXSINK pSink, uint32_t cbMax, uint32_t *pcbRead)
 {
-    PHDABDLEDESC pBdle = &pThis->StInBdle; /** @todo Add support for mic in. */
+    AssertPtrReturn(pThis,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
+    AssertPtrReturn(pSink,   VERR_INVALID_POINTER);
+    /* pcbRead is optional. */
+
+    PHDABDLE pBDLE = hdaStreamGetCurrentBDLE(pThis, pStrmSt);
 
     int rc;
-    uint32_t cbTransferred = 0;
+    uint32_t cbRead = 0;
+    uint32_t cbBuf  = hdaStreamGetTransferSize(pThis, pStrmSt, cbMax);
 
-    LogFlowFunc(("CVI(pos:%d, len:%d)\n", pBdle->u32BdleCviPos, pBdle->u32BdleCviLen));
+    LogFlowFunc(("cbBuf=%RU32, %R[bdle]\n", cbBuf, pBDLE));
 
-    uint32_t cb2Copy = hdaCalculateTransferBufferLength(pBdle, pStreamDesc, *pcbAvail, u32CblLimit);
-    if (!cb2Copy)
+    if (!cbBuf)
     {
-        /* If we enter here we can't report "unreported bits". */
-        rc = VERR_NO_DATA;
+        /* Nothing to write, bail out. */
+        rc = VINF_EOF;
     }
     else
     {
-        uint32_t cbRead = 0;
-        rc = AudioMixerProcessSinkIn(pSink, AUDMIXOP_BLEND, pBdle->au8HdaBuffer, cb2Copy, &cbRead);
+        rc = AudioMixerProcessSinkIn(pSink, AUDMIXOP_BLEND, pBDLE->State.au8FIFO, cbBuf, &cbRead);
         if (RT_SUCCESS(rc))
         {
             Assert(cbRead);
+            Assert(cbRead == cbBuf);
+            Assert(cbRead <= pBDLE->u32BufSize - pBDLE->State.u32BufOff);
 
             /*
-             * Write the HDA DMA buffer.
+             * Write to the BDLE's DMA buffer.
              */
-            PDMDevHlpPCIPhysWrite(pThis->CTX_SUFF(pDevIns),
-                                  pBdle->u64BdleCviAddr + pBdle->u32BdleCviPos,
-                                  pBdle->au8HdaBuffer, cbRead);
-
-            /* Don't see any reason why cb2Copy would differ from cbRead. */
-            Assert((cbRead == cb2Copy && (*pcbAvail) >= cb2Copy)); /* sanity */
+            rc = PDMDevHlpPCIPhysWrite(pThis->CTX_SUFF(pDevIns),
+                                       pBDLE->u64BufAdr + pBDLE->State.u32BufOff,
+                                       pBDLE->State.au8FIFO, cbRead);
+            AssertRC(rc);
 
-            if (pBdle->cbUnderFifoW + cbRead > hdaFifoWToSz(pThis, 0))
-                hdaBackendReadTransferReported(pBdle, cb2Copy, cbRead, &cbTransferred, pcbAvail);
+            if (pBDLE->State.cbBelowFIFOW + cbRead > hdaStreamGetFIFOW(pThis, pStrmSt))
+            {
+                pBDLE->State.u32BufOff    += cbRead;
+                pBDLE->State.cbBelowFIFOW  = 0;
+                //hdaBackendReadTransferReported(pBDLE, cbDMAData, cbRead, &cbRead, pcbAvail);
+            }
             else
             {
-                hdaBackendTransferUnreported(pThis, pBdle, pStreamDesc, cbRead, pcbAvail);
+                pBDLE->State.u32BufOff    += cbRead;
+                pBDLE->State.cbBelowFIFOW += cbRead;
+                Assert(pBDLE->State.cbBelowFIFOW <= hdaStreamGetFIFOW(pThis, pStrmSt));
+                //hdaBackendTransferUnreported(pThis, pBDLE, pStreamDesc, cbRead, pcbAvail);
+
                 rc = VERR_NO_DATA;
             }
         }
     }
 
-    Assert((cbTransferred <= (SDFIFOS(pThis, 0) + 1)));
-    LogFunc(("CVI(pos:%RU32, len:%RU32), cbTransferred=%RU32, rc=%Rrc\n",
-             pBdle->u32BdleCviPos, pBdle->u32BdleCviLen, cbTransferred, rc));
+    Assert(cbRead <= pStrmSt->u16FIFOS);
 
     if (RT_SUCCESS(rc))
-        *pcbRead = cbTransferred;
+    {
+        if (pcbRead)
+            *pcbRead = cbRead;
+    }
 
+    LogFunc(("Returning cbRead=%RU32, rc=%Rrc\n", cbRead, rc));
     return rc;
 }
 
-static int hdaWriteAudio(PHDASTATE pThis, PHDASTREAMTRANSFERDESC pStreamDesc, uint32_t u32CblLimit,
-                         uint32_t *pcbAvail, uint32_t *pcbWritten)
+static int hdaWriteAudio(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32_t cbMax, uint32_t *pcbWritten)
 {
-    PHDABDLEDESC pBdle = &pThis->StOutBdle;
+    AssertPtrReturn(pThis,      VERR_INVALID_POINTER);
+    AssertPtrReturn(pStrmSt,    VERR_INVALID_POINTER);
+    AssertPtrReturn(pcbWritten, VERR_INVALID_POINTER);
+    /* pcbWritten is optional. */
 
-    int rc = VINF_SUCCESS;
-
-    uint32_t cbTransferred = 0;
-    uint32_t cbWrittenMin = 0; /* local byte counter, how many bytes copied to backend */
+    PHDABDLE pBDLE = hdaStreamGetCurrentBDLE(pThis, pStrmSt);
+    int rc;
 
-    LogFunc(("CVI(cvi:%RU32, pos:%RU32, len:%RU32)\n", pBdle->u32BdleCvi, pBdle->u32BdleCviPos, pBdle->u32BdleCviLen));
+    uint32_t cbWritten = 0;
+    uint32_t cbData    = hdaStreamGetTransferSize(pThis, pStrmSt, cbMax);
 
-    /* Local byte counter (on local buffer). */
-    uint32_t cb2Copy = hdaCalculateTransferBufferLength(pBdle, pStreamDesc, *pcbAvail, u32CblLimit);
+    LogFlowFunc(("cbData=%RU32, %R[bdle]\n", cbData, pBDLE));
 
     /*
-     * Copy from DMA to the corresponding hdaBuffer (if there are any bytes from the
-     * previous unreported transfer we write at offset 'pBdle->cbUnderFifoW').
+     * Copy from DMA to the corresponding stream buffer (if there are any bytes from the
+     * previous unreported transfer we write at offset 'pBDLE->State.cbUnderFifoW').
      */
-    if (!cb2Copy)
+    if (!cbData)
     {
         rc = VINF_EOF;
     }
     else
     {
-        PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns),
-                          pBdle->u64BdleCviAddr + pBdle->u32BdleCviPos,
-                          pBdle->au8HdaBuffer + pBdle->cbUnderFifoW, cb2Copy);
+        /*
+         * Read from the current BDLE's DMA buffer.
+         */
+        rc = PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns),
+                               pBDLE->u64BufAdr + pBDLE->State.u32BufOff,
+                               pBDLE->State.au8FIFO + pBDLE->State.cbBelowFIFOW, cbData);
+        AssertRC(rc);
 
 #ifdef VBOX_WITH_STATISTICS
-        STAM_COUNTER_ADD(&pThis->StatBytesRead, cb2Copy);
+        STAM_COUNTER_ADD(&pThis->StatBytesRead, cbData);
 #endif
-
         /*
          * Write to audio backend. We should ensure that we have enough bytes to copy to the backend.
          */
-        if (cb2Copy + pBdle->cbUnderFifoW >= hdaFifoWToSz(pThis, pStreamDesc))
+        uint32_t cbToWrite = cbData + pBDLE->State.cbBelowFIFOW;
+        if (cbToWrite >= hdaStreamGetFIFOW(pThis, pStrmSt))
         {
-            uint32_t cbWritten;
-            cbWrittenMin = UINT32_MAX;
+            uint32_t cbWrittenToStream;
+            int rc2;
 
             PHDADRIVER pDrv;
             RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
             {
                 if (pDrv->pConnector->pfnIsActiveOut(pDrv->pConnector, pDrv->Out.pStrmOut))
                 {
-                    int rc2 = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
-                                                         pBdle->au8HdaBuffer, cb2Copy + pBdle->cbUnderFifoW,
-                                                         &cbWritten);
-                    if (RT_FAILURE(rc2))
-                        continue;
+                    rc2 = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
+                                                     pBDLE->State.au8FIFO, cbToWrite, &cbWrittenToStream);
+                    if (RT_SUCCESS(rc2))
+                    {
+                        if (cbWrittenToStream < cbToWrite) /* Lagging behind? */
+                            LogFlowFunc(("\tLUN#%RU8: Warning: Only written %RU32 / %RU32 bytes, expect lags\n",
+                                         pDrv->uLUN, cbWrittenToStream, cbToWrite));
+                    }
+                }
+                else /* Stream disabled, not fatal. */
+                {
+                    cbWrittenToStream = 0;
+                    rc2 = VERR_NOT_AVAILABLE;
+                    /* Keep going. */
                 }
-                else /* Stream disabled, just assume all was copied. */
-                    cbWritten = cb2Copy;
 
-                cbWrittenMin = RT_MIN(cbWrittenMin, cbWritten);
-                LogFlowFunc(("\tLUN#%RU8: cbWritten=%RU32, cWrittenMin=%RU32\n", pDrv->uLUN, cbWritten, cbWrittenMin));
+                LogFlowFunc(("\tLUN#%RU8: cbToWrite=%RU32, cbWrittenToStream=%RU32, rc=%Rrc\n",
+                             pDrv->uLUN, cbToWrite, cbWrittenToStream, rc2));
             }
 
-            if (cbWrittenMin == UINT32_MAX)
-                cbWrittenMin = 0;
+            /* Always report all data as being written;
+             * backends who were not able to catch up have to deal with it themselves. */
+            cbWritten = cbToWrite;
 
-            hdaBackendWriteTransferReported(pBdle, cb2Copy, cbWrittenMin, &cbTransferred, pcbAvail);
+            hdaBDLEUpdate(pBDLE, cbData, cbWritten);
         }
         else
         {
+            pBDLE->State.u32BufOff += cbWritten;
+            pBDLE->State.cbBelowFIFOW += cbWritten;
+            Assert(pBDLE->State.cbBelowFIFOW <= hdaStreamGetFIFOW(pThis, pStrmSt));
+
             /* Not enough bytes to be processed and reported, we'll try our luck next time around. */
-            hdaBackendTransferUnreported(pThis, pBdle, pStreamDesc, cb2Copy, NULL);
+            //hdaBackendTransferUnreported(pThis, pBDLE, pStreamDesc, cbAvail, NULL);
             rc = VINF_EOF;
         }
     }
 
-    Assert(cbTransferred <= SDFIFOS(pThis, 4) + 1);
-    LogFunc(("CVI(pos:%RU32, len:%RU32, cbTransferred:%RU32), rc=%Rrc\n",
-             pBdle->u32BdleCviPos, pBdle->u32BdleCviLen, cbTransferred, rc));
+    Assert(cbWritten <= pStrmSt->u16FIFOS);
 
     if (RT_SUCCESS(rc))
-        *pcbWritten = cbTransferred;
+    {
+        if (pcbWritten)
+            *pcbWritten = cbWritten;
+    }
 
+    LogFunc(("Returning cbWritten=%RU32, rc=%Rrc\n", cbWritten, rc));
     return rc;
 }
 
@@ -2275,49 +2876,23 @@ static DECLCALLBACK(int) hdaCodecReset(PHDACODEC pCodec)
     return VINF_SUCCESS;
 }
 
-DECLINLINE(void) hdaInitTransferDescriptor(PHDASTATE pThis, PHDABDLEDESC pBdle, uint8_t u8Strm,
-                                           PHDASTREAMTRANSFERDESC pStreamDesc)
-{
-    Assert(pThis); Assert(pBdle); Assert(pStreamDesc); Assert(u8Strm <= 7);
-
-    RT_BZERO(pStreamDesc, sizeof(HDASTREAMTRANSFERDESC));
-    pStreamDesc->u8Strm     = u8Strm;
-    pStreamDesc->u32Ctl     = HDA_STREAM_REG(pThis, CTL, u8Strm);
-    pStreamDesc->u64BaseDMA = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, u8Strm),
-                                          HDA_STREAM_REG(pThis, BDPU, u8Strm));
-    pStreamDesc->pu32Lpib   = &HDA_STREAM_REG(pThis, LPIB, u8Strm);
-    pStreamDesc->pu32Sts    = &HDA_STREAM_REG(pThis, STS, u8Strm);
-    pStreamDesc->u32Cbl     = HDA_STREAM_REG(pThis, CBL, u8Strm);
-    pStreamDesc->u32Fifos   = HDA_STREAM_REG(pThis, FIFOS, u8Strm);
-
-    pBdle->u32BdleMaxCvi    = HDA_STREAM_REG(pThis, LVI, u8Strm);
-
-#ifdef LOG_ENABLED
-    if (   pBdle
-        && pBdle->u32BdleMaxCvi)
-    {
-        LogFunc(("Initialization of transfer descriptor:\n"));
-        dump_bd(pThis, pBdle, pStreamDesc->u64BaseDMA);
-    }
-#endif
-}
 
-static DECLCALLBACK(void) hdaDestroyIn(PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource)
+static DECLCALLBACK(void) hdaCloseIn(PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource)
 {
     NOREF(pThis);
     NOREF(enmRecSource);
     LogFlowFuncEnter();
 }
 
-static DECLCALLBACK(void) hdaDestroyOut(PHDASTATE pThis)
+static DECLCALLBACK(void) hdaCloseOut(PHDASTATE pThis)
 {
     NOREF(pThis);
     LogFlowFuncEnter();
 }
 
-static DECLCALLBACK(int) hdaCreateIn(PHDASTATE pThis,
-                                     const char *pszName, PDMAUDIORECSOURCE enmRecSource,
-                                     PPDMAUDIOSTREAMCFG pCfg)
+static DECLCALLBACK(int) hdaOpenIn(PHDASTATE pThis,
+                                   const char *pszName, PDMAUDIORECSOURCE enmRecSource,
+                                   PPDMAUDIOSTREAMCFG pCfg)
 {
     PAUDMIXSINK pSink;
 
@@ -2365,8 +2940,8 @@ static DECLCALLBACK(int) hdaCreateIn(PHDASTATE pThis,
     return rc;
 }
 
-static DECLCALLBACK(int) hdaCreateOut(PHDASTATE pThis,
-                                      const char *pszName, PPDMAUDIOSTREAMCFG pCfg)
+static DECLCALLBACK(int) hdaOpenOut(PHDASTATE pThis,
+                                    const char *pszName, PPDMAUDIOSTREAMCFG pCfg)
 {
     int rc = VINF_SUCCESS;
     char *pszDesc;
@@ -2374,7 +2949,8 @@ static DECLCALLBACK(int) hdaCreateOut(PHDASTATE pThis,
     PHDADRIVER pDrv;
     RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
     {
-        if (RTStrAPrintf(&pszDesc, "[LUN#%RU8] %s", pDrv->uLUN, pszName) <= 0)
+        if (RTStrAPrintf(&pszDesc, "[LUN#%RU8] %s (%RU32Hz, %RU8 %s)",
+                         pDrv->uLUN, pszName, pCfg->uHz, pCfg->cChannels, pCfg->cChannels > 1 ? "Channels" : "Channel") <= 0)
         {
             rc = VERR_NO_MEMORY;
             break;
@@ -2405,18 +2981,20 @@ static DECLCALLBACK(int) hdaSetVolume(PHDASTATE pThis, ENMSOUNDSOURCE enmSource,
     PAUDMIXSINK     pSink;
 
     /* Convert the audio source to corresponding sink. */
-    switch (enmSource) {
-    case PO_INDEX:
-        pSink = pThis->pSinkOutput;
-        break;
-    case PI_INDEX:
-        pSink = pThis->pSinkLineIn;
-        break;
-    case MC_INDEX:
-        pSink = pThis->pSinkMicIn;
-        break;
-    default:
-        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    switch (enmSource)
+    {
+        case PO_INDEX:
+            pSink = pThis->pSinkOutput;
+            break;
+        case PI_INDEX:
+            pSink = pThis->pSinkLineIn;
+            break;
+        case MC_INDEX:
+            pSink = pThis->pSinkMicIn;
+            break;
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+            break;
     }
 
     /* Set the volume. Codec already converted it to the correct range. */
@@ -2426,153 +3004,240 @@ static DECLCALLBACK(int) hdaSetVolume(PHDASTATE pThis, ENMSOUNDSOURCE enmSource,
     return rc;
 }
 
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+
 static DECLCALLBACK(void) hdaTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
 {
-    PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
+    PHDASTATE pThis = (PHDASTATE)pvUser;
+    Assert(pThis == PDMINS_2_DATA(pDevIns, PHDASTATE));
     AssertPtr(pThis);
 
     STAM_PROFILE_START(&pThis->StatTimer, a);
 
-    int rc = VINF_SUCCESS;
-
     uint32_t cbInMax  = 0;
     uint32_t cbOutMin = UINT32_MAX;
 
     PHDADRIVER pDrv;
 
-    uint32_t cbIn, cbOut, cSamplesLive;
+    uint64_t cTicksNow     = TMTimerGet(pTimer);
+    uint64_t cTicksElapsed = cTicksNow  - pThis->uTimerTS;
+    uint64_t cTicksPerSec  = TMTimerGetFreq(pTimer);
+
+    pThis->uTimerTS = cTicksNow;
+
     RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
     {
-        rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
-                                              &cbIn, &cbOut, &cSamplesLive);
+        uint32_t cbIn = 0;
+        uint32_t cbOut = 0;
+
+        int rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector, &cbIn, &cbOut, NULL /* pcSamplesLive */);
         if (RT_SUCCESS(rc))
+            rc = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, NULL /* pcSamplesPlayed */);
+
+#ifdef DEBUG_TIMER
+        LogFlowFunc(("LUN#%RU8: rc=%Rrc, cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, rc, cbIn, cbOut));
+#endif
+        const bool fIsActiveOut = pDrv->pConnector->pfnIsActiveOut(pDrv->pConnector, pDrv->Out.pStrmOut);
+
+        /* If we there was an error handling (available) output or there simply is no output available,
+         * then calculate the minimum data rate which must be processed by the device emulation in order
+         * to function correctly.
+         *
+         * This is not the optimal solution, but as we have to deal with this on a timer-based approach
+         * (until we have the audio callbacks) we need to have device' DMA engines running. */
+        if (   RT_FAILURE(rc)
+            || !fIsActiveOut)
         {
+            uint32_t cSamplesMin  = (int)((2 * cTicksElapsed * pDrv->Out.pStrmOut->Props.uHz + cTicksPerSec) / cTicksPerSec / 2);
+            uint32_t cbSamplesMin = AUDIOMIXBUF_S2B(&pDrv->Out.pStrmOut->MixBuf, cSamplesMin);
+
 #ifdef DEBUG_TIMER
-            LogFlowFunc(("\tLUN#%RU8: [1] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
+            LogFlowFunc(("\trc=%Rrc, cSamplesMin=%RU32, cbSamplesMin=%RU32\n", rc, cSamplesMin, cbSamplesMin));
 #endif
-            if (cSamplesLive)
-            {
-                uint32_t cSamplesPlayed;
-                int rc2 = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, &cSamplesPlayed);
-                if (RT_SUCCESS(rc2))
-                    LogFlowFunc(("LUN#%RU8: cSamplesLive=%RU32, cSamplesPlayed=%RU32\n",
-                                 pDrv->uLUN, cSamplesLive, cSamplesPlayed));
-
-                rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
-                                                      &cbIn, &cbOut, &cSamplesLive);
+            cbOut = RT_MAX(cbOut, cbSamplesMin);
+        }
+
+        cbOutMin = RT_MIN(cbOutMin, cbOut);
+        cbInMax  = RT_MAX(cbInMax, cbIn);
+    }
+
 #ifdef DEBUG_TIMER
-                if (RT_SUCCESS(rc))
-                    LogFlowFunc(("\tLUN#%RU8: [2] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
+    LogFlowFunc(("cbInMax=%RU32, cbOutMin=%RU32\n", cbInMax, cbOutMin));
 #endif
-            }
 
-            cbInMax  = RT_MAX(cbInMax, cbIn);
-            cbOutMin = RT_MIN(cbOutMin, cbOut);
-        }
-    }
+    if (cbOutMin == UINT32_MAX)
+        cbOutMin = 0;
+
+    /* Do the actual device transfers. */
+    hdaTransfer(pThis, PO_INDEX, cbOutMin /* cbToProcess */, NULL /* pcbProcessed */);
+    hdaTransfer(pThis, PI_INDEX, cbInMax  /* cbToProcess */, NULL /* pcbProcessed */);
+
+    /* Kick the timer again. */
+    uint64_t cTicks = pThis->cTimerTicks;
+    /** @todo adjust cTicks down by now much cbOutMin represents. */
+    TMTimerSet(pThis->pTimer, cTicksNow + cTicks);
+
+    STAM_PROFILE_STOP(&pThis->StatTimer, a);
+}
+
+#else /* VBOX_WITH_AUDIO_CALLBACKS */
+
+static DECLCALLBACK(int) hdaCallbackInput(PDMAUDIOCALLBACKTYPE enmType, void *pvCtx, size_t cbCtx, void *pvUser, size_t cbUser)
+{
+    Assert(enmType == PDMAUDIOCALLBACKTYPE_INPUT);
+    AssertPtrReturn(pvCtx,  VERR_INVALID_POINTER);
+    AssertReturn(cbCtx,     VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pvUser, VERR_INVALID_POINTER);
+    AssertReturn(cbUser,    VERR_INVALID_PARAMETER);
+
+    PHDACALLBACKCTX pCtx = (PHDACALLBACKCTX)pvCtx;
+    AssertReturn(cbCtx == sizeof(HDACALLBACKCTX), VERR_INVALID_PARAMETER);
 
-#ifdef DEBUG_TIMER
-    LogFlowFunc(("cbInMax=%RU32, cbOutMin=%RU32\n", cbInMax, cbOutMin));
-#endif
+    PPDMAUDIOCALLBACKDATAIN pData = (PPDMAUDIOCALLBACKDATAIN)pvUser;
+    AssertReturn(cbUser == sizeof(PDMAUDIOCALLBACKDATAIN), VERR_INVALID_PARAMETER);
 
-    if (cbOutMin == UINT32_MAX)
-        cbOutMin = 0;
+    return hdaTransfer(pCtx->pThis, PI_INDEX, UINT32_MAX, &pData->cbOutRead);
+}
 
-    /*
-     * Playback.
-     */
-    if (cbOutMin)
-    {
-        Assert(cbOutMin != UINT32_MAX);
-        hdaTransfer(pThis, PO_INDEX, cbOutMin); /** @todo Add rc! */
-    }
+static DECLCALLBACK(int) hdaCallbackOutput(PDMAUDIOCALLBACKTYPE enmType, void *pvCtx, size_t cbCtx, void *pvUser, size_t cbUser)
+{
+    Assert(enmType == PDMAUDIOCALLBACKTYPE_OUTPUT);
+    AssertPtrReturn(pvCtx,  VERR_INVALID_POINTER);
+    AssertReturn(cbCtx,     VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pvUser, VERR_INVALID_POINTER);
+    AssertReturn(cbUser,    VERR_INVALID_PARAMETER);
 
-    /*
-     * Recording.
-     */
-    if (cbInMax)
-        hdaTransfer(pThis, PI_INDEX, cbInMax); /** @todo Add rc! */
+    PHDACALLBACKCTX pCtx = (PHDACALLBACKCTX)pvCtx;
+    AssertReturn(cbCtx == sizeof(HDACALLBACKCTX), VERR_INVALID_PARAMETER);
 
-    TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->uTicks);
+    PPDMAUDIOCALLBACKDATAOUT pData = (PPDMAUDIOCALLBACKDATAOUT)pvUser;
+    AssertReturn(cbUser == sizeof(PDMAUDIOCALLBACKDATAOUT), VERR_INVALID_PARAMETER);
 
-    STAM_PROFILE_STOP(&pThis->StatTimer, a);
+    PHDASTATE pThis = pCtx->pThis;
+
+    int rc = hdaTransfer(pCtx->pThis, PO_INDEX, UINT32_MAX, &pData->cbOutWritten);
+    if (   RT_SUCCESS(rc)
+        && pData->cbOutWritten)
+    {
+        PHDADRIVER pDrv;
+        RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
+        {
+            uint32_t cSamplesPlayed;
+            int rc2 = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, &cSamplesPlayed);
+            LogFlowFunc(("LUN#%RU8: cSamplesPlayed=%RU32, rc=%Rrc\n", pDrv->uLUN, cSamplesPlayed, rc2));
+        }
+    }
 }
+#endif /* VBOX_WITH_AUDIO_CALLBACKS */
 
-static int hdaTransfer(PHDASTATE pThis,
-                       ENMSOUNDSOURCE enmSrc, uint32_t cbAvail)
+static int hdaTransfer(PHDASTATE pThis, ENMSOUNDSOURCE enmSrc, uint32_t cbToProcess, uint32_t *pcbProcessed)
 {
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+    /* pcbProcessed is optional. */
 
-    LogFlowFunc(("pThis=%p, cbAvail=%RU32\n", pThis, cbAvail));
+    LogFlowFunc(("enmSrc=%RU32, cbToProcess=%RU32\n", enmSrc, cbToProcess));
+
+    if (ASMAtomicReadBool(&pThis->fInReset)) /* HDA controller in reset mode? Bail out. */
+    {
+        LogFlowFunc(("In reset mode, skipping\n"));
 
-    uint8_t      u8Strm;
-    PHDABDLEDESC pBdle;
+        if (pcbProcessed)
+            *pcbProcessed = 0;
+        return VINF_SUCCESS;
+    }
 
+    PHDASTREAM pStrmSt;
     switch (enmSrc)
     {
         case PI_INDEX:
         {
-            u8Strm = 0;
-            pBdle = &pThis->StInBdle;
+            pStrmSt = &pThis->StrmStLineIn;
             break;
         }
 
 #ifdef VBOX_WITH_HDA_MIC_IN
         case MC_INDEX:
         {
-            u8Strm = 2;
-            pBdle = &pThis->StMicBdle;
+            pStrmSt = &pThis->StrmStMicIn;
             break;
         }
 #endif
         case PO_INDEX:
         {
-            u8Strm = 4;
-            pBdle = &pThis->StOutBdle;
+            pStrmSt = &pThis->StrmStOut;
             break;
         }
 
         default:
+        {
             AssertMsgFailed(("Unknown source index %ld\n", enmSrc));
             return VERR_NOT_SUPPORTED;
+        }
     }
 
-    HDASTREAMTRANSFERDESC StreamDesc;
-    hdaInitTransferDescriptor(pThis, pBdle, u8Strm, &StreamDesc);
+    int  rc       = VINF_SUCCESS;
+    bool fProceed = true;
+
+    /* Stop request received? */
+    if (ASMAtomicReadBool(&pStrmSt->State.fDoStop))
+    {
+        pStrmSt->State.fActive = false;
+
+        rc = RTSemEventSignal(pStrmSt->State.hStateChangedEvent);
+        AssertRC(rc);
 
-    int rc = VINF_EOF;
-    while (cbAvail)
+        fProceed = false;
+    }
+    /* Is the stream not in a running state currently? */
+    else if (!(HDA_STREAM_REG(pThis, CTL, pStrmSt->u8Strm) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)))
+        fProceed = false;
+    /* There must be BDLEs defined in order to have a working stream. */
+    else if (pStrmSt->State.cBDLE == 0)
+        fProceed = false;
+    /* Nothing to process? */
+    else if (!cbToProcess)
+        fProceed = false;
+
+    if (!fProceed)
     {
-        Assert(   (StreamDesc.u32Ctl & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN))
-               && cbAvail
-               && StreamDesc.u64BaseDMA);
+        if (pcbProcessed)
+            *pcbProcessed = 0;
+        return VINF_SUCCESS;
+    }
+
+    /* Sanity checks. */
+    Assert(pStrmSt->u8Strm <= 7); /** @todo Use a define for MAX_STREAMS! */
+    Assert(pStrmSt->u64BaseDMA);
+    Assert(pStrmSt->u32CBL);
 
-        /* Fetch the Buffer Descriptor Entry (BDE). */
-        if (hdaIsTransferCountersOverlapped(pThis, pBdle, &StreamDesc))
-            hdaFetchBdle(pThis, pBdle, &StreamDesc);
+    /* State sanity checks. */
+    AssertPtr(pStrmSt->State.paBDLE);
+    Assert(ASMAtomicReadBool(&pStrmSt->State.fInReset) == false);
 
-        *StreamDesc.pu32Sts |= HDA_REG_FIELD_FLAG_MASK(SDSTS, FIFORDY);
-        Assert((StreamDesc.u32Cbl >= (*StreamDesc.pu32Lpib))); /* sanity */
-        uint32_t u32CblLimit = StreamDesc.u32Cbl - (*StreamDesc.pu32Lpib);
-        Assert((u32CblLimit > hdaFifoWToSz(pThis, &StreamDesc)));
+    uint32_t cbProcessedTotal = 0;
+    bool     fIsComplete      = false;
 
-        LogFunc(("CBL=%RU32, LPIB=%RU32\n", StreamDesc.u32Cbl, *StreamDesc.pu32Lpib));
+    while (cbToProcess)
+    {
+        /* Do we need to fetch the next Buffer Descriptor Entry (BDLE)? */
+        if (hdaStreamNeedsNextBDLE(pThis, pStrmSt))
+            hdaStreamGetNextBDLE(pThis, pStrmSt);
+
+        /* Set the FIFORDY bit on the stream while doing the transfer. */
+        HDA_STREAM_REG(pThis, STS, pStrmSt->u8Strm) |= HDA_REG_FIELD_FLAG_MASK(SDSTS, FIFORDY);
 
-        PAUDMIXSINK pSink;
-        uint32_t cbWritten = 0;
+        uint32_t cbProcessed;
         switch (enmSrc)
         {
             case PI_INDEX:
-                pSink = pThis->pSinkLineIn;
-                rc = hdaReadAudio(pThis, pSink, &StreamDesc, u32CblLimit, &cbAvail, &cbWritten);
+                rc = hdaReadAudio(pThis, pStrmSt, pThis->pSinkLineIn, cbToProcess, &cbProcessed);
                 break;
             case PO_INDEX:
-                rc = hdaWriteAudio(pThis, &StreamDesc, u32CblLimit, &cbAvail, &cbWritten);
+                rc = hdaWriteAudio(pThis, pStrmSt, cbToProcess, &cbProcessed);
                 break;
 #ifdef VBOX_WITH_HDA_MIC_IN
             case MC_INDEX:
-                pSink = pThis->pSinkMicIn;
-                rc = hdaReadAudio(pThis, pSink, &StreamDesc, u32CblLimit, &cbAvail, &cbWritten);
+                rc = hdaReadAudio(pThis, pStrmSt, pThis->pSinkMicIn, cbToProcess, &cbProcessed);
                 break;
 #endif
             default:
@@ -2580,22 +3245,38 @@ static int hdaTransfer(PHDASTATE pThis,
                 rc = VERR_NOT_SUPPORTED;
                 break;
         }
-        Assert(cbWritten <= StreamDesc.u32Fifos + 1);
-        *StreamDesc.pu32Sts &= ~HDA_REG_FIELD_FLAG_MASK(SDSTS, FIFORDY);
 
-        /* Process end of buffer condition. */
-        hdaStreamCounterUpdate(pThis, pBdle, &StreamDesc, cbWritten);
+        /* Remove the FIFORDY bit again. */
+        HDA_STREAM_REG(pThis, STS, pStrmSt->u8Strm) &= ~HDA_REG_FIELD_FLAG_MASK(SDSTS, FIFORDY);
 
-        if (!hdaDoNextTransferCycle(pThis, pBdle, &StreamDesc))
+        if (RT_FAILURE(rc))
             break;
 
-        if (   RT_FAILURE(rc)
-            || rc == VINF_EOF) /* All data processed? */
-        {
+        hdaStreamTransferUpdate(pThis, pStrmSt, cbProcessed);
+
+        cbToProcess      -= RT_MIN(cbToProcess,  cbProcessed);
+        cbProcessedTotal += cbProcessed;
+
+        LogFlowFunc(("cbProcessed=%RU32, cbToProcess=%RU32, cbProcessedTotal=%RU32, rc=%Rrc\n",
+                     cbProcessed, cbToProcess, cbProcessedTotal, rc));
+
+        if (rc == VINF_EOF)
+            fIsComplete = true;
+
+        if (!fIsComplete)
+            fIsComplete = hdaStreamTransferIsComplete(pThis, pStrmSt);
+
+        if (fIsComplete)
             break;
-        }
     }
 
+    if (RT_SUCCESS(rc))
+    {
+        if (pcbProcessed)
+            *pcbProcessed = cbProcessedTotal;
+    }
+
+    LogFlowFuncLeaveRC(rc);
     return rc;
 }
 #endif /* IN_RING3 */
@@ -2625,15 +3306,13 @@ PDMBOTHCBDECL(int) hdaMMIORead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhys
 #endif
 
     LogFunc(("offReg=%#x cb=%#x\n", offReg, cb));
-#define NEW_READ_CODE
-#ifdef NEW_READ_CODE
     Assert(cb == 4); Assert((offReg & 3) == 0);
 
     if (pThis->fInReset && idxRegDsc != HDA_REG_GCTL)
-        LogFunc(("access to registers except GCTL is blocked while reset\n"));
+        LogFunc(("\tAccess to registers except GCTL is blocked while reset\n"));
 
     if (idxRegDsc == -1)
-        LogRel(("Invalid read access @0x%x(of bytes:%d)\n", offReg, cb));
+        LogRel(("HDA: Invalid read access @0x%x (bytes=%d)\n", offReg, cb));
 
     if (idxRegDsc != -1)
     {
@@ -2644,7 +3323,7 @@ PDMBOTHCBDECL(int) hdaMMIORead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhys
              * Straight forward DWORD access.
              */
             rc = g_aHdaRegMap[idxRegDsc].pfnRead(pThis, idxRegDsc, (uint32_t *)pv);
-            LogFunc(("read %s => %x (%Rrc)\n", g_aHdaRegMap[idxRegDsc].abbrev, *(uint32_t *)pv, rc));
+            LogFunc(("\tRead %s => %x (%Rrc)\n", g_aHdaRegMap[idxRegDsc].abbrev, *(uint32_t *)pv, rc));
         }
         else
         {
@@ -2660,7 +3339,7 @@ PDMBOTHCBDECL(int) hdaMMIORead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhys
                 uint32_t        u32Tmp       = 0;
 
                 rc = g_aHdaRegMap[idxRegDsc].pfnRead(pThis, idxRegDsc, &u32Tmp);
-                LogFunc(("read %s[%db] => %x (%Rrc)*\n", g_aHdaRegMap[idxRegDsc].abbrev, cbReg, u32Tmp, rc));
+                LogFunc(("\tRead %s[%db] => %x (%Rrc)*\n", g_aHdaRegMap[idxRegDsc].abbrev, cbReg, u32Tmp, rc));
                 if (rc != VINF_SUCCESS)
                     break;
                 u32Value |= (u32Tmp & g_afMasks[cbReg]) << ((4 - cbLeft) * 8);
@@ -2679,64 +3358,19 @@ PDMBOTHCBDECL(int) hdaMMIORead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhys
     else
     {
         rc = VINF_IOM_MMIO_UNUSED_FF;
-        LogFunc(("hole at %x is accessed for read\n", offReg));
-    }
-#else
-    if (idxRegDsc != -1)
-    {
-        /** @todo r=bird: Accesses crossing register boundraries aren't handled
-         *        right from what I can tell?  If they are, please explain
-         *        what the rules are. */
-        uint32_t mask = 0;
-        uint32_t shift = (g_aHdaRegMap[idxRegDsc].offset - offReg) % sizeof(uint32_t) * 8;
-        uint32_t u32Value = 0;
-        switch(cb)
-        {
-            case 1: mask = 0x000000ff; break;
-            case 2: mask = 0x0000ffff; break;
-            case 4:
-            /* 18.2 of the ICH6 datasheet defines the valid access widths as byte, word, and double word */
-            case 8:
-                mask = 0xffffffff;
-                cb = 4;
-                break;
-        }
-#if 0
-        /* Cross-register access. Mac guest hits this assert doing assumption 4 byte access to 3 byte registers e.g. {I,O}SDnCTL
-         */
-        //Assert((cb <= g_aHdaRegMap[idxRegDsc].size - (offReg - g_aHdaRegMap[idxRegDsc].offset)));
-        if (cb > g_aHdaRegMap[idxRegDsc].size - (offReg - g_aHdaRegMap[idxRegDsc].offset))
-        {
-            int off = cb - (g_aHdaRegMap[idxRegDsc].size - (offReg - g_aHdaRegMap[idxRegDsc].offset));
-            rc = hdaMMIORead(pDevIns, pvUser, GCPhysAddr + cb - off, (char *)pv + cb - off, off);
-            if (RT_FAILURE(rc))
-                AssertRCReturn (rc, rc);
-        }
-        //Assert(((offReg - g_aHdaRegMap[idxRegDsc].offset) == 0));
-#endif
-        mask <<= shift;
-        rc = g_aHdaRegMap[idxRegDsc].pfnRead(pThis, idxRegDsc, &u32Value);
-        *(uint32_t *)pv |= (u32Value & mask);
-        LogFunc(("read %s[%x/%x]\n", g_aHdaRegMap[idxRegDsc].abbrev, u32Value, *(uint32_t *)pv));
-    }
-    else
-    {
-        *(uint32_t *)pv = 0xFF;
-        LogFunc(("hole at %x is accessed for read\n", offReg));
-        rc = VINF_SUCCESS;
+        LogFunc(("\tHole at %x is accessed for read\n", offReg));
     }
-#endif
 
     /*
      * Log the outcome.
      */
 #ifdef LOG_ENABLED
     if (cbLog == 4)
-        LogFunc(("@%#05x -> %#010x %Rrc\n", offRegLog, *(uint32_t *)pv, rc));
+        LogFunc(("\tReturning @%#05x -> %#010x %Rrc\n", offRegLog, *(uint32_t *)pv, rc));
     else if (cbLog == 2)
-        LogFunc(("@%#05x -> %#06x %Rrc\n", offRegLog, *(uint16_t *)pv, rc));
+        LogFunc(("\tReturning @%#05x -> %#06x %Rrc\n", offRegLog, *(uint16_t *)pv, rc));
     else if (cbLog == 1)
-        LogFunc(("@%#05x -> %#04x %Rrc\n", offRegLog, *(uint8_t *)pv, rc));
+        LogFunc(("\tReturning @%#05x -> %#04x %Rrc\n", offRegLog, *(uint8_t *)pv, rc));
 #endif
     return rc;
 }
@@ -2753,7 +3387,7 @@ DECLINLINE(int) hdaWriteReg(PHDASTATE pThis, int idxRegDsc, uint32_t u32Value, c
 #endif
     int rc = g_aHdaRegMap[idxRegDsc].pfnWrite(pThis, idxRegDsc, u32Value);
     LogFunc(("write %#x -> %s[%db]; %x => %x%s\n", u32Value, g_aHdaRegMap[idxRegDsc].abbrev,
-         g_aHdaRegMap[idxRegDsc].size, u32CurValue, pThis->au32Regs[idxRegMem], pszLog));
+             g_aHdaRegMap[idxRegDsc].size, u32CurValue, pThis->au32Regs[idxRegMem], pszLog));
     return rc;
 }
 
@@ -2789,13 +3423,11 @@ PDMBOTHCBDECL(int) hdaMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhy
     else
     {
         u64Value = 0;   /* shut up gcc. */
-        AssertReleaseMsgFailed(("%d\n", cb));
+        AssertReleaseMsgFailed(("%u\n", cb));
     }
 
 #ifdef LOG_ENABLED
     uint32_t const u32LogOldValue = idxRegDsc >= 0 ? pThis->au32Regs[idxRegMem] : UINT32_MAX;
-    uint32_t const offRegLog = offReg;
-    int      const idxRegLog = idxRegMem;
     if (idxRegDsc == -1)
         LogFunc(("@%#05x u32=%#010x cb=%d\n", offReg, *(uint32_t const *)pv, cb));
     else if (cb == 4)
@@ -2804,30 +3436,32 @@ PDMBOTHCBDECL(int) hdaMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhy
         LogFunc(("@%#05x u16=%#06x (%#010x) %s\n", offReg, *(uint16_t *)pv, *(uint32_t *)pv, g_aHdaRegMap[idxRegDsc].abbrev));
     else if (cb == 1)
         LogFunc(("@%#05x u8=%#04x (%#010x) %s\n", offReg, *(uint8_t *)pv, *(uint32_t *)pv, g_aHdaRegMap[idxRegDsc].abbrev));
+
     if (idxRegDsc >= 0 && g_aHdaRegMap[idxRegDsc].size != cb)
-        LogFunc(("size=%d != cb=%d!!\n", g_aHdaRegMap[idxRegDsc].size, cb));
+        LogFunc(("\tsize=%RU32 != cb=%u!!\n", g_aHdaRegMap[idxRegDsc].size, cb));
 #endif
 
-#define NEW_WRITE_CODE
-#ifdef NEW_WRITE_CODE
     /*
      * Try for a direct hit first.
      */
     if (idxRegDsc != -1 && g_aHdaRegMap[idxRegDsc].size == cb)
     {
         rc = hdaWriteReg(pThis, idxRegDsc, u64Value, "");
-        LogFunc(("@%#05x %#x -> %#x\n", offRegLog, u32LogOldValue,
-             idxRegLog != -1 ? pThis->au32Regs[idxRegLog] : UINT32_MAX));
+#ifdef LOG_ENABLED
+        LogFunc(("\t%#x -> %#x\n", u32LogOldValue, idxRegMem != UINT32_MAX ? pThis->au32Regs[idxRegMem] : UINT32_MAX));
+#endif
     }
     /*
      * Partial or multiple register access, loop thru the requested memory.
      */
     else
     {
-        /* If it's an access beyond the start of the register, shift the input
-           value and fill in missing bits. Natural alignment rules means we
-           will only see 1 or 2 byte accesses of this kind, so no risk of
-           shifting out input values. */
+        /*
+         * If it's an access beyond the start of the register, shift the input
+         * value and fill in missing bits. Natural alignment rules means we
+         * will only see 1 or 2 byte accesses of this kind, so no risk of
+         * shifting out input values.
+         */
         if (idxRegDsc == -1 && (idxRegDsc = hdaRegLookupWithin(pThis, offReg)) != -1)
         {
             uint32_t const cbBefore = offReg - g_aHdaRegMap[idxRegDsc].offset; Assert(cbBefore > 0 && cbBefore < 4);
@@ -2835,8 +3469,8 @@ PDMBOTHCBDECL(int) hdaMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhy
             idxRegMem = g_aHdaRegMap[idxRegDsc].mem_idx;
             u64Value <<= cbBefore * 8;
             u64Value  |= pThis->au32Regs[idxRegMem] & g_afMasks[cbBefore];
-            LogFunc(("Within register, supplied %u leading bits: %#llx -> %#llx ...\n",
-                 cbBefore * 8, ~g_afMasks[cbBefore] & u64Value, u64Value));
+            LogFunc(("\tWithin register, supplied %u leading bits: %#llx -> %#llx ...\n",
+                     cbBefore * 8, ~g_afMasks[cbBefore] & u64Value, u64Value));
         }
 
         /* Loop thru the write area, it may cover multiple registers. */
@@ -2851,17 +3485,16 @@ PDMBOTHCBDECL(int) hdaMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhy
                 if (cb < cbReg)
                 {
                     u64Value |= pThis->au32Regs[idxRegMem] & g_afMasks[cbReg] & ~g_afMasks[cb];
-                    LogFunc(("Supplying missing bits (%#x): %#llx -> %#llx ...\n",
-                         g_afMasks[cbReg] & ~g_afMasks[cb], u64Value & g_afMasks[cb], u64Value));
+                    LogFunc(("\tSupplying missing bits (%#x): %#llx -> %#llx ...\n",
+                             g_afMasks[cbReg] & ~g_afMasks[cb], u64Value & g_afMasks[cb], u64Value));
                 }
                 uint32_t u32LogOldVal = pThis->au32Regs[idxRegMem];
                 rc = hdaWriteReg(pThis, idxRegDsc, u64Value, "*");
-                LogFunc(("@%#05x %#x -> %#x\n", offRegLog, u32LogOldVal,
-                     pThis->au32Regs[idxRegMem]));
+                LogFunc(("\t%#x -> %#x\n", u32LogOldVal, pThis->au32Regs[idxRegMem]));
             }
             else
             {
-                LogRel(("HDA: Invalid write access @0x%x!\n", offReg));
+                LogRel(("HDA: Invalid write access @0x%x\n", offReg));
                 cbReg = 1;
             }
             if (rc != VINF_SUCCESS)
@@ -2869,7 +3502,7 @@ PDMBOTHCBDECL(int) hdaMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhy
             if (cbReg >= cb)
                 break;
 
-            /* advance */
+            /* Advance. */
             offReg += cbReg;
             cb     -= cbReg;
             u64Value >>= cbReg * 8;
@@ -2880,66 +3513,13 @@ PDMBOTHCBDECL(int) hdaMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhy
                 idxRegDsc++;
                 if (   (unsigned)idxRegDsc >= RT_ELEMENTS(g_aHdaRegMap)
                     || g_aHdaRegMap[idxRegDsc].offset != offReg)
+                {
                     idxRegDsc = -1;
+                }
             }
         }
     }
-#else
-    if (idxRegDsc != -1)
-    {
-        /** @todo r=bird: This looks like code for handling unaligned register
-         * accesses.  If it isn't, then add a comment explaining what you're
-         * trying to do here.  OTOH, if it is then it has the following
-         * issues:
-         *      -# You're calculating the wrong new value for the register.
-         *      -# You're not handling cross register accesses.  Imagine a
-         *       4-byte write starting at CORBCTL, or a 8-byte write.
-         *
-         * PS! consider dropping the 'offset' argument to pfnWrite/pfnRead as
-         * nobody seems to be using it and it just adds complexity when reading
-         * the code.
-         *
-         */
-        uint32_t u32CurValue = pThis->au32Regs[idxRegMem];
-        uint32_t u32NewValue;
-        uint32_t mask;
-        switch (cb)
-        {
-            case 1:
-                u32NewValue = *(uint8_t const *)pv;
-                mask = 0xff;
-                break;
-            case 2:
-                u32NewValue = *(uint16_t const *)pv;
-                mask = 0xffff;
-                break;
-            case 4:
-            case 8:
-                /* 18.2 of the ICH6 datasheet defines the valid access widths as byte, word, and double word */
-                u32NewValue = *(uint32_t const *)pv;
-                mask = 0xffffffff;
-                cb = 4;
-                break;
-            default:
-                AssertFailedReturn(VERR_INTERNAL_ERROR_4); /* shall not happen. */
-        }
-        /* cross-register access, see corresponding comment in hdaMMIORead */
-        uint32_t shift = (g_aHdaRegMap[idxRegDsc].offset - offReg) % sizeof(uint32_t) * 8;
-        mask <<= shift;
-        u32NewValue <<= shift;
-        u32NewValue &= mask;
-        u32NewValue |= (u32CurValue & ~mask);
-
-        rc = g_aHdaRegMap[idxRegDsc].pfnWrite(pThis, idxRegDsc, u32NewValue);
-        LogFunc(("write %s:(%x) %x => %x\n", g_aHdaRegMap[idxRegDsc].abbrev, u32NewValue,
-             u32CurValue, pThis->au32Regs[idxRegMem]));
-    }
-    else
-        rc = VINF_SUCCESS;
 
-    LogFunc(("@%#05x %#x -> %#x\n", offRegLog, u32LogOldValue,
-         idxRegLog != -1 ? pThis->au32Regs[idxRegLog] : UINT32_MAX));
-#endif
     return rc;
 }
 
@@ -2966,12 +3546,8 @@ static DECLCALLBACK(int) hdaPciIoRegionMap(PPCIDEVICE pPciDev, int iRegion, RTGC
      */
     Assert(enmType == PCI_ADDRESS_SPACE_MEM);
     rc = PDMDevHlpMMIORegister(pDevIns, GCPhysAddress, cb, NULL /*pvUser*/,
-#ifdef NEW_READ_CODE
-                               IOMMMIO_FLAGS_READ_DWORD |
-#else
-                               IOMMMIO_FLAGS_READ_PASSTHRU |
-#endif
-                               IOMMMIO_FLAGS_WRITE_PASSTHRU,
+                                 IOMMMIO_FLAGS_READ_DWORD
+                               | IOMMMIO_FLAGS_WRITE_PASSTHRU,
                                hdaMMIOWrite, hdaMMIORead, "HDA");
 
     if (RT_FAILURE(rc))
@@ -3000,6 +3576,25 @@ static DECLCALLBACK(int) hdaPciIoRegionMap(PPCIDEVICE pPciDev, int iRegion, RTGC
 
 /* Saved state callbacks. */
 
+static int hdaSaveStream(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, PHDASTREAM pStrm)
+{
+    /* Save stream ID. */
+    int rc = SSMR3PutU8(pSSM, pStrm->u8Strm);
+    AssertRCReturn(rc, rc);
+    Assert(pStrm->u8Strm <= 7); /** @todo Use a define. */
+
+    rc = SSMR3PutStructEx(pSSM, &pStrm->State, sizeof(HDASTREAMSTATE), 0 /*fFlags*/, g_aSSMStreamStateFields5, NULL);
+    AssertRCReturn(rc, rc);
+
+    for (uint32_t i = 0; i < pStrm->State.cBDLE; i++)
+    {
+        rc = SSMR3PutStructEx(pSSM, &pStrm->State.paBDLE[i], sizeof(HDABDLE), 0 /*fFlags*/, g_aSSMBDLEStateFields5, NULL);
+        AssertRCReturn(rc, rc);
+    }
+
+    return rc;
+}
+
 /**
  * @callback_method_impl{FNSSMDEVSAVEEXEC}
  */
@@ -3007,19 +3602,26 @@ static DECLCALLBACK(int) hdaSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
     PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
 
-    /* Save Codec nodes states */
+    /* Save Codec nodes states. */
     hdaCodecSaveState(pThis->pCodec, pSSM);
 
-    /* Save MMIO registers */
+    /* Save MMIO registers. */
     AssertCompile(RT_ELEMENTS(pThis->au32Regs) >= HDA_NREGS_SAVED);
     SSMR3PutU32(pSSM, RT_ELEMENTS(pThis->au32Regs));
     SSMR3PutMem(pSSM, pThis->au32Regs, sizeof(pThis->au32Regs));
 
-    /* Save HDA dma counters */
-    SSMR3PutStructEx(pSSM, &pThis->StOutBdle, sizeof(pThis->StOutBdle), 0 /*fFlags*/, g_aHdaBDLEDescFields, NULL);
-    SSMR3PutStructEx(pSSM, &pThis->StMicBdle, sizeof(pThis->StMicBdle), 0 /*fFlags*/, g_aHdaBDLEDescFields, NULL);
-    SSMR3PutStructEx(pSSM, &pThis->StInBdle,  sizeof(pThis->StInBdle),  0 /*fFlags*/, g_aHdaBDLEDescFields, NULL);
-    return VINF_SUCCESS;
+    /* Save number of streams. */
+    SSMR3PutU32(pSSM, 3);
+
+    /* Save stream states. */
+    int rc = hdaSaveStream(pDevIns, pSSM, &pThis->StrmStOut);
+    AssertRCReturn(rc, rc);
+    rc = hdaSaveStream(pDevIns, pSSM, &pThis->StrmStMicIn);
+    AssertRCReturn(rc, rc);
+    rc = hdaSaveStream(pDevIns, pSSM, &pThis->StrmStLineIn);
+    AssertRCReturn(rc, rc);
+
+    return rc;
 }
 
 
@@ -3032,6 +3634,8 @@ static DECLCALLBACK(int) hdaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32
 
     Assert(uPass == SSM_PASS_FINAL); NOREF(uPass);
 
+    LogFlowFunc(("uVersion=%RU32, uPass=%RU32\n", uVersion, uPass));
+
     /*
      * Load Codec nodes states.
      */
@@ -3066,6 +3670,8 @@ static DECLCALLBACK(int) hdaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32
             AssertCompile(RT_ELEMENTS(pThis->au32Regs) >= HDA_NREGS_SAVED);
             break;
 
+        /* Since version 4 we store the register count to stay flexible. */
+        case HDA_SSM_VERSION_4:
         case HDA_SSM_VERSION:
             rc = SSMR3GetU32(pSSM, &cRegs); AssertRCReturn(rc, rc);
             if (cRegs != RT_ELEMENTS(pThis->au32Regs))
@@ -3085,40 +3691,161 @@ static DECLCALLBACK(int) hdaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32
         SSMR3GetMem(pSSM, pThis->au32Regs, sizeof(uint32_t) * cRegs);
 
     /*
-     * Load HDA DMA counters.
+     * Note: Saved states < v5 store LVI (u32BdleMaxCvi) for
+     *       *every* BDLE state, whereas it only needs to be stored
+     *       *once* for every stream. Most of the BDLE state we can
+     *       get out of the registers anyway, so just ignore those values.
+     *
+     *       Also, only the current BDLE was saved, regardless whether
+     *       there were more than one (and there are at least two entries,
+     *       according to the spec).
      */
-    uint32_t   fFlags   = uVersion <= HDA_SSM_VERSION_2 ? SSMSTRUCT_FLAGS_MEM_BAND_AID_RELAXED : 0;
-    PCSSMFIELD paFields = uVersion <= HDA_SSM_VERSION_2 ? g_aHdaBDLEDescFieldsOld              : g_aHdaBDLEDescFields;
-    rc = SSMR3GetStructEx(pSSM, &pThis->StOutBdle, sizeof(pThis->StOutBdle), fFlags, paFields, NULL);
-    AssertRCReturn(rc, rc);
-    rc = SSMR3GetStructEx(pSSM, &pThis->StMicBdle, sizeof(pThis->StMicBdle), fFlags, paFields, NULL);
-    AssertRCReturn(rc, rc);
-    rc = SSMR3GetStructEx(pSSM, &pThis->StInBdle, sizeof(pThis->StInBdle), fFlags, paFields, NULL);
-    AssertRCReturn(rc, rc);
+#define HDA_SSM_LOAD_BDLE_STATE_PRE_V5(v, x)                        \
+    rc = SSMR3Skip(pSSM, sizeof(uint32_t));    /* Begin marker */   \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3Skip(pSSM, sizeof(uint64_t));    /* u64BdleCviAddr */ \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3Skip(pSSM, sizeof(uint32_t));    /* u32BdleMaxCvi */  \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3GetU32(pSSM, &x->u32BDLIndex);   /* u32BdleCvi */     \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3Skip(pSSM, sizeof(uint32_t));    /* u32BdleCviLen */  \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3GetU32(pSSM, &x->u32BufOff);     /* u32BdleCviPos */  \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3Skip(pSSM, sizeof(uint8_t));     /* fBdleCviIoc */    \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3GetU32(pSSM, &x->cbBelowFIFOW);  /* cbUnderFifoW */   \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3GetMem(pSSM, &x->au8FIFO, sizeof(x->au8FIFO));        \
+    AssertRCReturn(rc, rc);                                         \
+    rc = SSMR3Skip(pSSM, sizeof(uint32_t));    /* End marker */     \
+    AssertRCReturn(rc, rc);                                         \
 
     /*
-     * Update stuff after the state changes.
+     * Load BDLEs (Buffer Descriptor List Entries) and DMA counters.
      */
-    bool fEnableIn    = RT_BOOL(SDCTL(pThis, 0) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
-#ifdef VBOX_WITH_HDA_MIC_IN
-    bool fEnableMicIn = RT_BOOL(SDCTL(pThis, 2) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
-#else
-    bool fEnableMicIn = fEnableIn; /* Mic In == Line In */
-#endif
-    bool fEnableOut   = RT_BOOL(SDCTL(pThis, 4) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
+    HDABDLESTATE StateBDLEDummy;
 
-    PHDADRIVER pDrv;
-    RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
+    switch (uVersion)
     {
-        rc = pDrv->pConnector->pfnEnableIn(pDrv->pConnector, pDrv->LineIn.pStrmIn, fEnableIn);
-        if (RT_FAILURE(rc))
-            break;
-        rc = pDrv->pConnector->pfnEnableIn(pDrv->pConnector, pDrv->MicIn.pStrmIn, fEnableMicIn);
-        if (RT_FAILURE(rc))
+        case HDA_SSM_VERSION_1:
+        case HDA_SSM_VERSION_2:
+        case HDA_SSM_VERSION_3:
+        case HDA_SSM_VERSION_4:
+        {
+            /* Only load the internal states.
+             * The rest will be initialized from the saved registers later. */
+
+            /* Note: Only the *current* BDLE for a stream was saved! */
+
+            /* Output */
+            rc = hdaStreamInit(pThis, &pThis->StrmStOut,    4 /* Stream number, hardcoded */);
+            AssertRCBreak(rc);
+            HDA_SSM_LOAD_BDLE_STATE_PRE_V5(uVersion, (   pThis->StrmStOut.State.cBDLE
+                                                      ? &pThis->StrmStOut.State.paBDLE[0].State : &StateBDLEDummy));
+            /* Microphone-In */
+            rc = hdaStreamInit(pThis, &pThis->StrmStMicIn,  2 /* Stream number, hardcoded */);
+            AssertRCBreak(rc);
+            HDA_SSM_LOAD_BDLE_STATE_PRE_V5(uVersion, (   pThis->StrmStMicIn.State.cBDLE
+                                                      ? &pThis->StrmStMicIn.State.paBDLE[0].State : &StateBDLEDummy));
+            /* Line-In */
+            rc = hdaStreamInit(pThis, &pThis->StrmStLineIn, 0 /* Stream number, hardcoded */);
+            AssertRCBreak(rc);
+            HDA_SSM_LOAD_BDLE_STATE_PRE_V5(uVersion, (  pThis->StrmStLineIn.State.cBDLE
+                                                      ? &pThis->StrmStLineIn.State.paBDLE[0].State : &StateBDLEDummy));
             break;
-        rc = pDrv->pConnector->pfnEnableOut(pDrv->pConnector, pDrv->Out.pStrmOut, fEnableOut);
-        if (RT_FAILURE(rc))
+        }
+
+        /* Since v5 we support flexible stream and BDLE counts. */
+        case HDA_SSM_VERSION:
+        {
+            uint32_t cStreams;
+            rc = SSMR3GetU32(pSSM, &cStreams);
+            AssertRCBreak(rc);
+
+            /* Load stream states. */
+            for (uint32_t i = 0; i < cStreams; i++)
+            {
+                uint8_t uStreamID;
+                rc = SSMR3GetU8(pSSM, &uStreamID);
+                AssertRCBreak(rc);
+
+                PHDASTREAM pStrm;
+                HDASTREAM  StreamDummy;
+
+                switch (uStreamID)
+                {
+                    case 0: /** @todo Use a define. */
+                        pStrm = &pThis->StrmStLineIn;
+                        break;
+
+                    case 2: /** @todo Use a define. */
+                        pStrm = &pThis->StrmStMicIn;
+                        break;
+
+                    case 4: /** @todo Use a define. */
+                        pStrm = &pThis->StrmStOut;
+                        break;
+
+                    default:
+                        pStrm = &StreamDummy;
+                        break;
+                }
+
+                rc = SSMR3GetStructEx(pSSM, &pStrm->State, sizeof(HDASTREAMSTATE), 0 /* fFlags */, g_aSSMStreamStateFields5, NULL);
+                AssertRCBreak(rc);
+
+                rc = hdaStreamInit(pThis, pStrm, uStreamID);
+                AssertRCBreak(rc);
+
+                /* Load BDLE states. */
+                for (uint32_t a = 0; a < pStrm->State.cBDLE; a++)
+                {
+                    rc = SSMR3GetStructEx(pSSM, &pStrm->State.paBDLE[a].State, sizeof(HDABDLESTATE),
+                                          0 /* fFlags */, g_aSSMBDLEStateFields5, NULL);
+                    AssertRCBreak(rc);
+                }
+
+                /* Destroy dummy again. */
+                if (pStrm == &StreamDummy)
+                    hdaStreamDestroy(pStrm);
+            }
             break;
+        }
+
+        default:
+            return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
+    }
+
+#undef HDA_SSM_LOAD_BDLE_STATE_PRE_V5
+
+    if (RT_SUCCESS(rc))
+    {
+        /*
+         * Update stuff after the state changes.
+         */
+        bool fEnableIn    = RT_BOOL(HDA_SDCTL(pThis, 0) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
+#ifdef VBOX_WITH_HDA_MIC_IN
+        bool fEnableMicIn = RT_BOOL(HDA_SDCTL(pThis, 2) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
+#else
+        bool fEnableMicIn = fEnableIn; /* Mic In == Line In */
+#endif
+        bool fEnableOut   = RT_BOOL(HDA_SDCTL(pThis, 4) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN));
+
+        PHDADRIVER pDrv;
+        RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
+        {
+            rc = pDrv->pConnector->pfnEnableIn(pDrv->pConnector, pDrv->LineIn.pStrmIn, fEnableIn);
+            if (RT_FAILURE(rc))
+                break;
+            rc = pDrv->pConnector->pfnEnableIn(pDrv->pConnector, pDrv->MicIn.pStrmIn, fEnableMicIn);
+            if (RT_FAILURE(rc))
+                break;
+            rc = pDrv->pConnector->pfnEnableOut(pDrv->pConnector, pDrv->Out.pStrmOut, fEnableOut);
+            if (RT_FAILURE(rc))
+                break;
+        }
     }
 
     if (RT_SUCCESS(rc))
@@ -3132,91 +3859,80 @@ static DECLCALLBACK(int) hdaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32
     return rc;
 }
 
-
+#ifdef DEBUG
 /* Debug and log type formatters. */
 
 /**
  * @callback_method_impl{FNRTSTRFORMATTYPE}
  */
-static DECLCALLBACK(size_t)
-hdaFormatStrmCtl(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
-                 const char *pszType, void const *pvValue,
-                 int cchWidth, int cchPrecision, unsigned fFlags,
-                 void *pvUser)
+static DECLCALLBACK(size_t) hdaDbgFmtBDLE(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
+                                           const char *pszType, void const *pvValue,
+                                           int cchWidth, int cchPrecision, unsigned fFlags,
+                                           void *pvUser)
+{
+    PHDABDLE pBDLE = (PHDABDLE)pvValue;
+    return RTStrFormat(pfnOutput,  pvArgOutput, NULL, 0,
+                       "BDLE(idx:%RU32, off:%RU32, fifow:%RU32, DMA[%RU32 bytes @ 0x%x])",
+                       pBDLE->State.u32BDLIndex, pBDLE->State.u32BufOff, pBDLE->State.cbBelowFIFOW, pBDLE->u32BufSize, pBDLE->u64BufAdr);
+}
+
+/**
+ * @callback_method_impl{FNRTSTRFORMATTYPE}
+ */
+static DECLCALLBACK(size_t) hdaDbgFmtSDCTL(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
+                                           const char *pszType, void const *pvValue,
+                                           int cchWidth, int cchPrecision, unsigned fFlags,
+                                           void *pvUser)
 {
-    uint32_t sdCtl = (uint32_t)(uintptr_t)pvValue;
+    uint32_t uSDCTL = (uint32_t)(uintptr_t)pvValue;
     return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
-                       "SDCTL(raw: %#x, strm:%#x, dir:%RTbool, tp:%RTbool strip:%x, deie:%RTbool, ioce:%RTbool, run:%RTbool, srst:%RTbool)",
-                       sdCtl,
-                       (sdCtl & HDA_REG_FIELD_MASK(SDCTL, NUM)) >> HDA_SDCTL_NUM_SHIFT,
-                       RT_BOOL(sdCtl & HDA_REG_FIELD_FLAG_MASK(SDCTL, DIR)),
-                       RT_BOOL(sdCtl & HDA_REG_FIELD_FLAG_MASK(SDCTL, TP)),
-                       (sdCtl & HDA_REG_FIELD_MASK(SDCTL, STRIPE)) >> HDA_SDCTL_STRIPE_SHIFT,
-                       RT_BOOL(sdCtl & HDA_REG_FIELD_FLAG_MASK(SDCTL, DEIE)),
-                       RT_BOOL(sdCtl & HDA_REG_FIELD_FLAG_MASK(SDCTL, ICE)),
-                       RT_BOOL(sdCtl & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)),
-                       RT_BOOL(sdCtl & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST)));
+                       "SDCTL(raw:%#x, DIR:%s, TP:%RTbool, STRIPE:%x, DEIE:%RTbool, FEIE:%RTbool, IOCE:%RTbool, RUN:%RTbool, RESET:%RTbool)",
+                       uSDCTL,
+                       (uSDCTL & HDA_REG_FIELD_FLAG_MASK(SDCTL, DIR)) ? "OUT" : "IN",
+                       RT_BOOL(uSDCTL & HDA_REG_FIELD_FLAG_MASK(SDCTL, TP)),
+                       (uSDCTL & HDA_REG_FIELD_MASK(SDCTL, STRIPE)) >> HDA_SDCTL_STRIPE_SHIFT,
+                       RT_BOOL(uSDCTL & HDA_REG_FIELD_FLAG_MASK(SDCTL, DEIE)),
+                       RT_BOOL(uSDCTL & HDA_REG_FIELD_FLAG_MASK(SDCTL, FEIE)),
+                       RT_BOOL(uSDCTL & HDA_REG_FIELD_FLAG_MASK(SDCTL, ICE)),
+                       RT_BOOL(uSDCTL & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)),
+                       RT_BOOL(uSDCTL & HDA_REG_FIELD_FLAG_MASK(SDCTL, SRST)));
 }
 
 /**
  * @callback_method_impl{FNRTSTRFORMATTYPE}
  */
-static DECLCALLBACK(size_t)
-hdaFormatStrmFifos(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
-                   const char *pszType, void const *pvValue,
-                   int cchWidth, int cchPrecision, unsigned fFlags,
-                   void *pvUser)
+static DECLCALLBACK(size_t) hdaDbgFmtSDFIFOS(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
+                                             const char *pszType, void const *pvValue,
+                                             int cchWidth, int cchPrecision, unsigned fFlags,
+                                             void *pvUser)
 {
-    uint32_t uSdFifos = (uint32_t)(uintptr_t)pvValue;
-    uint32_t cb;
-    switch (uSdFifos)
-    {
-        case HDA_SDONFIFO_16B:  cb = 16; break;
-        case HDA_SDONFIFO_32B:  cb = 32; break;
-        case HDA_SDONFIFO_64B:  cb = 64; break;
-        case HDA_SDONFIFO_128B: cb = 128; break;
-        case HDA_SDONFIFO_192B: cb = 192; break;
-        case HDA_SDONFIFO_256B: cb = 256; break;
-        case HDA_SDINFIFO_120B: cb = 120; break;
-        case HDA_SDINFIFO_160B: cb = 160; break;
-        default:                cb = 0; break;
-    }
-    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "SDFIFOS(raw: %#x, sdfifos:%u B)", uSdFifos, cb);
+    uint32_t uSDFIFOS = (uint32_t)(uintptr_t)pvValue;
+    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "SDFIFOS(raw:%#x, sdfifos:%RU8 B)", uSDFIFOS, hdaSDFIFOSToBytes(uSDFIFOS));
 }
 
 /**
  * @callback_method_impl{FNRTSTRFORMATTYPE}
  */
-static DECLCALLBACK(size_t)
-hdaFormatStrmFifow(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
-                   const char *pszType, void const *pvValue,
-                   int cchWidth, int cchPrecision, unsigned fFlags,
-                   void *pvUser)
+static DECLCALLBACK(size_t) hdaDbgFmtSDFIFOW(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
+                                             const char *pszType, void const *pvValue,
+                                             int cchWidth, int cchPrecision, unsigned fFlags,
+                                             void *pvUser)
 {
-    uint32_t uSdFifos = (uint32_t)(uintptr_t)pvValue;
-    uint32_t cb;
-    switch (uSdFifos)
-    {
-        case HDA_SDFIFOW_8B:  cb = 8;  break;
-        case HDA_SDFIFOW_16B: cb = 16; break;
-        case HDA_SDFIFOW_32B: cb = 32; break;
-        default:              cb = 0;  break;
-    }
-    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "SDFIFOW(raw: %#0x, sdfifow:%d B)", uSdFifos, cb);
+    uint32_t uSDFIFOW = (uint32_t)(uintptr_t)pvValue;
+    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "SDFIFOW(raw: %#0x, sdfifow:%d B)", uSDFIFOW, hdaSDFIFOWToBytes(uSDFIFOW));
 }
 
 /**
  * @callback_method_impl{FNRTSTRFORMATTYPE}
  */
-static DECLCALLBACK(size_t)
-hdaFormatStrmSts(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
-                 const char *pszType, void const *pvValue,
-                 int cchWidth, int cchPrecision, unsigned fFlags,
-                 void *pvUser)
+static DECLCALLBACK(size_t) hdaDbgFmtSDSTS(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
+                                           const char *pszType, void const *pvValue,
+                                           int cchWidth, int cchPrecision, unsigned fFlags,
+                                           void *pvUser)
 {
     uint32_t uSdSts = (uint32_t)(uintptr_t)pvValue;
     return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
-                       "SDSTS(raw: %#0x, fifordy:%RTbool, dese:%RTbool, fifoe:%RTbool, bcis:%RTbool)",
+                       "SDSTS(raw:%#0x, fifordy:%RTbool, dese:%RTbool, fifoe:%RTbool, bcis:%RTbool)",
                        uSdSts,
                        RT_BOOL(uSdSts & HDA_REG_FIELD_FLAG_MASK(SDSTS, FIFORDY)),
                        RT_BOOL(uSdSts & HDA_REG_FIELD_FLAG_MASK(SDSTS, DE)),
@@ -3224,7 +3940,6 @@ hdaFormatStrmSts(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
                        RT_BOOL(uSdSts & HDA_REG_FIELD_FLAG_MASK(SDSTS, BCIS)));
 }
 
-
 static int hdaLookUpRegisterByName(PHDASTATE pThis, const char *pszArgs)
 {
     int iReg = 0;
@@ -3243,7 +3958,6 @@ static void hdaDbgPrintRegister(PHDASTATE pThis, PCDBGFINFOHLP pHlp, int iHdaInd
     pHlp->pfnPrintf(pHlp, "%s: 0x%x\n", g_aHdaRegMap[iHdaIndex].abbrev, pThis->au32Regs[g_aHdaRegMap[iHdaIndex].mem_idx]);
 }
 
-
 /**
  * @callback_method_impl{FNDBGFHANDLERDEV}
  */
@@ -3258,7 +3972,6 @@ static DECLCALLBACK(void) hdaInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const
             hdaDbgPrintRegister(pThis, pHlp, iHdaRegisterIndex);
 }
 
-
 static void hdaDbgPrintStream(PHDASTATE pThis, PCDBGFINFOHLP pHlp, int iHdaStrmIndex)
 {
     Assert(   pThis
@@ -3271,14 +3984,12 @@ static void hdaDbgPrintStream(PHDASTATE pThis, PCDBGFINFOHLP pHlp, int iHdaStrmI
     pHlp->pfnPrintf(pHlp, "SD%dFIFOW: %R[sdfifow]\n", iHdaStrmIndex, HDA_STREAM_REG(pThis, FIFOW, iHdaStrmIndex));
 }
 
-
 static int hdaLookUpStreamIndex(PHDASTATE pThis, const char *pszArgs)
 {
     /* todo: add args parsing */
     return -1;
 }
 
-
 /**
  * @callback_method_impl{FNDBGFHANDLERDEV}
  */
@@ -3293,7 +4004,6 @@ static DECLCALLBACK(void) hdaInfoStream(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp,
             hdaDbgPrintStream(pThis, pHlp, iHdaStrmIndex);
 }
 
-
 /**
  * @callback_method_impl{FNDBGFHANDLERDEV}
  */
@@ -3307,7 +4017,6 @@ static DECLCALLBACK(void) hdaInfoCodecNodes(PPDMDEVINS pDevIns, PCDBGFINFOHLP pH
         pHlp->pfnPrintf(pHlp, "Codec implementation doesn't provide corresponding callback\n");
 }
 
-
 /**
  * @callback_method_impl{FNDBGFHANDLERDEV}
  */
@@ -3321,7 +4030,6 @@ static DECLCALLBACK(void) hdaInfoCodecSelector(PPDMDEVINS pDevIns, PCDBGFINFOHLP
         pHlp->pfnPrintf(pHlp, "Codec implementation doesn't provide corresponding callback\n");
 }
 
-
 /**
  * @callback_method_impl{FNDBGFHANDLERDEV}
  */
@@ -3334,7 +4042,7 @@ static DECLCALLBACK(void) hdaInfoMixer(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, c
     else
         pHlp->pfnPrintf(pHlp, "Mixer not available\n");
 }
-
+#endif /* DEBUG */
 
 /* PDMIBASE */
 
@@ -3365,19 +4073,22 @@ static DECLCALLBACK(void *) hdaQueryInterface(struct PDMIBASE *pInterface, const
 static DECLCALLBACK(void) hdaReset(PPDMDEVINS pDevIns)
 {
     PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
+
     HDA_REG(pThis, GCAP)     = HDA_MAKE_GCAP(4,4,0,0,1); /* see 6.2.1 */
-    HDA_REG(pThis, VMIN)     = 0x00;    /* see 6.2.2 */
-    HDA_REG(pThis, VMAJ)     = 0x01;    /* see 6.2.3 */
-    HDA_REG(pThis, OUTPAY)   = 0x003C;  /* see 6.2.4 */
-    HDA_REG(pThis, INPAY)    = 0x001D;  /* see 6.2.5 */
-    HDA_REG(pThis, CORBSIZE) = 0x42;    /* see 6.2.1 */
-    HDA_REG(pThis, RIRBSIZE) = 0x42;    /* see 6.2.1 */
+    HDA_REG(pThis, VMIN)     = 0x00;                     /* see 6.2.2 */
+    HDA_REG(pThis, VMAJ)     = 0x01;                     /* see 6.2.3 */
+    HDA_REG(pThis, OUTPAY)   = 0x003C;                   /* see 6.2.4 */
+    HDA_REG(pThis, INPAY)    = 0x001D;                   /* see 6.2.5 */
+    HDA_REG(pThis, CORBSIZE) = 0x42;                     /* see 6.2.1 */
+    HDA_REG(pThis, RIRBSIZE) = 0x42;                     /* see 6.2.1 */
     HDA_REG(pThis, CORBRP)   = 0x0;
     HDA_REG(pThis, RIRBWP)   = 0x0;
 
     LogFunc(("Resetting ...\n"));
 
-    /* Stop any audio currently playing. */
+    /*
+     * Stop any audio currently playing and/or recording.
+     */
     PHDADRIVER pDrv;
     RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
     {
@@ -3389,14 +4100,14 @@ static DECLCALLBACK(void) hdaReset(PPDMDEVINS pDevIns)
         /* Ditto. */
     }
 
-    pThis->cbCorbBuf = 256 * sizeof(uint32_t);
+    pThis->cbCorbBuf = 256 * sizeof(uint32_t); /** @todo Use a define here. */
 
     if (pThis->pu32CorbBuf)
         RT_BZERO(pThis->pu32CorbBuf, pThis->cbCorbBuf);
     else
         pThis->pu32CorbBuf = (uint32_t *)RTMemAllocZ(pThis->cbCorbBuf);
 
-    pThis->cbRirbBuf = 256 * sizeof(uint64_t);
+    pThis->cbRirbBuf = 256 * sizeof(uint64_t); /** @todo Use a define here. */
     if (pThis->pu64RirbBuf)
         RT_BZERO(pThis->pu64RirbBuf, pThis->cbRirbBuf);
     else
@@ -3404,33 +4115,49 @@ static DECLCALLBACK(void) hdaReset(PPDMDEVINS pDevIns)
 
     pThis->u64BaseTS = PDMDevHlpTMTimeVirtGetNano(pDevIns);
 
-    HDABDLEDESC StEmptyBdle;
-    for (uint8_t u8Strm = 0; u8Strm < 8; ++u8Strm)
+    /*
+     * Stop the timer, if any.
+     */
+    int rc2;
+    if (pThis->pTimer)
+    {
+        rc2 = TMTimerStop(pThis->pTimer);
+        AssertRC(rc2);
+    }
+
+    for (uint8_t u8Strm = 0; u8Strm < 8; u8Strm++) /** @todo Use a define here. */
     {
-        HDASTREAMTRANSFERDESC StreamDesc;
-        PHDABDLEDESC pBdle = NULL;
+        PHDASTREAM pStrmSt = NULL;
         if (u8Strm == 0)
-            pBdle = &pThis->StInBdle;
+            pStrmSt = &pThis->StrmStOut;
 # ifdef VBOX_WITH_HDA_MIC_IN
         else if (u8Strm == 2)
-            pBdle = &pThis->StMicBdle;
+            pStrmSt = &pThis->StrmStMicIn;
 # endif
-        else if(u8Strm == 4)
-            pBdle = &pThis->StOutBdle;
-        else
+        else if (u8Strm == 4)
+            pStrmSt = &pThis->StrmStLineIn;
+
+        if (pStrmSt)
         {
-            RT_ZERO(StEmptyBdle);
-            pBdle = &StEmptyBdle;
+            /* Remove the RUN bit from SDnCTL in case the stream was in a running state before. */
+            HDA_STREAM_REG(pThis, CTL, u8Strm) &= ~HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN);
+
+            hdaStreamReset(pThis, pStrmSt, u8Strm);
         }
-        hdaInitTransferDescriptor(pThis, pBdle, u8Strm, &StreamDesc);
-        /* hdaStreamReset prevents changing the SRST bit, so we force it to zero here. */
-        HDA_STREAM_REG(pThis, CTL, u8Strm) = 0;
-        hdaStreamReset(pThis, pBdle, &StreamDesc, u8Strm);
     }
 
     /* Emulation of codec "wake up" (HDA spec 5.5.1 and 6.5). */
     HDA_REG(pThis, STATESTS) = 0x1;
 
+    /*
+     * Start timer again, if any.
+     */
+    if (pThis->pTimer)
+    {
+        rc2 = TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->cTimerTicks);
+        AssertRC(rc2);
+    }
+
     LogRel(("HDA: Reset\n"));
 }
 
@@ -3471,6 +4198,10 @@ static DECLCALLBACK(int) hdaDestruct(PPDMDEVINS pDevIns)
     RTMemFree(pThis->pu64RirbBuf);
     pThis->pu64RirbBuf = NULL;
 
+    hdaStreamDestroy(&pThis->StrmStLineIn);
+    hdaStreamDestroy(&pThis->StrmStMicIn);
+    hdaStreamDestroy(&pThis->StrmStOut);
+
     return VINF_SUCCESS;
 }
 
@@ -3511,11 +4242,9 @@ static DECLCALLBACK(int) hdaAttach(PPDMDEVINS pDevIns, unsigned uLUN, uint32_t f
         if (pDrv)
         {
             pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pThis->pDrvBase, PDMIAUDIOCONNECTOR);
-            AssertMsg(pDrv->pConnector != NULL,
-                      ("Configuration error: LUN#%u has no host audio interface, rc=%Rrc\n",
-                      uLUN, rc));
-            pDrv->pHDAState = pThis;
-            pDrv->uLUN      = uLUN;
+            AssertMsg(pDrv->pConnector != NULL, ("Configuration error: LUN#%u has no host audio interface, rc=%Rrc\n", uLUN, rc));
+            pDrv->pHDAState  = pThis;
+            pDrv->uLUN       = uLUN;
 
             /*
              * For now we always set the driver at LUN 0 as our primary
@@ -3567,7 +4296,8 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
      * Validations.
      */
     if (!CFGMR3AreValuesValid(pCfgHandle, "R0Enabled\0"
-                                          "RCEnabled\0"))
+                                          "RCEnabled\0"
+                                          "TimerHz\0"))
         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
                                 N_ ("Invalid configuration for the Intel HDA device"));
 
@@ -3579,6 +4309,13 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("HDA configuration error: failed to read R0Enabled as boolean"));
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+    uint16_t uTimerHz;
+    rc = CFGMR3QueryU16Def(pCfgHandle, "TimerHz", &uTimerHz, 200 /* Hz */);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("HDA configuration error: failed to read Hertz (Hz) rate as unsigned integer"));
+#endif
 
     /*
      * Initialize data (most of it anyway).
@@ -3750,8 +4487,6 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
         }
     }
 
-    LogFunc(("cLUNs=%RU8, rc=%Rrc\n", uLUN, rc));
-
     if (RT_SUCCESS(rc))
     {
         /* Construct codec. */
@@ -3760,12 +4495,12 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
             return PDMDEV_SET_ERROR(pDevIns, VERR_NO_MEMORY, N_("Out of memory allocating HDA codec state"));
 
         /* Audio driver callbacks for multiplexing. */
-        pThis->pCodec->pfnDestroyIn  = hdaDestroyIn;
-        pThis->pCodec->pfnDestroyOut = hdaDestroyOut;
-        pThis->pCodec->pfnCreateIn   = hdaCreateIn;
-        pThis->pCodec->pfnCreateOut  = hdaCreateOut;
-        pThis->pCodec->pfnReset      = hdaCodecReset;
-        pThis->pCodec->pfnSetVolume  = hdaSetVolume;
+        pThis->pCodec->pfnCloseIn   = hdaCloseIn;
+        pThis->pCodec->pfnCloseOut  = hdaCloseOut;
+        pThis->pCodec->pfnOpenIn    = hdaOpenIn;
+        pThis->pCodec->pfnOpenOut   = hdaOpenOut;
+        pThis->pCodec->pfnReset     = hdaCodecReset;
+        pThis->pCodec->pfnSetVolume = hdaSetVolume;
 
         pThis->pCodec->pHDAState = pThis; /* Assign HDA controller state to codec. */
 
@@ -3784,6 +4519,18 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
 
     if (RT_SUCCESS(rc))
     {
+        rc = hdaStreamCreate(&pThis->StrmStLineIn);
+        AssertRC(rc);
+#ifdef VBOX_WITH_HDA_MIC_IN
+        rc = hdaStreamCreate(&pThis->StrmStMicIn);
+        AssertRC(rc);
+#endif
+        rc = hdaStreamCreate(&pThis->StrmStOut);
+        AssertRC(rc);
+    }
+
+    if (RT_SUCCESS(rc))
+    {
         hdaReset(pDevIns);
 
         /*
@@ -3793,6 +4540,7 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
         HDA_REG(pThis, WAKEEN)   = 0x0;
         HDA_REG(pThis, STATESTS) = 0x0;
 
+#ifdef DEBUG
         /*
          * Debug and string formatter types.
          */
@@ -3802,18 +4550,17 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
         PDMDevHlpDBGFInfoRegister(pDevIns, "hdcselector", "HDA codec's selector states [node number].",     hdaInfoCodecSelector);
         PDMDevHlpDBGFInfoRegister(pDevIns, "hdamixer",    "HDA mixer state.",                               hdaInfoMixer);
 
-        rc = RTStrFormatTypeRegister("sdctl",   hdaFormatStrmCtl,   NULL);
+        rc = RTStrFormatTypeRegister("bdle",    hdaDbgFmtBDLE,    NULL);
         AssertRC(rc);
-        rc = RTStrFormatTypeRegister("sdsts",   hdaFormatStrmSts,   NULL);
+        rc = RTStrFormatTypeRegister("sdctl",   hdaDbgFmtSDCTL,   NULL);
         AssertRC(rc);
-        rc = RTStrFormatTypeRegister("sdfifos", hdaFormatStrmFifos, NULL);
+        rc = RTStrFormatTypeRegister("sdsts",   hdaDbgFmtSDSTS,   NULL);
         AssertRC(rc);
-        rc = RTStrFormatTypeRegister("sdfifow", hdaFormatStrmFifow, NULL);
+        rc = RTStrFormatTypeRegister("sdfifos", hdaDbgFmtSDFIFOS, NULL);
         AssertRC(rc);
-    #if 0
-        rc = RTStrFormatTypeRegister("sdfmt", printHdaStrmFmt, NULL);
+        rc = RTStrFormatTypeRegister("sdfifow", hdaDbgFmtSDFIFOW, NULL);
         AssertRC(rc);
-    #endif
+#endif /* DEBUG */
 
         /*
          * Some debug assertions.
@@ -3846,7 +4593,7 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
                                      ("[%#x] = {%#x LB %#x}  vs. [%#x] = {%#x LB %#x}\n",
                                       i - 1, pPrevReg->offset, pPrevReg->size, i + 1, pReg->offset, pReg->size));
             }
-    #if 0
+#if 0
             if ((pReg->offset + pReg->size) & 3)
             {
                 AssertReleaseMsg(pNextReg, ("[%#x] = {%#x LB %#x}\n", i, pReg->offset, pReg->size));
@@ -3855,14 +4602,14 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
                                      ("[%#x] = {%#x LB %#x}  vs. [%#x] = {%#x LB %#x}\n",
                                       i, pReg->offset, pReg->size, i + 1,  pNextReg->offset, pNextReg->size));
             }
-    #endif
-
+#endif
             /* The final entry is a full DWORD, no gaps! Allows shortcuts. */
             AssertReleaseMsg(pNextReg || ((pReg->offset + pReg->size) & 3) == 0,
                              ("[%#x] = {%#x LB %#x}\n", i, pReg->offset, pReg->size));
         }
     }
 
+# ifndef VBOX_WITH_AUDIO_CALLBACKS
     if (RT_SUCCESS(rc))
     {
         /* Start the emulation timer. */
@@ -3872,17 +4619,45 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
 
         if (RT_SUCCESS(rc))
         {
-            /** @todo Investigate why sounds is getting corrupted if the "ticks" value is too
-             *        low, e.g. "PDMDevHlpTMTimeVirtGetFreq / 200". */
-            pThis->uTicks = PDMDevHlpTMTimeVirtGetFreq(pDevIns) / 500; /** @todo Make this configurable! */
-            if (pThis->uTicks < 100)
-                pThis->uTicks = 100;
-            LogFunc(("Timer ticks=%RU64\n", pThis->uTicks));
+            pThis->cTimerTicks = TMTimerGetFreq(pThis->pTimer) / uTimerHz;
+            pThis->uTimerTS    = TMTimerGet(pThis->pTimer);
+            LogFunc(("Timer ticks=%RU64 (%RU16 Hz)\n", pThis->cTimerTicks, uTimerHz));
 
             /* Fire off timer. */
-            TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->uTicks);
+            TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->cTimerTicks);
+        }
+    }
+# else
+    if (RT_SUCCESS(rc))
+    {
+        PHDADRIVER pDrv;
+        RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
+        {
+            /* Only register primary driver.
+             * The device emulation does the output multiplexing then. */
+            if (pDrv->Flags != PDMAUDIODRVFLAG_PRIMARY)
+                continue;
+
+            PDMAUDIOCALLBACK AudioCallbacks[2];
+
+            HDACALLBACKCTX Ctx = { pThis, pDrv };
+
+            AudioCallbacks[0].enmType     = PDMAUDIOCALLBACKTYPE_INPUT;
+            AudioCallbacks[0].pfnCallback = hdaCallbackInput;
+            AudioCallbacks[0].pvCtx       = &Ctx;
+            AudioCallbacks[0].cbCtx       = sizeof(HDACALLBACKCTX);
+
+            AudioCallbacks[1].enmType     = PDMAUDIOCALLBACKTYPE_OUTPUT;
+            AudioCallbacks[1].pfnCallback = hdaCallbackOutput;
+            AudioCallbacks[1].pvCtx       = &Ctx;
+            AudioCallbacks[1].cbCtx       = sizeof(HDACALLBACKCTX);
+
+            rc = pDrv->pConnector->pfnRegisterCallbacks(pDrv->pConnector, AudioCallbacks, RT_ELEMENTS(AudioCallbacks));
+            if (RT_FAILURE(rc))
+                break;
         }
     }
+# endif
 
 # ifdef VBOX_WITH_STATISTICS
     if (RT_SUCCESS(rc))
@@ -3890,7 +4665,9 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
         /*
          * Register statistics.
          */
+#  ifndef VBOX_WITH_AUDIO_CALLBACKS
         PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTimer,            STAMTYPE_PROFILE, "/Devices/HDA/Timer",             STAMUNIT_TICKS_PER_CALL, "Profiling hdaTimer.");
+#  endif
         PDMDevHlpSTAMRegister(pDevIns, &pThis->StatBytesRead,        STAMTYPE_COUNTER, "/Devices/HDA/BytesRead"   ,      STAMUNIT_BYTES,          "Bytes read from HDA emulation.");
         PDMDevHlpSTAMRegister(pDevIns, &pThis->StatBytesWritten,     STAMTYPE_COUNTER, "/Devices/HDA/BytesWritten",      STAMUNIT_BYTES,          "Bytes written to HDA emulation.");
     }
diff --git a/src/VBox/Devices/Audio/DevIchHdaCodec.cpp b/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
index 1d5dc24..ab846f5 100644
--- a/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
+++ b/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
@@ -2610,16 +2610,16 @@ int hdaCodecOpenStream(PHDACODEC pThis, ENMSOUNDSOURCE enmSoundSource, PPDMAUDIO
     switch (enmSoundSource)
     {
         case PI_INDEX:
-            rc = pThis->pfnCreateIn(pThis->pHDAState, "hda.in", PDMAUDIORECSOURCE_LINE_IN, pCfg);
+            rc = pThis->pfnOpenIn(pThis->pHDAState, "hda.in", PDMAUDIORECSOURCE_LINE_IN, pCfg);
             break;
 
         case PO_INDEX:
-            rc = pThis->pfnCreateOut(pThis->pHDAState, "hda.out", pCfg);
+            rc = pThis->pfnOpenOut(pThis->pHDAState, "hda.out", pCfg);
             break;
 
 #ifdef VBOX_WITH_HDA_MIC_IN
         case MC_INDEX:
-            rc = pThis->pfnCreateIn(pThis->pHDAState, "hda.mc", PDMAUDIORECSOURCE_MIC, pCfg);
+            rc = pThis->pfnOpenIn(pThis->pHDAState, "hda.mc", PDMAUDIORECSOURCE_MIC, pCfg);
             break;
 #endif
         default:
@@ -2661,6 +2661,8 @@ int hdaCodecLoadState(PHDACODEC pThis, PSSMHANDLE pSSM, uint32_t uVersion)
             fFlags  = SSMSTRUCT_FLAGS_MEM_BAND_AID_RELAXED;
             break;
 
+        /* Since version 4 a flexible node count is supported. */
+        case HDA_SSM_VERSION_4:
         case HDA_SSM_VERSION:
         {
             uint32_t cNodes;
diff --git a/src/VBox/Devices/Audio/DevIchHdaCodec.h b/src/VBox/Devices/Audio/DevIchHdaCodec.h
index e2b189a..0d494e3 100644
--- a/src/VBox/Devices/Audio/DevIchHdaCodec.h
+++ b/src/VBox/Devices/Audio/DevIchHdaCodec.h
@@ -110,10 +110,10 @@ typedef struct HDACODEC
     const uint8_t           u8DacLineOut;
 #endif
     /** Callbacks to the HDA controller, mostly used for multiplexing to the various host backends. */
-    DECLR3CALLBACKMEMBER(void, pfnDestroyIn, (PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource));
-    DECLR3CALLBACKMEMBER(void, pfnDestroyOut, (PHDASTATE pThis));
-    DECLR3CALLBACKMEMBER(int, pfnCreateIn, (PHDASTATE pThis, const char *pszName, PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg));
-    DECLR3CALLBACKMEMBER(int, pfnCreateOut, (PHDASTATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg));
+    DECLR3CALLBACKMEMBER(void, pfnCloseIn, (PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource));
+    DECLR3CALLBACKMEMBER(void, pfnCloseOut, (PHDASTATE pThis));
+    DECLR3CALLBACKMEMBER(int, pfnOpenIn, (PHDASTATE pThis, const char *pszName, PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg));
+    DECLR3CALLBACKMEMBER(int, pfnOpenOut, (PHDASTATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg));
     DECLR3CALLBACKMEMBER(int, pfnSetVolume, (PHDASTATE pThis, ENMSOUNDSOURCE enmSource, bool fMute, uint8_t uVolLeft, uint8_t uVolRight));
     /** Callbacks by codec implementation. */
     DECLR3CALLBACKMEMBER(int, pfnLookup, (PHDACODEC pThis, uint32_t verb, PPFNHDACODECVERBPROCESSOR));
@@ -130,10 +130,12 @@ int hdaCodecSaveState(PHDACODEC pThis, PSSMHANDLE pSSM);
 int hdaCodecLoadState(PHDACODEC pThis, PSSMHANDLE pSSM, uint32_t uVersion);
 int hdaCodecOpenStream(PHDACODEC pThis, PDMAUDIORECSOURCE enmRecSource, PDMAUDIOSTREAMCFG *pAudioSettings);
 
-#define HDA_SSM_VERSION   4
+#define HDA_SSM_VERSION   5
 #define HDA_SSM_VERSION_1 1
 #define HDA_SSM_VERSION_2 2
 #define HDA_SSM_VERSION_3 3
+/* Since this version the number of MMIO registers can be flexible. */
+#define HDA_SSM_VERSION_4 4
 
 # ifdef VBOX_WITH_HDA_CODEC_EMU
 /* */
diff --git a/src/VBox/Devices/Audio/DevSB16.cpp b/src/VBox/Devices/Audio/DevSB16.cpp
index cdffe3a..ca9f34e 100644
--- a/src/VBox/Devices/Audio/DevSB16.cpp
+++ b/src/VBox/Devices/Audio/DevSB16.cpp
@@ -54,6 +54,7 @@
 
 #include "VBoxDD.h"
 
+#include "AudioMixBuffer.h"
 #include "AudioMixer.h"
 
 /** Current saved state version. */
@@ -85,18 +86,8 @@ typedef struct SB16OUTPUTSTREAM
 typedef struct SB16STATE *PSB16STATE;
 typedef struct SB16DRIVER
 {
-    union
-    {
-        /** Node for storing this driver in our device driver
-         *  list of SB16STATE. */
-        RTLISTNODE                     Node;
-        struct
-        {
-            R3PTRTYPE(void *)          dummy1;
-            R3PTRTYPE(void *)          dummy2;
-        } dummy;
-    };
-
+    /** Node for storing this driver in our device driver list of SB16STATE. */
+    RTLISTNODER3                       Node;
     /** Pointer to SB16 controller (state). */
     R3PTRTYPE(PSB16STATE)              pSB16State;
     /** Driver flags. */
@@ -177,11 +168,15 @@ typedef struct SB16STATE
     R3PTRTYPE(PAUDIOMIXER)         pMixer;
     /** Audio sink for PCM output. */
     R3PTRTYPE(PAUDMIXSINK)         pSinkOutput;
-    /** The emulation timer for handling I/O of the attached LUN drivers. */
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+    /** The timer for pumping data thru the attached LUN drivers. */
     PTMTIMERR3                     pTimerIO;
-    /** Timer ticks for handling the LUN drivers. */
-    uint64_t                       uTicksIO;
-
+    /** The timer interval for pumping data thru the LUN drivers in timer ticks. */
+    uint64_t                       cTimerTicksIO;
+    /** Timestamp of the last timer callback (sb16TimerIO).
+     * Used to calculate the time actually elapsed between two timer callbacks. */
+    uint64_t                       uTimerTSIO;
+#endif
     PTMTIMER  pTimerIRQ;
     PPDMIBASE pDrvBase;
     /** LUN\#0: Base interface. */
@@ -1519,13 +1514,12 @@ static IO_READ_PROTO(mixer_read)
 static int sb16WriteAudio(PSB16STATE pThis, int nchan, uint32_t dma_pos,
                           uint32_t dma_len, int len)
 {
-    uint8_t     tmpbuf[_4K]; /** @todo Have a buffer on the heap. */
-    uint32_t    cbToWrite = len;
-    uint32_t    cbWrittenTotal = 0;
+    uint8_t  tmpbuf[_4K]; /** @todo Have a buffer on the heap. */
+    uint32_t cbToWrite = len;
+    uint32_t cbWrittenTotal = 0;
 
     while (cbToWrite)
     {
-        uint32_t cbWrittenMin = UINT32_MAX;
         uint32_t cbToRead;
         uint32_t cbRead;
 
@@ -1545,20 +1539,15 @@ static int sb16WriteAudio(PSB16STATE pThis, int nchan, uint32_t dma_pos,
         {
             int rc2 = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
                                                  tmpbuf, cbToRead, &cbWritten);
-            AssertRCBreak(rc);
-            if (RT_FAILURE(rc2))
-                continue;
-
-            cbWrittenMin = RT_MIN(cbWrittenMin, cbWritten);
-            LogFlowFunc(("\tLUN#%RU8: cbWritten=%RU32, cWrittenMin=%RU32\n", pDrv->uLUN, cbWritten, cbWrittenMin));
+            LogFlowFunc(("\tLUN#%RU8: rc=%Rrc, cbWritten=%RU32, cWrittenMin=%RU32\n", pDrv->uLUN, rc2, cbWritten));
         }
 
-        Assert(cbToWrite >= cbWrittenMin);
-        cbToWrite      -= cbWrittenMin;
-        dma_pos         = (dma_pos + cbWrittenMin) % dma_len;
-        cbWrittenTotal += cbWrittenMin;
+        Assert(cbToWrite >= cbToRead);
+        cbToWrite      -= cbToRead;
+        dma_pos         = (dma_pos + cbToRead) % dma_len;
+        cbWrittenTotal += cbToRead;
 
-        if (!cbRead || !cbWrittenMin)
+        if (!cbRead)
             break;
     }
 
@@ -1653,8 +1642,9 @@ static DECLCALLBACK(uint32_t) sb16DMARead(PPDMDEVINS pDevIns, void *opaque, unsi
 
 static DECLCALLBACK(void) sb16TimerIO(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
 {
-    PSB16STATE pThis = PDMINS_2_DATA(pDevIns, PSB16STATE);
-    AssertPtrReturnVoid(pThis);
+    PSB16STATE pThis = (PSB16STATE)pvUser;
+    Assert(pThis == PDMINS_2_DATA(pDevIns, PSB16STATE));
+    AssertPtr(pThis);
 
     int rc = VINF_SUCCESS;
 
@@ -1663,38 +1653,48 @@ static DECLCALLBACK(void) sb16TimerIO(PPDMDEVINS pDevIns, PTMTIMER pTimer, void
 
     PSB16DRIVER pDrv;
 
-    uint32_t cbIn, cbOut, cSamplesLive;
+    uint64_t cTicksNow     = TMTimerGet(pTimer);
+    uint64_t cTicksElapsed = cTicksNow  - pThis->uTimerTSIO;
+    uint64_t cTicksPerSec  = TMTimerGetFreq(pTimer);
+
+    pThis->uTimerTSIO = cTicksNow;
+
     RTListForEach(&pThis->lstDrv, pDrv, SB16DRIVER, Node)
     {
+        uint32_t cbIn = 0;
+        uint32_t cbOut = 0;
+
         rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
-                                              &cbIn, &cbOut, &cSamplesLive);
+                                              &cbIn, &cbOut, NULL /* cSamplesLive */);
         if (RT_SUCCESS(rc))
-        {
-            LogFlowFunc(("\tLUN#%RU8: [1] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
+            rc = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, NULL /* cSamplesPlayed */);
 
-            if (cSamplesLive)
-            {
-                uint32_t cSamplesPlayed;
-                int rc2 = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, &cSamplesPlayed);
-                if (RT_SUCCESS(rc2))
-                    LogFlowFunc(("LUN#%RU8: cSamplesLive=%RU32, cSamplesPlayed=%RU32\n",
-                                 pDrv->uLUN, cSamplesLive, cSamplesPlayed));
+        Log2Func(("LUN#%RU8: rc=%Rrc, cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, rc, cbIn, cbOut));
 
-                if (cSamplesPlayed)
-                {
-                    rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
-                                                          &cbIn, &cbOut, &cSamplesLive);
-                    if (RT_SUCCESS(rc))
-                        LogFlowFunc(("\tLUN#%RU8: [2] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
-                }
-            }
+        const bool fIsActiveOut = pDrv->pConnector->pfnIsActiveOut(pDrv->pConnector, pDrv->Out.pStrmOut);
 
-            cbInMax  = RT_MAX(cbInMax, cbIn);
-            cbOutMin = RT_MIN(cbOutMin, cbOut);
+        /* If we there was an error handling (available) output or there simply is no output available,
+         * then calculate the minimum data rate which must be processed by the device emulation in order
+         * to function correctly.
+         *
+         * This is not the optimal solution, but as we have to deal with this on a timer-based approach
+         * (until we have the audio callbacks) we need to have device' DMA engines running. */
+        if (   RT_FAILURE(rc)
+            || !fIsActiveOut)
+        {
+            uint32_t cSamplesMin  = (int)((2 * cTicksElapsed * pDrv->Out.pStrmOut->Props.uHz + cTicksPerSec) / cTicksPerSec / 2);
+            uint32_t cbSamplesMin = AUDIOMIXBUF_S2B(&pDrv->Out.pStrmOut->MixBuf, cSamplesMin);
+
+            Log2Func(("\trc=%Rrc, cSamplesMin=%RU32, cbSamplesMin=%RU32\n", rc, cSamplesMin, cbSamplesMin));
+
+            cbOut = RT_MAX(cbOut, cbSamplesMin);
         }
+
+        cbOutMin = RT_MIN(cbOutMin, cbOut);
+        cbInMax  = RT_MAX(cbInMax, cbIn);
     }
 
-    LogFlowFunc(("cbInMax=%RU32, cbOutMin=%RU32\n", cbInMax, cbOutMin));
+    Log2Func(("cbInMax=%RU32, cbOutMin=%RU32\n", cbInMax, cbOutMin));
 
     if (cbOutMin == UINT32_MAX)
         cbOutMin = 0;
@@ -1715,7 +1715,10 @@ static DECLCALLBACK(void) sb16TimerIO(PPDMDEVINS pDevIns, PTMTIMER pTimer, void
      */
     /** @todo Implement recording. */
 
-    TMTimerSet(pThis->pTimerIO, TMTimerGet(pThis->pTimerIO) + pThis->uTicksIO);
+    /* Kick the timer again. */
+    uint64_t cTicks = pThis->cTimerTicksIO;
+    /** @todo adjust cTicks down by now much cbOutMin represents. */
+    TMTimerSet(pThis->pTimerIO, cTicksNow + cTicks);
 }
 
 static void sb16Save(PSSMHANDLE pSSM, PSB16STATE pThis)
@@ -2044,7 +2047,6 @@ static DECLCALLBACK(int) sb16Destruct(PPDMDEVINS pDevIns)
 static DECLCALLBACK(int) sb16Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfgHandle)
 {
     PSB16STATE pThis = PDMINS_2_DATA(pDevIns, PSB16STATE);
-    int rc;
 
     /*
      * Validations.
@@ -2056,36 +2058,37 @@ static DECLCALLBACK(int) sb16Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
                               "DMA\0"
                               "DMA16\0"
                               "Port\0"
-                              "Version\0"))
+                              "Version\0"
+                              "TimerHz\0"))
         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
-                                N_("Invalid configuration for sb16 device"));
+                                N_("Invalid configuration for SB16 device"));
 
     /*
      * Read config data.
      */
-    rc = CFGMR3QuerySIntDef(pCfgHandle, "IRQ", &pThis->irq, 5);
+    int rc = CFGMR3QuerySIntDef(pCfgHandle, "IRQ", &pThis->irq, 5);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
-                                N_("Configuration error: Failed to get the \"IRQ\" value"));
+                                N_("SB16 configuration error: Failed to get the \"IRQ\" value"));
     pThis->irqCfg  = pThis->irq;
 
     rc = CFGMR3QuerySIntDef(pCfgHandle, "DMA", &pThis->dma, 1);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
-                                N_("Configuration error: Failed to get the \"DMA\" value"));
+                                N_("SB16 configuration error: Failed to get the \"DMA\" value"));
     pThis->dmaCfg  = pThis->dma;
 
     rc = CFGMR3QuerySIntDef(pCfgHandle, "DMA16", &pThis->hdma, 5);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
-                                N_("Configuration error: Failed to get the \"DMA16\" value"));
+                                N_("SB16 configuration error: Failed to get the \"DMA16\" value"));
     pThis->hdmaCfg = pThis->hdma;
 
     RTIOPORT Port;
     rc = CFGMR3QueryPortDef(pCfgHandle, "Port", &Port, 0x220);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
-                                N_("Configuration error: Failed to get the \"Port\" value"));
+                                N_("SB16 configuration error: Failed to get the \"Port\" value"));
     pThis->port    = Port;
     pThis->portCfg = Port;
 
@@ -2093,7 +2096,16 @@ static DECLCALLBACK(int) sb16Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
     rc = CFGMR3QueryU16Def(pCfgHandle, "Version", &u16Version, 0x0405);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
-                                N_("Configuration error: Failed to get the \"Version\" value"));
+                                N_("SB16 configuration error: Failed to get the \"Version\" value"));
+
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+    uint16_t uTimerHz;
+    rc = CFGMR3QueryU16Def(pCfgHandle, "TimerHz", &uTimerHz, 200 /* Hz */);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("SB16 configuration error: failed to read Hertz (Hz) rate as unsigned integer"));
+#endif
+
     pThis->ver     = u16Version;
     pThis->verCfg  = u16Version;
 
@@ -2167,44 +2179,7 @@ static DECLCALLBACK(int) sb16Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
 
     sb16ResetLegacy(pThis);
 
-    PSB16DRIVER pDrv;
-    uLUN = 0;
-    RTListForEach(&pThis->lstDrv, pDrv, SB16DRIVER, Node)
-    {
-        PPDMIAUDIOCONNECTOR pCon = pDrv->pConnector;
-        AssertPtr(pCon);
-
-        bool fIsOK = pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut);
-        if (fIsOK)
-        {
-            rc = pCon->pfnEnableOut(pCon, pDrv->Out.pStrmOut, true /* fEnable */);
-            fIsOK = RT_SUCCESS(rc);
-        }
-
-        if (!fIsOK)
-        {
-            /*
-             * Only primary drivers are critical for the VM to run. Everything else
-             * might not worth showing an own error message box in the GUI.
-             */
-            if (!(pDrv->Flags & PDMAUDIODRVFLAG_PRIMARY))
-                continue;
-
-            LogRel(("SB16: Warning: Unable to enable/use output for LUN#%RU8\n", uLUN));
-
-            pCon->pfnDestroyOut(pCon, pDrv->Out.pStrmOut);
-            pDrv->Out.pStrmOut = NULL;
-
-            pThis->pDrv->pfnInitNull(pThis->pDrv);
-
-            PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
-                N_("No audio devices could be opened. Selecting the NULL audio backend "
-                   "with the consequence that no sound is audible"));
-        }
-
-        uLUN++;
-    }
-
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
     if (RT_SUCCESS(rc))
     {
         rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, sb16TimerIO, pThis,
@@ -2213,15 +2188,45 @@ static DECLCALLBACK(int) sb16Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
             AssertMsgFailedReturn(("Error creating I/O timer, rc=%Rrc\n", rc), rc);
         else
         {
-            pThis->uTicksIO = PDMDevHlpTMTimeVirtGetFreq(pDevIns) / 200; /** Hz. @todo Make this configurable! */
-            if (pThis->uTicksIO < 100)
-                pThis->uTicksIO = 100;
-            LogFunc(("I/O timer ticks=%RU64\n", pThis->uTicksIO));
+            pThis->cTimerTicksIO = TMTimerGetFreq(pThis->pTimerIO) / uTimerHz;
+            pThis->uTimerTSIO    = TMTimerGet(pThis->pTimerIO);
+            LogFunc(("Timer ticks=%RU64 (%RU16 Hz)\n", pThis->cTimerTicksIO, uTimerHz));
 
             /* Fire off timer. */
-            TMTimerSet(pThis->pTimerIO, TMTimerGet(pThis->pTimerIO) + pThis->uTicksIO);
+            TMTimerSet(pThis->pTimerIO, TMTimerGet(pThis->pTimerIO) + pThis->cTimerTicksIO);
         }
     }
+#else
+    if (RT_SUCCESS(rc))
+    {
+        PSB16DRIVER pDrv;
+        RTListForEach(&pThis->lstDrv, pDrv, SB16DRIVER, Node)
+        {
+            /* Only register primary driver.
+             * The device emulation does the output multiplexing then. */
+            if (pDrv->Flags != PDMAUDIODRVFLAG_PRIMARY)
+                continue;
+
+            PDMAUDIOCALLBACK AudioCallbacks[2];
+
+            SB16CALLBACKCTX Ctx = { pThis, pDrv };
+
+            AudioCallbacks[0].enmType     = PDMAUDIOCALLBACKTYPE_INPUT;
+            AudioCallbacks[0].pfnCallback = sb16CallbackInput;
+            AudioCallbacks[0].pvCtx       = &Ctx;
+            AudioCallbacks[0].cbCtx       = sizeof(SB16CALLBACKCTX);
+
+            AudioCallbacks[1].enmType     = PDMAUDIOCALLBACKTYPE_OUTPUT;
+            AudioCallbacks[1].pfnCallback = sb16CallbackOutput;
+            AudioCallbacks[1].pvCtx       = &Ctx;
+            AudioCallbacks[1].cbCtx       = sizeof(SB16CALLBACKCTX);
+
+            rc = pDrv->pConnector->pfnRegisterCallbacks(pDrv->pConnector, AudioCallbacks, RT_ELEMENTS(AudioCallbacks));
+            if (RT_FAILURE(rc))
+                break;
+        }
+    }
+#endif
 
     return VINF_SUCCESS;
 }
diff --git a/src/VBox/Devices/Audio/DrvAudio.cpp b/src/VBox/Devices/Audio/DrvAudio.cpp
index f128d68..d09252d 100644
--- a/src/VBox/Devices/Audio/DrvAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvAudio.cpp
@@ -309,63 +309,75 @@ static bool drvAudioStreamCfgIsValid(PPDMAUDIOSTREAMCFG pCfg)
     return fValid;
 }
 
-void drvAudioClearBuf(PPDMPCMPROPS pPCMInfo, void *pvBuf, size_t cbBuf)
+/**
+ * Clears a sample buffer by the given amount of audio samples.
+ *
+ * @return  IPRT status code.
+ * @param   pPCMProps               PCM properties to use for the buffer to clear.
+ * @param   pvBuf                   Buffer to clear.
+ * @param   cbBuf                   Size (in bytes) of the buffer.
+ * @param   cSamples                Number of audio samples to clear in the buffer.
+ */
+void DrvAudioClearBuf(PPDMPCMPROPS pPCMProps, void *pvBuf, size_t cbBuf, uint32_t cSamples)
 {
-    AssertPtrReturnVoid(pPCMInfo);
+    AssertPtrReturnVoid(pPCMProps);
     AssertPtrReturnVoid(pvBuf);
 
-    if (!cbBuf)
+    if (!cbBuf || !cSamples)
         return;
 
-    Log2Func(("pPCMInfo=%p, pvBuf=%p, cbBuf=%zu, fSigned=%RTbool, cBits=%RU8, cShift=%RU8\n",
-              pPCMInfo, pvBuf, cbBuf, pPCMInfo->fSigned, pPCMInfo->cBits, pPCMInfo->cShift));
+    Log2Func(("pPCMInfo=%p, pvBuf=%p, cSamples=%RU32, fSigned=%RTbool, cBits=%RU8, cShift=%RU8\n",
+              pPCMProps, pvBuf, cSamples, pPCMProps->fSigned, pPCMProps->cBits, pPCMProps->cShift));
 
-    if (pPCMInfo->fSigned)
+    if (pPCMProps->fSigned)
     {
-        memset(pvBuf, 0, cbBuf << pPCMInfo->cShift);
+        memset(pvBuf, 0, cSamples << pPCMProps->cShift);
     }
     else
     {
-        switch (pPCMInfo->cBits)
+        switch (pPCMProps->cBits)
         {
+            case 8:
+            {
+                memset(pvBuf, 0x80, cSamples << pPCMProps->cShift);
+                break;
+            }
 
-        case 8:
-            memset(pvBuf, 0x80, cbBuf << pPCMInfo->cShift);
-            break;
-
-        case 16:
-        {
-            uint16_t *p = (uint16_t *)pvBuf;
-            int shift = pPCMInfo->cChannels - 1;
-            short s = INT16_MAX;
+            case 16:
+            {
+                uint16_t *p = (uint16_t *)pvBuf;
+                int shift = pPCMProps->cChannels - 1;
+                short s = INT16_MAX;
 
-            if (pPCMInfo->fSwapEndian)
-                s = RT_BSWAP_U16(s);
+                if (pPCMProps->fSwapEndian)
+                    s = RT_BSWAP_U16(s);
 
-            for (unsigned i = 0; i < cbBuf << shift; i++)
-                p[i] = s;
+                for (unsigned i = 0; i < cSamples << shift; i++)
+                    p[i] = s;
 
-            break;
-        }
+                break;
+            }
 
-        case 32:
-        {
-            uint32_t *p = (uint32_t *)pvBuf;
-            int shift = pPCMInfo->cChannels - 1;
-            int32_t s = INT32_MAX;
+            case 32:
+            {
+                uint32_t *p = (uint32_t *)pvBuf;
+                int shift = pPCMProps->cChannels - 1;
+                int32_t s = INT32_MAX;
 
-            if (pPCMInfo->fSwapEndian)
-                s = RT_BSWAP_U32(s);
+                if (pPCMProps->fSwapEndian)
+                    s = RT_BSWAP_U32(s);
 
-            for (unsigned i = 0; i < cbBuf << shift; i++)
-                p[i] = s;
+                for (unsigned i = 0; i < cSamples << shift; i++)
+                    p[i] = s;
 
-            break;
-        }
+                break;
+            }
 
-        default:
-            AssertMsgFailed(("Invalid bits: %RU8\n", pPCMInfo->cBits));
-            break;
+            default:
+            {
+                AssertMsgFailed(("Invalid bits: %RU8\n", pPCMProps->cBits));
+                break;
+            }
         }
     }
 }
@@ -416,6 +428,46 @@ static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn,
             break;
         }
 
+        case PDMAUDIOSTREAMCMD_PAUSE:
+        {
+            if (!(pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED))
+            {
+                Assert(pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED);
+                rc = pThis->pHostDrvAudio->pfnControlIn(pThis->pHostDrvAudio, pHstStrmIn, PDMAUDIOSTREAMCMD_PAUSE);
+                if (RT_SUCCESS(rc))
+                {
+                    LogFunc(("[%s] Pausing stream\n", pHstStrmIn->MixBuf.pszName));
+                    pHstStrmIn->fStatus |= PDMAUDIOSTRMSTS_FLAG_PAUSED;
+                }
+                else
+                    LogFlowFunc(("Backend vetoed pausing input stream, rc=%Rrc\n", rc));
+            }
+            else
+                rc = VINF_SUCCESS;
+
+            break;
+        }
+
+        case PDMAUDIOSTREAMCMD_RESUME:
+        {
+            if (pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED)
+            {
+                Assert(pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED);
+                rc = pThis->pHostDrvAudio->pfnControlIn(pThis->pHostDrvAudio, pHstStrmIn, PDMAUDIOSTREAMCMD_RESUME);
+                if (RT_SUCCESS(rc))
+                {
+                    pHstStrmIn->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PAUSED;
+                    LogFunc(("[%s] Resumed stream\n", pHstStrmIn->MixBuf.pszName));
+                }
+                else
+                    LogFlowFunc(("Backend vetoed resuming input stream, rc=%Rrc\n", rc));
+            }
+            else
+                rc = VINF_SUCCESS;
+
+            break;
+        }
+
         default:
             AssertMsgFailed(("Command %ld not implemented\n", enmStreamCmd));
             rc = VERR_NOT_IMPLEMENTED;
@@ -481,7 +533,7 @@ static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOu
             if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED))
             {
                 Assert(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED);
-                rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
+                rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_PAUSE);
                 if (RT_SUCCESS(rc))
                 {
                     pHstStrmOut->fStatus |= PDMAUDIOSTRMSTS_FLAG_PAUSED;
@@ -501,7 +553,7 @@ static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOu
             if (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED)
             {
                 Assert(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED);
-                rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_ENABLE);
+                rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_RESUME);
                 if (RT_SUCCESS(rc))
                 {
                     pHstStrmOut->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PAUSED;
@@ -641,7 +693,7 @@ int drvAudioGstOutInit(PPDMAUDIOGSTSTRMOUT pGstStrmOut, PPDMAUDIOHSTSTRMOUT pHos
     AssertPtrReturn(pszName,      VERR_INVALID_POINTER);
     AssertPtrReturn(pCfg,         VERR_INVALID_POINTER);
 
-    int rc = drvAudioStreamCfgToProps(pCfg, &pGstStrmOut->Props);
+    int rc = DrvAudioStreamCfgToProps(pCfg, &pGstStrmOut->Props);
     if (RT_SUCCESS(rc))
     {
         char *pszTemp;
@@ -894,7 +946,7 @@ int drvAudioGstInInit(PPDMAUDIOGSTSTRMIN pGstStrmIn, PPDMAUDIOHSTSTRMIN pHstStrm
     AssertPtrReturn(pszName, VERR_INVALID_POINTER);
     AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
 
-    int rc = drvAudioStreamCfgToProps(pCfg, &pGstStrmIn->Props);
+    int rc = DrvAudioStreamCfgToProps(pCfg, &pGstStrmIn->Props);
     if (RT_SUCCESS(rc))
     {
         char *pszTemp;
@@ -1040,6 +1092,13 @@ static DECLCALLBACK(int) drvAudioWrite(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIO
               ("Writing to disabled host output stream \"%s\" not possible\n",
               pHstStrmOut->MixBuf.pszName));
 
+    if (!AudioMixBufFreeBytes(&pGstStrmOut->MixBuf))
+    {
+        if (pcbWritten)
+            *pcbWritten = 0;
+        return VINF_SUCCESS;
+    }
+
     /*
      * First, write data from the device emulation into our
      * guest mixing buffer.
@@ -1185,9 +1244,6 @@ static DECLCALLBACK(int) drvAudioQueryStatus(PPDMIAUDIOCONNECTOR pInterface,
 
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
 
-    if (!pThis->pHostDrvAudio->pfnIsEnabled(pThis->pHostDrvAudio, PDMAUDIODIR_OUT))
-        return VERR_NOT_AVAILABLE;
-
     int rc = VINF_SUCCESS;
     uint32_t cSamplesLive = 0;
 
@@ -1199,7 +1255,7 @@ static DECLCALLBACK(int) drvAudioQueryStatus(PPDMIAUDIOCONNECTOR pInterface,
     PPDMAUDIOHSTSTRMOUT pHstStrmOut = NULL;
     while ((pHstStrmOut = drvAudioHstFindAnyEnabledOut(pThis, pHstStrmOut)))
     {
-        cSamplesLive = drvAudioHstOutSamplesLive(pHstStrmOut);
+        cSamplesLive = AudioMixBufAvail(&pHstStrmOut->MixBuf);
 
         /* Has this stream marked as disabled but there still were guest streams relying
          * on it? Check if this stream now can be closed and do so, if possible. */
@@ -1239,8 +1295,9 @@ static DECLCALLBACK(int) drvAudioQueryStatus(PPDMIAUDIOCONNECTOR pInterface,
                  * so that it can start writing PCM data to us. */
                 cbFree2 = RT_MIN(cbFree2, AUDIOMIXBUF_S2B_RATIO(&pGstStrmOut->MixBuf,
                                                                 AudioMixBufFree(&pGstStrmOut->MixBuf)));
-
-                //LogFlowFunc(("\t[%s] cbFree=%RU32\n", pGstStrmOut->MixBuf.pszName, cbFree2));
+#ifdef DEBUG_andy
+                LogFlowFunc(("\t[%s] cbFreeOut=%RU32\n", pGstStrmOut->MixBuf.pszName, cbFree2));
+#endif
             }
         }
 
@@ -1269,8 +1326,9 @@ static DECLCALLBACK(int) drvAudioQueryStatus(PPDMIAUDIOCONNECTOR pInterface,
         {
             cbAvailIn = RT_MAX(cbAvailIn, AUDIOMIXBUF_S2B(&pHstStrmIn->MixBuf,
                                                           AudioMixBufMixed(&pHstStrmIn->MixBuf)));
-
-            LogFlowFunc(("\t[%s] cbFree=%RU32\n", pHstStrmIn->MixBuf.pszName, cbAvailIn));
+#ifdef DEBUG_andy
+            LogFlowFunc(("\t[%s] cbAvailIn=%RU32\n", pHstStrmIn->MixBuf.pszName, cbAvailIn));
+#endif
         }
     }
 
@@ -1381,6 +1439,121 @@ static DECLCALLBACK(int) drvAudioPlayOut(PPDMIAUDIOCONNECTOR pInterface, uint32_
     return rc;
 }
 
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+static PPDMAUDIOCALLBACK drvAudioCallbackDuplicate(PPDMAUDIOCALLBACK pCB)
+{
+    PPDMAUDIOCALLBACK pCBCopy = (PPDMAUDIOCALLBACK)RTMemDup((void *)pCB, sizeof(PDMAUDIOCALLBACK));
+    if (!pCBCopy)
+        return NULL;
+
+    if (pCB->pvCtx)
+    {
+        pCBCopy->pvCtx = RTMemDup(pCB->pvCtx, pCB->cbCtx);
+        if (!pCBCopy->pvCtx)
+        {
+            RTMemFree(pCBCopy);
+            return NULL;
+        }
+
+        pCBCopy->cbCtx = pCB->cbCtx;
+    }
+
+    return pCBCopy;
+}
+
+static void drvAudioCallbackDestroy(PPDMAUDIOCALLBACK pCB)
+{
+    if (!pCB)
+        return;
+
+    RTListNodeRemove(&pCB->Node);
+    if (pCB->pvCtx)
+    {
+        Assert(pCB->cbCtx);
+        RTMemFree(pCB->pvCtx);
+    }
+    RTMemFree(pCB);
+}
+
+static DECLCALLBACK(int) drvAudioRegisterCallbacks(PPDMIAUDIOCONNECTOR pInterface,
+                                                   PPDMAUDIOCALLBACK paCallbacks, size_t cCallbacks)
+{
+    AssertPtrReturn(pInterface,  VERR_INVALID_POINTER);
+    AssertPtrReturn(paCallbacks, VERR_INVALID_POINTER);
+    AssertReturn(cCallbacks,     VERR_INVALID_PARAMETER);
+
+    PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
+    int          rc = VINF_SUCCESS;
+
+    for (size_t i = 0; i < cCallbacks; i++)
+    {
+        PPDMAUDIOCALLBACK pCB = drvAudioCallbackDuplicate(&paCallbacks[i]);
+        if (!pCB)
+        {
+            rc = VERR_NO_MEMORY;
+            break;
+        }
+
+        switch (pCB->enmType)
+        {
+            case PDMAUDIOCALLBACKTYPE_INPUT:
+                RTListAppend(&pThis->lstCBIn, &pCB->Node);
+                break;
+
+            case PDMAUDIOCALLBACKTYPE_OUTPUT:
+                RTListAppend(&pThis->lstCBOut, &pCB->Node);
+                break;
+
+            default:
+                AssertMsgFailed(("Not supported\n"));
+                break;
+        }
+    }
+
+    /** @todo Undo allocations on error. */
+
+    return rc;
+}
+
+static DECLCALLBACK(int) drvAudioCallback(PPDMIAUDIOCONNECTOR pInterface, PDMAUDIOCALLBACKTYPE enmType,
+                                          void *pvUser, size_t cbUser)
+{
+    AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
+    AssertPtrReturn(pvUser,     VERR_INVALID_POINTER);
+    AssertReturn(cbUser,        VERR_INVALID_PARAMETER);
+
+    PDRVAUDIO     pThis       = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
+    PRTLISTANCHOR pListAnchor = NULL;
+
+    switch (enmType)
+    {
+        case PDMAUDIOCALLBACKTYPE_INPUT:
+            pListAnchor = &pThis->lstCBIn;
+            break;
+
+        case PDMAUDIOCALLBACKTYPE_OUTPUT:
+            pListAnchor = &pThis->lstCBOut;
+            break;
+
+        default:
+            AssertMsgFailed(("Not supported\n"));
+            break;
+    }
+
+    if (pListAnchor)
+    {
+        PPDMAUDIOCALLBACK pCB;
+        RTListForEach(pListAnchor, pCB, PDMAUDIOCALLBACK, Node)
+        {
+            Assert(pCB->enmType == enmType);
+            pCB->pfnCallback(enmType, pCB->pvCtx, pCB->cbCtx, pvUser, cbUser);
+        }
+    }
+
+    return VINF_SUCCESS;
+}
+#endif
+
 static int drvAudioHostInit(PCFGMNODE pCfgHandle, PDRVAUDIO pThis)
 {
     /* pCfgHandle is optional. */
@@ -1517,6 +1690,10 @@ static DECLCALLBACK(int) drvAudioInit(PCFGMNODE pCfgHandle, PPDMDRVINS pDrvIns)
 
     RTListInit(&pThis->lstHstStrmIn);
     RTListInit(&pThis->lstHstStrmOut);
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    RTListInit(&pThis->lstCBIn);
+    RTListInit(&pThis->lstCBOut);
+#endif
 
     int rc = VINF_SUCCESS;
 
@@ -1620,53 +1797,57 @@ static DECLCALLBACK(int) drvAudioEnableOut(PPDMIAUDIOCONNECTOR pInterface,
         PPDMAUDIOHSTSTRMOUT pHstStrmOut = pGstStrmOut->pHstStrmOut;
         AssertPtr(pHstStrmOut);
 
-        if (pGstStrmOut->State.fActive != fEnable) /* Only process real state changes. */
+        if (fEnable)
         {
-            if (fEnable)
+            /* Is a pending disable outstanding? Then disable first. */
+            if (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE)
             {
-                pHstStrmOut->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE;
-                if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED))
-                    rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_ENABLE);
+                rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
+                if (RT_SUCCESS(rc))
+                    pHstStrmOut->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE;
             }
-            else /* Disable */
+
+            if (RT_SUCCESS(rc))
+                rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_ENABLE);
+        }
+        else /* Disable */
+        {
+            if (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
             {
-                if (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
+                uint32_t cGstStrmsActive = 0;
+
+                /*
+                 * Check if there are any active guest streams assigned
+                 * to this host stream which still are being marked as active.
+                 *
+                 * In that case we have to defer closing the host stream and
+                 * wait until all guest streams have been finished.
+                 */
+                PPDMAUDIOGSTSTRMOUT pIter;
+                RTListForEach(&pHstStrmOut->lstGstStrmOut, pIter, PDMAUDIOGSTSTRMOUT, Node)
                 {
-                    uint32_t cGstStrmsActive = 0;
-
-                    /*
-                     * Check if there are any active guest streams assigned
-                     * to this host stream which still are being marked as active.
-                     *
-                     * In that case we have to defer closing the host stream and
-                     * wait until all guest streams have been finished.
-                     */
-                    PPDMAUDIOGSTSTRMOUT pIter;
-                    RTListForEach(&pHstStrmOut->lstGstStrmOut, pIter, PDMAUDIOGSTSTRMOUT, Node)
+                    if (pIter->State.fActive)
                     {
-                        if (pIter->State.fActive)
-                        {
-                            cGstStrmsActive++;
-                            break; /* At least one assigned & active guest stream is enough. */
-                        }
+                        cGstStrmsActive++;
+                        break; /* At least one assigned & active guest stream is enough. */
                     }
+                }
 
-                    /* Do we need to defer closing the host stream? */
-                    if (cGstStrmsActive >= 1)
-                        pHstStrmOut->fStatus |= PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE;
+                /* Do we need to defer closing the host stream? */
+                if (cGstStrmsActive >= 1)
+                    pHstStrmOut->fStatus |= PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE;
 
-                    /* Can we close the host stream now instead of deferring it? */
-                    if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE))
-                        rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
-                }
+                /* Can we close the host stream now instead of deferring it? */
+                if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE))
+                    rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
             }
+        }
 
-            if (RT_SUCCESS(rc))
-                pGstStrmOut->State.fActive = fEnable;
+        if (RT_SUCCESS(rc))
+            pGstStrmOut->State.fActive = fEnable;
 
-            LogFlowFunc(("%s: fEnable=%RTbool, fStatus=0x%x, rc=%Rrc\n",
-                         pGstStrmOut->MixBuf.pszName, fEnable, pHstStrmOut->fStatus, rc));
-        }
+        LogFlowFunc(("%s: fEnable=%RTbool, fStatus=0x%x, rc=%Rrc\n",
+                     pGstStrmOut->MixBuf.pszName, fEnable, pHstStrmOut->fStatus, rc));
     }
 
     return rc;
@@ -1689,15 +1870,12 @@ static DECLCALLBACK(int) drvAudioEnableIn(PPDMIAUDIOCONNECTOR pInterface,
 
         LogFlowFunc(("%s: fEnable=%RTbool\n", pGstStrmIn->MixBuf.pszName, fEnable));
 
-        if (pGstStrmIn->State.fActive != fEnable) /* Only process real state changes. */
-        {
-            rc = drvAudioControlHstIn(pThis, pHstStrmIn,
-                                      fEnable ? PDMAUDIOSTREAMCMD_ENABLE : PDMAUDIOSTREAMCMD_DISABLE);
-            if (RT_SUCCESS(rc))
-                pGstStrmIn->State.fActive = fEnable;
+        rc = drvAudioControlHstIn(pThis, pHstStrmIn,
+                                  fEnable ? PDMAUDIOSTREAMCMD_ENABLE : PDMAUDIOSTREAMCMD_DISABLE);
+        if (RT_SUCCESS(rc))
+            pGstStrmIn->State.fActive = fEnable;
 
-            LogFlowFunc(("%s: fEnable=%RTbool, rc=%Rrc\n", pGstStrmIn->MixBuf.pszName, fEnable, rc));
-        }
+        LogFlowFunc(("%s: fEnable=%RTbool, rc=%Rrc\n", pGstStrmIn->MixBuf.pszName, fEnable, rc));
     }
 
     return rc;
@@ -1952,6 +2130,15 @@ static DECLCALLBACK(void) drvAudioPowerOff(PPDMDRVINS pDrvIns)
     if (pThis->pHostDrvAudio->pfnShutdown)
         pThis->pHostDrvAudio->pfnShutdown(pThis->pHostDrvAudio);
 
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    PPDMAUDIOCALLBACK pCB, pCBNext;
+    RTListForEachSafe(&pThis->lstCBIn, pCB, pCBNext, PDMAUDIOCALLBACK, Node)
+        drvAudioCallbackDestroy(pCB);
+
+    RTListForEachSafe(&pThis->lstCBOut, pCB, pCBNext, PDMAUDIOCALLBACK, Node)
+        drvAudioCallbackDestroy(pCB);
+#endif
+
     LogFlowFuncLeave();
 }
 
@@ -1973,7 +2160,7 @@ static DECLCALLBACK(int) drvAudioConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHan
     pThis->pDrvIns                                   = pDrvIns;
     /* IBase. */
     pDrvIns->IBase.pfnQueryInterface                 = drvAudioQueryInterface;
-    /* IAudio. */
+    /* IAudioConnector. */
     pThis->IAudioConnector.pfnQueryStatus            = drvAudioQueryStatus;
     pThis->IAudioConnector.pfnRead                   = drvAudioRead;
     pThis->IAudioConnector.pfnWrite                  = drvAudioWrite;
@@ -1989,6 +2176,10 @@ static DECLCALLBACK(int) drvAudioConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHan
     pThis->IAudioConnector.pfnCreateIn               = drvAudioCreateIn;
     pThis->IAudioConnector.pfnCreateOut              = drvAudioCreateOut;
     pThis->IAudioConnector.pfnPlayOut                = drvAudioPlayOut;
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    pThis->IAudioConnector.pfnRegisterCallbacks      = drvAudioRegisterCallbacks;
+    pThis->IAudioConnector.pfnCallback               = drvAudioCallback;
+#endif
 
     /*
      * Attach driver below and query its connector interface.
diff --git a/src/VBox/Devices/Audio/DrvAudio.h b/src/VBox/Devices/Audio/DrvAudio.h
index ba9755a..85812f8 100644
--- a/src/VBox/Devices/Audio/DrvAudio.h
+++ b/src/VBox/Devices/Audio/DrvAudio.h
@@ -82,7 +82,7 @@ typedef struct DRVAUDIO
     RTSEMEVENT              hEvent;
     /** Shutdown indicator. */
     bool                    fTerminate;
-    /** The audio interface presented to the device/driver above us. */
+    /** Our audio connector interface. */
     PDMIAUDIOCONNECTOR      IAudioConnector;
     /** Pointer to the driver instance. */
     PPDMDRVINS              pDrvIns;
@@ -97,10 +97,14 @@ typedef struct DRVAUDIO
     /** Audio configuration settings retrieved
      *  from the backend. */
     PDMAUDIOBACKENDCFG      BackendCfg;
-
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    /** @todo Use a map with primary key set to the callback type? */
+    RTLISTANCHOR            lstCBIn;
+    RTLISTANCHOR            lstCBOut;
+#endif
 } DRVAUDIO, *PDRVAUDIO;
 
-/** Makes a PDRVBLOCK out of a PPDMIBLOCK. */
+/** Makes a PDRVAUDIO out of a PPDMIAUDIOCONNECTOR. */
 #define PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface) \
     ( (PDRVAUDIO)((uintptr_t)pInterface - RT_OFFSETOF(DRVAUDIO, IAudioConnector)) )
 
@@ -109,7 +113,6 @@ const char *drvAudioRecSourceToString(PDMAUDIORECSOURCE enmRecSource);
 PDMAUDIOFMT drvAudioHlpStringToFormat(const char *pszFormat);
 
 bool drvAudioPCMPropsAreEqual(PPDMPCMPROPS info, PPDMAUDIOSTREAMCFG pCfg);
-int drvAudioStreamCfgToProps(PPDMAUDIOSTREAMCFG pCfg, PPDMPCMPROPS pProps);
 void drvAudioStreamCfgPrint(PPDMAUDIOSTREAMCFG pCfg);
 
 /* AUDIO IN function declarations. */
@@ -143,11 +146,8 @@ int drvAudioHlpPcmHwAddOut(PDRVAUDIO pDrvAudio, PPDMAUDIOSTREAMCFG pCfg, PPDMAUD
 int drvAudioHlpPcmCreateVoicePairOut(PDRVAUDIO pDrvAudio, const char *pszName, PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOGSTSTRMOUT *ppGstStrmOut);
 
 /* Common functions between DrvAudio and backends (host audio drivers). */
-int  drvAudioAttachCapture(PDRVAUDIO pDrvAudio, PPDMAUDIOHSTSTRMOUT pHstStrmOut);
-void drvAudioClearBuf(PPDMPCMPROPS pPCMInfo, void *pvBuf, size_t cbBuf);
-void drvAudioDetachCapture(PPDMAUDIOHSTSTRMOUT pHstStrmOut);
-uint32_t drvAudioHstOutSamplesLive(PPDMAUDIOHSTSTRMOUT pHstStrmOut);
-
+void DrvAudioClearBuf(PPDMPCMPROPS pPCMInfo, void *pvBuf, size_t cbBuf, uint32_t cSamples);
+int DrvAudioStreamCfgToProps(PPDMAUDIOSTREAMCFG pCfg, PPDMPCMPROPS pProps);
 
 typedef struct fixed_settings
 {
diff --git a/src/VBox/Devices/Audio/DrvAudioCommon.cpp b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
index 7dc8b2d..599b863 100644
--- a/src/VBox/Devices/Audio/DrvAudioCommon.cpp
+++ b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
@@ -308,8 +308,18 @@ bool drvAudioPCMPropsAreEqual(PPDMPCMPROPS pProps, PPDMAUDIOSTREAMCFG pCfg)
     return fEqual;
 }
 
-int drvAudioStreamCfgToProps(PPDMAUDIOSTREAMCFG pCfg, PPDMPCMPROPS pProps)
+/**
+ * Converts an audio stream configuration to matching PCM properties.
+ *
+ * @return  IPRT status code.
+ * @param   pCfg                    Audio stream configuration to convert.
+ * @param   pProps                  PCM properties to save result to.
+ */
+int DrvAudioStreamCfgToProps(PPDMAUDIOSTREAMCFG pCfg, PPDMPCMPROPS pProps)
 {
+    AssertPtrReturn(pCfg,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pProps, VERR_INVALID_POINTER);
+
     int rc = VINF_SUCCESS;
 
     int cBits = 8, cShift = 0;
@@ -406,21 +416,3 @@ void drvAudioStreamCfgPrint(PPDMAUDIOSTREAMCFG pCfg)
             break;
     }
 }
-
-/**
- * Finds the number of live samples for a specific output stream.
- *
- * @return  uint32_t                Minimum number of live host output samples processed
- *                                  by all connected guest output streams.
- * @param   pHstStrmOut             Host output stream to search in.
- */
-uint32_t drvAudioHstOutSamplesLive(PPDMAUDIOHSTSTRMOUT pHstStrmOut)
-{
-    AssertPtrReturn(pHstStrmOut, 0);
-
-    uint32_t cSamplesLive = AudioMixBufAvail(&pHstStrmOut->MixBuf);
-
-    LogFlowFunc(("%s: cStreamsLive=%RU32, cSamplesLive=%RU32\n", pHstStrmOut->MixBuf.pszName, cSamplesLive));
-    return cSamplesLive;
-}
-
diff --git a/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp b/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp
index d15f023..053a922 100644
--- a/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp
@@ -945,7 +945,7 @@ static DECLCALLBACK(int) drvHostALSAAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPDM
         size_t cbToRead = RT_MIN(AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf,
                                                  (uint32_t)cAvail), /* cAvail is always >= 0 */
                                  AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf,
-                                                 drvAudioHstOutSamplesLive(pHstStrmOut)));
+                                                 AudioMixBufAvail(&pHstStrmOut->MixBuf)));
         LogFlowFunc(("cbToRead=%zu, cbAvail=%zu\n",
                      cbToRead, AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf, cAvail)));
 
@@ -1117,7 +1117,7 @@ static DECLCALLBACK(int) drvHostALSAAudioInitOut(PPDMIHOSTAUDIO pInterface,
         streamCfg.enmFormat     = enmFormat;
         streamCfg.enmEndianness = enmEnd;
 
-        rc = drvAudioStreamCfgToProps(&streamCfg, &pHstStrmOut->Props);
+        rc = DrvAudioStreamCfgToProps(&streamCfg, &pHstStrmOut->Props);
         if (RT_FAILURE(rc))
             break;
 
@@ -1188,7 +1188,7 @@ static DECLCALLBACK(int) drvHostALSAAudioInitIn(PPDMIHOSTAUDIO pInterface,
         streamCfg.enmFormat     = enmFormat;
         streamCfg.enmEndianness = enmEnd;
 
-        rc = drvAudioStreamCfgToProps(&streamCfg, &pHstStrmIn->Props);
+        rc = DrvAudioStreamCfgToProps(&streamCfg, &pHstStrmIn->Props);
         if (RT_FAILURE(rc))
             break;
 
@@ -1239,10 +1239,12 @@ static DECLCALLBACK(int) drvHostALSAAudioControlIn(PPDMIHOSTAUDIO pInterface, PP
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
             rc = drvHostALSAAudioStreamCtl(pThisStrmIn->phPCM, false /* fStop */);
             break;
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
             rc = drvHostALSAAudioStreamCtl(pThisStrmIn->phPCM, true /* fStop */);
             break;
 
@@ -1268,10 +1270,12 @@ static DECLCALLBACK(int) drvHostALSAAudioControlOut(PPDMIHOSTAUDIO pInterface, P
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
             rc = drvHostALSAAudioStreamCtl(pThisStrmOut->phPCM, false /* fStop */);
             break;
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
             rc = drvHostALSAAudioStreamCtl(pThisStrmOut->phPCM, true /* fStop */);
             break;
 
diff --git a/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp b/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
index b76272b..35fe560 100644
--- a/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
@@ -1480,7 +1480,7 @@ static DECLCALLBACK(int) drvHostCoreAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPDM
 
     /* Not much else to do here. */
 
-    uint32_t cLive = drvAudioHstOutSamplesLive(pHstStrmOut);
+    uint32_t cLive = AudioMixBufAvail(&pHstStrmOut->MixBuf);;
     if (!cLive) /* Not samples to play? Bail out. */
     {
         if (pcSamplesPlayed)
@@ -1507,7 +1507,7 @@ static DECLCALLBACK(int) drvHostCoreAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPDM
         {
             RTCircBufReleaseWriteBlock(pStreamOut->pBuf, cbCopy);
             break;
-        }        
+        }
 
         Assert(cbCopy <= cbToRead);
 
@@ -1566,6 +1566,7 @@ static DECLCALLBACK(int) drvHostCoreAudioControlOut(PPDMIHOSTAUDIO pInterface, P
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
         {
             /* Only start the device if it is actually stopped */
             if (!drvHostCoreAudioIsRunning(pStreamOut->deviceID))
@@ -1589,6 +1590,7 @@ static DECLCALLBACK(int) drvHostCoreAudioControlOut(PPDMIHOSTAUDIO pInterface, P
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
         {
             /* Only stop the device if it is actually running */
             if (drvHostCoreAudioIsRunning(pStreamOut->deviceID))
@@ -1640,6 +1642,7 @@ static DECLCALLBACK(int) drvHostCoreAudioControlIn(PPDMIHOSTAUDIO pInterface, PP
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
         {
             /* Only start the device if it is actually stopped */
             if (!drvHostCoreAudioIsRunning(pStreamIn->deviceID))
@@ -1663,6 +1666,7 @@ static DECLCALLBACK(int) drvHostCoreAudioControlIn(PPDMIHOSTAUDIO pInterface, PP
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
         {
             /* Only stop the device if it is actually running */
             if (drvHostCoreAudioIsRunning(pStreamIn->deviceID))
@@ -1725,7 +1729,7 @@ static DECLCALLBACK(int) drvHostCoreAudioFiniIn(PPDMIHOSTAUDIO pInterface, PPDMA
                                                kAudioObjectPropertyElementMaster };
 #ifdef DEBUG
         err = AudioObjectRemovePropertyListener(pStreamIn->deviceID, &propAdr,
-                                                drvHostCoreAudioRecordingAudioDevicePropertyChanged, NULL);
+                                                drvHostCoreAudioRecordingAudioDevicePropertyChanged, pStreamIn);
         /* Not Fatal */
         if (RT_UNLIKELY(err != noErr))
             LogRel(("CoreAudio: Failed to remove the processor overload listener (%RI32)\n", err));
@@ -1733,7 +1737,7 @@ static DECLCALLBACK(int) drvHostCoreAudioFiniIn(PPDMIHOSTAUDIO pInterface, PPDMA
 
         propAdr.mSelector = kAudioDevicePropertyNominalSampleRate;
         err = AudioObjectRemovePropertyListener(pStreamIn->deviceID, &propAdr,
-                                                drvHostCoreAudioRecordingAudioDevicePropertyChanged, NULL);
+                                                drvHostCoreAudioRecordingAudioDevicePropertyChanged, pStreamIn);
         /* Not Fatal */
         if (RT_UNLIKELY(err != noErr))
             LogRel(("CoreAudio: Failed to remove the sample rate changed listener (%RI32)\n", err));
@@ -1741,8 +1745,8 @@ static DECLCALLBACK(int) drvHostCoreAudioFiniIn(PPDMIHOSTAUDIO pInterface, PPDMA
         if (pStreamIn->fDefDevChgListReg)
         {
             propAdr.mSelector = kAudioHardwarePropertyDefaultInputDevice;
-            err = AudioObjectRemovePropertyListener(pStreamIn->deviceID, &propAdr,
-                                                    drvHostCoreAudioDefaultDeviceChanged, NULL);
+            err = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &propAdr,
+                                                    drvHostCoreAudioDefaultDeviceChanged, pStreamIn);
             if (RT_LIKELY(err == noErr))
             {
                 pStreamIn->fDefDevChgListReg = false;
@@ -1817,12 +1821,34 @@ static DECLCALLBACK(int) drvHostCoreAudioFiniOut(PPDMIHOSTAUDIO pInterface, PPDM
         ASMAtomicXchgU32(&pStreamOut->status, CA_STATUS_IN_UNINIT);
 
         OSStatus err;
+
+        /*
+         * Unregister playback device callbacks.
+         */
+        AudioObjectPropertyAddress propAdr = { kAudioDeviceProcessorOverload, kAudioObjectPropertyScopeGlobal,
+                                               kAudioObjectPropertyElementMaster };
+#ifdef DEBUG
+        err = AudioObjectRemovePropertyListener(pStreamOut->deviceID, &propAdr,
+                                                drvHostCoreAudioPlaybackAudioDevicePropertyChanged, pStreamOut);
+        /* Not Fatal */
+        if (RT_UNLIKELY(err != noErr))
+            LogRel(("CoreAudio: Failed to remove the processor overload listener (%RI32)\n", err));
+#endif /* DEBUG */
+
+        propAdr.mSelector = kAudioDevicePropertyNominalSampleRate;
+        err = AudioObjectRemovePropertyListener(pStreamOut->deviceID, &propAdr,
+                                                drvHostCoreAudioPlaybackAudioDevicePropertyChanged, pStreamOut);
+        /* Not Fatal */
+        if (RT_UNLIKELY(err != noErr))
+            LogRel(("CoreAudio: Failed to remove the sample rate changed listener (%RI32)\n", err));
+
         if (pStreamOut->fDefDevChgListReg)
         {
-            AudioObjectPropertyAddress propAdr = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal,
-                                                   kAudioObjectPropertyElementMaster };
-            err = AudioObjectRemovePropertyListener(pStreamOut->deviceID, &propAdr,
-                                                    drvHostCoreAudioDefaultDeviceChanged, NULL);
+            propAdr.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
+            propAdr.mScope    = kAudioObjectPropertyScopeGlobal;
+            propAdr.mElement  = kAudioObjectPropertyElementMaster;
+            err = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &propAdr,
+                                                    drvHostCoreAudioDefaultDeviceChanged, pStreamOut);
             if (RT_LIKELY(err == noErr))
             {
                 pStreamOut->fDefDevChgListReg = false;
@@ -1878,7 +1904,7 @@ static DECLCALLBACK(int) drvHostCoreAudioInitIn(PPDMIHOSTAUDIO pInterface,
     bool fDeviceByUser = false;
 
     /* Initialize the hardware info section with the audio settings */
-    int rc = drvAudioStreamCfgToProps(pCfg, &pStreamIn->streamIn.Props);
+    int rc = DrvAudioStreamCfgToProps(pCfg, &pStreamIn->streamIn.Props);
     if (RT_SUCCESS(rc))
     {
 #if 0
@@ -1937,7 +1963,7 @@ static DECLCALLBACK(int) drvHostCoreAudioInitOut(PPDMIHOSTAUDIO pInterface,
     pStreamOut->deviceID  = kAudioDeviceUnknown;
 
     /* Initialize the hardware info section with the audio settings */
-    drvAudioStreamCfgToProps(pCfg, &pStreamOut->streamOut.Props);
+    DrvAudioStreamCfgToProps(pCfg, &pStreamOut->streamOut.Props);
 
 #if 0
     /* Try to find the audio device set by the user. Use
diff --git a/src/VBox/Devices/Audio/DrvHostDSound.cpp b/src/VBox/Devices/Audio/DrvHostDSound.cpp
index 2fa39fc..9d79533 100644
--- a/src/VBox/Devices/Audio/DrvHostDSound.cpp
+++ b/src/VBox/Devices/Audio/DrvHostDSound.cpp
@@ -66,6 +66,17 @@ typedef FNDIRECTSOUNDENUMERATEW *PFNDIRECTSOUNDENUMERATEW;
 typedef HRESULT WINAPI FNDIRECTSOUNDCAPTUREENUMERATEW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext);
 typedef FNDIRECTSOUNDCAPTUREENUMERATEW *PFNDIRECTSOUNDCAPTUREENUMERATEW;
 
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+# define VBOX_DSOUND_MAX_EVENTS 3
+
+typedef enum DSOUNDEVENT
+{
+    DSOUNDEVENT_NOTIFY = 0,
+    DSOUNDEVENT_INPUT,
+    DSOUNDEVENT_OUTPUT,
+ } DSOUNDEVENT;
+#endif /* VBOX_WITH_AUDIO_CALLBACKS */
+
 typedef struct DSOUNDHOSTCFG
 {
     DWORD   cbBufferIn;
@@ -76,20 +87,6 @@ typedef struct DSOUNDHOSTCFG
     LPCGUID pGuidCapture;
 } DSOUNDHOSTCFG, *PDSOUNDHOSTCFG;
 
-typedef struct DRVHOSTDSOUND
-{
-    /** Pointer to the driver instance structure. */
-    PPDMDRVINS    pDrvIns;
-    /** Pointer to host audio interface. */
-    PDMIHOSTAUDIO IHostAudio;
-    /** List of found host input devices. */
-    RTLISTANCHOR  lstDevInput;
-    /** List of found host output devices. */
-    RTLISTANCHOR  lstDevOutput;
-    /** DirectSound configuration options. */
-    DSOUNDHOSTCFG cfg;
-} DRVHOSTDSOUND, *PDRVHOSTDSOUND;
-
 typedef struct DSOUNDSTREAMOUT
 {
     PDMAUDIOHSTSTRMOUT   strmOut; /* Always must come first! */
@@ -113,6 +110,45 @@ typedef struct DSOUNDSTREAMIN
     PDMAUDIOSTREAMCFG           streamCfg;
 } DSOUNDSTREAMIN, *PDSOUNDSTREAMIN;
 
+typedef struct DRVHOSTDSOUND
+{
+    /** Pointer to the driver instance structure. */
+    PPDMDRVINS          pDrvIns;
+    /** Our audio host audio interface. */
+    PDMIHOSTAUDIO       IHostAudio;
+    /** List of found host input devices. */
+    RTLISTANCHOR        lstDevInput;
+    /** List of found host output devices. */
+    RTLISTANCHOR        lstDevOutput;
+    /** DirectSound configuration options. */
+    DSOUNDHOSTCFG       cfg;
+    /** Whether the input currently is in an enabled (working)
+     *  state or not. */
+    bool                fEnabledIn;
+    /** Whether the output currently is in an enabled (working)
+     *  state or not. */
+    bool                fEnabledOut;
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    /** Pointer to the audio connector interface of the driver/device above us. */
+    PPDMIAUDIOCONNECTOR pUpIAudioConnector;
+    /** Stopped indicator. */
+    bool                fStopped;
+    /** Shutdown indicator. */
+    bool                fShutdown;
+    /** Notification thread. */
+    RTTHREAD            Thread;
+    /** Array of events to wait for in notification thread. */
+    HANDLE              aEvents[VBOX_DSOUND_MAX_EVENTS];
+    /** Number of events to wait for in notification thread.
+     *  Must not exceed VBOX_DSOUND_MAX_EVENTS. */
+    uint8_t             cEvents;
+    /** Pointer to the input stream. */
+    PDSOUNDSTREAMIN     pDSStrmIn;
+    /** Pointer to the output stream. */
+    PDSOUNDSTREAMOUT    pDSStrmOut;
+#endif
+} DRVHOSTDSOUND, *PDRVHOSTDSOUND;
+
 /**
  * Callback context for enumeration callbacks
  */
@@ -133,7 +169,12 @@ typedef struct DSOUNDDEV
 #define PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface) \
     ( (PDRVHOSTDSOUND)((uintptr_t)pInterface - RT_OFFSETOF(DRVHOSTDSOUND, IHostAudio)) )
 
+static HRESULT directSoundPlayRestore(LPDIRECTSOUNDBUFFER8 pDSB);
+
 static void dsoundDevRemove(PDSOUNDDEV pDev);
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+static int dsoundNotifyThread(PDRVHOSTDSOUND pThis, bool fShutdown);
+#endif
 
 static DWORD dsoundRingDistance(DWORD offEnd, DWORD offBegin, DWORD cSize)
 {
@@ -142,7 +183,11 @@ static DWORD dsoundRingDistance(DWORD offEnd, DWORD offBegin, DWORD cSize)
 
 static int dsoundWaveFmtFromCfg(PPDMAUDIOSTREAMCFG pCfg, PWAVEFORMATEX pFmt)
 {
+    AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
+    AssertPtrReturn(pFmt, VERR_INVALID_POINTER);
+
     RT_BZERO(pFmt, sizeof(WAVEFORMATEX));
+
     pFmt->wFormatTag      = WAVE_FORMAT_PCM;
     pFmt->nChannels       = pCfg->cChannels;
     pFmt->nSamplesPerSec  = pCfg->uHz;
@@ -179,6 +224,46 @@ static int dsoundWaveFmtFromCfg(PPDMAUDIOSTREAMCFG pCfg, PWAVEFORMATEX pFmt)
     return VINF_SUCCESS;
 }
 
+static int dsoundGetStatusOut(PDSOUNDSTREAMOUT pDSoundStrmOut, DWORD *pdwBuffer, DWORD *pdwFree, DWORD *pdwPlayPos)
+{
+    AssertPtrReturn(pDSoundStrmOut, VERR_INVALID_POINTER);
+
+    LPDIRECTSOUNDBUFFER8 pDSB = pDSoundStrmOut->pDSB;
+    if (!pDSB)
+        return VERR_INVALID_POINTER;
+
+    DWORD cbBuffer = AUDIOMIXBUF_S2B(&pDSoundStrmOut->strmOut.MixBuf, pDSoundStrmOut->csPlaybackBufferSize);
+
+    /* Get the current play position which is used for calculating the free space in the buffer. */
+    DWORD cbPlayPos;
+    HRESULT hr = IDirectSoundBuffer8_GetCurrentPosition(pDSB, &cbPlayPos, NULL);
+    if (hr == DSERR_BUFFERLOST)
+    {
+        hr = directSoundPlayRestore(pDSB);
+        if (SUCCEEDED(hr))
+            hr = IDirectSoundBuffer8_GetCurrentPosition(pDSB, &cbPlayPos, NULL);
+    }
+
+    if (FAILED(hr))
+    {
+        if (hr != DSERR_BUFFERLOST) /* Avoid log flooding if the error is still there. */
+            DSLOGREL(("DSound: Playback: GetCurrentPosition failed with %Rhrc\n", hr));
+        LogFlowFunc(("Failed with %Rhrc\n", hr));
+        return VERR_NOT_AVAILABLE;
+    }
+
+    if (pdwBuffer)
+        *pdwBuffer = cbBuffer;
+
+    if (pdwFree)
+        *pdwFree = cbBuffer - dsoundRingDistance(pDSoundStrmOut->cbPlayWritePos, cbPlayPos, cbBuffer);
+
+    if (pdwPlayPos)
+        *pdwPlayPos = cbPlayPos;
+
+    return VINF_SUCCESS;
+}
+
 static char *dsoundGUIDToUtf8StrA(LPCGUID lpGUID)
 {
     if (lpGUID)
@@ -375,21 +460,46 @@ static HRESULT directSoundPlayInterfaceCreate(PDRVHOSTDSOUND pThis, PDSOUNDSTREA
     return hr;
 }
 
-static void directSoundPlayClose(PDSOUNDSTREAMOUT pDSoundStrmOut)
+static HRESULT directSoundPlayClose(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundStrmOut)
 {
+    AssertPtrReturn(pThis, E_POINTER);
+    AssertPtrReturn(pDSoundStrmOut, E_POINTER);
+
     DSLOG(("DSound: Closing playback stream %p, buffer %p\n", pDSoundStrmOut, pDSoundStrmOut->pDSB));
 
+    HRESULT hr = S_OK;
+
     if (pDSoundStrmOut->pDSB)
     {
-        HRESULT hr = IDirectSoundBuffer8_Stop(pDSoundStrmOut->pDSB);
-        if (FAILED(hr))
-            DSLOGREL(("DSound: Stop playback stream %p when closing %Rhrc\n", pDSoundStrmOut, hr));
+        hr = IDirectSoundBuffer8_Stop(pDSoundStrmOut->pDSB);
+        if (SUCCEEDED(hr))
+        {
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+            if (pThis->aEvents[DSOUNDEVENT_OUTPUT] != NULL)
+            {
+                CloseHandle(pThis->aEvents[DSOUNDEVENT_OUTPUT]);
+                pThis->aEvents[DSOUNDEVENT_OUTPUT] = NULL;
 
-        IDirectSoundBuffer8_Release(pDSoundStrmOut->pDSB);
-        pDSoundStrmOut->pDSB = NULL;
+                if (pThis->cEvents)
+                    pThis->cEvents--;
+
+                pThis->pDSStrmOut = NULL;
+            }
+
+            int rc2 = dsoundNotifyThread(pThis, false /* fShutdown */);
+            AssertRC(rc2);
+#endif
+            IDirectSoundBuffer8_Release(pDSoundStrmOut->pDSB);
+            pDSoundStrmOut->pDSB = NULL;
+        }
+        else
+            DSLOGREL(("DSound: Stop playback stream %p when closing %Rhrc\n", pDSoundStrmOut, hr));
     }
 
-    directSoundPlayInterfaceRelease(pDSoundStrmOut);
+    if (SUCCEEDED(hr))
+        directSoundPlayInterfaceRelease(pDSoundStrmOut);
+
+    return hr;
 }
 
 static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundStrmOut)
@@ -409,7 +519,7 @@ static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoun
     {
         /* Should not happen but be forgiving. */
         DSLOGREL(("DSound: DirectSoundBuffer already exists\n"));
-        directSoundPlayClose(pDSoundStrmOut);
+        directSoundPlayClose(pThis, pDSoundStrmOut);
     }
 
     WAVEFORMATEX wfx;
@@ -424,23 +534,27 @@ static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoun
     do /* To use breaks. */
     {
         LPDIRECTSOUNDBUFFER pDSB = NULL;
+
         DSBUFFERDESC bd;
         RT_ZERO(bd);
         bd.dwSize = sizeof(bd);
         bd.lpwfxFormat = &wfx;
         bd.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2;
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+        bd.dwFlags      |= DSBCAPS_CTRLPOSITIONNOTIFY;
+#endif
         bd.dwBufferBytes = pThis->cfg.cbBufferOut;
-        hr = IDirectSound8_CreateSoundBuffer(pDSoundStrmOut->pDS,
-                                             &bd, &pDSB, NULL);
+
+        hr = IDirectSound8_CreateSoundBuffer(pDSoundStrmOut->pDS, &bd, &pDSB, NULL);
         if (FAILED(hr))
         {
             DSLOGREL(("DSound: CreateSoundBuffer %Rhrc\n", hr));
             break;
         }
 
-        /* "Upgrade" to IDirectSoundBuffer8 intarface. */
-        hr = IDirectSoundBuffer_QueryInterface(pDSB, IID_IDirectSoundBuffer8, (void **)&pDSoundStrmOut->pDSB);
-        pDSB->Release();
+        /* "Upgrade" to IDirectSoundBuffer8 interface. */
+        hr = IDirectSoundBuffer_QueryInterface(pDSB, IID_IDirectSoundBuffer8, (LPVOID *)&pDSoundStrmOut->pDSB);
+        IDirectSoundBuffer_Release(pDSB);
         if (FAILED(hr))
         {
             DSLOGREL(("DSound: Query IDirectSoundBuffer8 %Rhrc\n", hr));
@@ -501,10 +615,58 @@ static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoun
         pDSoundStrmOut->csPlaybackBufferSize = bc.dwBufferBytes >> pDSoundStrmOut->strmOut.Props.cShift;
         DSLOG(("DSound: csPlaybackBufferSize=%RU32\n", pDSoundStrmOut->csPlaybackBufferSize));
 
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+        /*
+         * Install notification.
+         */
+        pThis->aEvents[DSOUNDEVENT_OUTPUT] = CreateEvent(NULL /* Security attribute */,
+                                                         FALSE /* bManualReset */, FALSE /* bInitialState */,
+                                                         NULL /* lpName */);
+        if (pThis->aEvents[DSOUNDEVENT_OUTPUT] == NULL)
+        {
+            hr = HRESULT_FROM_WIN32(GetLastError());
+            DSLOGREL(("DSound: CreateEvent for output failed with hr=%Rhrc\n", hr));
+            break;
+        }
+
+        LPDIRECTSOUNDNOTIFY8 pNotify;
+        hr = IDirectSoundNotify_QueryInterface(pDSoundStrmOut->pDSB, IID_IDirectSoundNotify8, (LPVOID *)&pNotify);
+        if (SUCCEEDED(hr))
+        {
+            DSBPOSITIONNOTIFY dsBufPosNotify;
+            RT_ZERO(dsBufPosNotify);
+            dsBufPosNotify.dwOffset     = DSBPN_OFFSETSTOP;
+            dsBufPosNotify.hEventNotify = pThis->aEvents[DSOUNDEVENT_OUTPUT];
+
+            hr = IDirectSoundNotify_SetNotificationPositions(pNotify, 1 /* Count */, &dsBufPosNotify);
+            if (FAILED(hr))
+                DSLOGREL(("DSound: IDirectSoundNotify_SetNotificationPositions failed with hr=%Rhrc\n", hr));
+
+            IDirectSoundNotify_Release(pNotify);
+        }
+        else
+            DSLOGREL(("DSound: IDirectSoundNotify_QueryInterface failed with hr=%Rhrc\n", hr));
+
+        if (FAILED(hr))
+            break;
+
+        pThis->pDSStrmOut = pDSoundStrmOut;
+
+        Assert(pThis->cEvents < VBOX_DSOUND_MAX_EVENTS);
+        pThis->cEvents++;
+
+        /* Let the thread know. */
+        dsoundNotifyThread(pThis, false /* fShutdown */);
+
+        /* Trigger the just installed output notification. */
+        hr = IDirectSoundBuffer8_Play(pDSoundStrmOut->pDSB, 0, 0, 0);
+
+#endif /* VBOX_WITH_AUDIO_CALLBACKS */
+
     } while (0);
 
     if (FAILED(hr))
-        directSoundPlayClose(pDSoundStrmOut);
+        directSoundPlayClose(pThis, pDSoundStrmOut);
 
     return hr;
 }
@@ -513,47 +675,55 @@ static void dsoundPlayClearSamples(PDSOUNDSTREAMOUT pDSoundStrmOut)
 {
     AssertPtrReturnVoid(pDSoundStrmOut);
 
+    PPDMAUDIOHSTSTRMOUT pStrmOut = &pDSoundStrmOut->strmOut;
+
     LPVOID pv1, pv2;
     DWORD cb1, cb2;
     HRESULT hr = directSoundPlayLock(pDSoundStrmOut->pDSB, &pDSoundStrmOut->strmOut.Props,
-                                     0, pDSoundStrmOut->csPlaybackBufferSize << pDSoundStrmOut->strmOut.Props.cShift,
+                                     0 /* dwOffset */, AUDIOMIXBUF_S2B(&pStrmOut->MixBuf, pDSoundStrmOut->csPlaybackBufferSize),
                                      &pv1, &pv2, &cb1, &cb2, DSBLOCK_ENTIREBUFFER);
     if (SUCCEEDED(hr))
     {
-        int len1 = cb1 >> pDSoundStrmOut->strmOut.Props.cShift;
-        int len2 = cb2 >> pDSoundStrmOut->strmOut.Props.cShift;
+        DWORD len1 = AUDIOMIXBUF_B2S(&pStrmOut->MixBuf, cb1);
+        DWORD len2 = AUDIOMIXBUF_B2S(&pStrmOut->MixBuf, cb2);
 
         if (pv1 && len1)
-            drvAudioClearBuf(&pDSoundStrmOut->strmOut.Props, pv1, len1);
+            DrvAudioClearBuf(&pDSoundStrmOut->strmOut.Props, pv1, cb1, len1);
 
         if (pv2 && len2)
-            drvAudioClearBuf(&pDSoundStrmOut->strmOut.Props, pv2, len2);
+            DrvAudioClearBuf(&pDSoundStrmOut->strmOut.Props, pv2, cb2, len2);
 
         directSoundPlayUnlock(pDSoundStrmOut->pDSB, pv1, pv2, cb1, cb2);
     }
 }
 
-static HRESULT directSoundPlayGetStatus(LPDIRECTSOUNDBUFFER8 pDSB, DWORD *pStatus)
+static HRESULT directSoundPlayGetStatus(LPDIRECTSOUNDBUFFER8 pDSB, DWORD *pdwStatus)
 {
     AssertPtrReturn(pDSB, E_POINTER);
-    /* pStatus is optional. */
+    /* pdwStatus is optional. */
+
+    bool fRestoreBuffer = false;
 
     DWORD dwStatus = 0;
     HRESULT hr = IDirectSoundBuffer8_GetStatus(pDSB, &dwStatus);
     if (SUCCEEDED(hr))
     {
-        if ((dwStatus & DSBSTATUS_BUFFERLOST) != 0)
-        {
-            hr = directSoundPlayRestore(pDSB);
-            if (SUCCEEDED(hr))
-                hr = IDirectSoundBuffer8_GetStatus(pDSB, &dwStatus);
-        }
+        fRestoreBuffer = RT_BOOL(dwStatus & DSBSTATUS_BUFFERLOST);
+    }
+    else if (hr == DSERR_BUFFERLOST)
+        fRestoreBuffer = true;
+
+    if (fRestoreBuffer)
+    {
+        hr = directSoundPlayRestore(pDSB);
+        if (SUCCEEDED(hr))
+            hr = IDirectSoundBuffer8_GetStatus(pDSB, &dwStatus);
     }
 
     if (SUCCEEDED(hr))
     {
-        if (pStatus)
-            *pStatus = dwStatus;
+        if (pdwStatus)
+            *pdwStatus = dwStatus;
     }
     else
         DSLOGREL(("DSound: Playback GetStatus %Rhrc\n", hr));
@@ -561,10 +731,12 @@ static HRESULT directSoundPlayGetStatus(LPDIRECTSOUNDBUFFER8 pDSB, DWORD *pStatu
     return hr;
 }
 
-static void directSoundPlayStop(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundStrmOut)
+static HRESULT directSoundPlayStop(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundStrmOut)
 {
-    AssertPtrReturnVoid(pThis);
-    AssertPtrReturnVoid(pDSoundStrmOut);
+    AssertPtrReturn(pThis, E_POINTER);
+    AssertPtrReturn(pDSoundStrmOut, E_POINTER);
+
+    HRESULT hr;
 
     if (pDSoundStrmOut->pDSB != NULL)
     {
@@ -573,13 +745,17 @@ static void directSoundPlayStop(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundSt
 
         DSLOG(("DSound: Stopping playback\n"));
 
-        /* @todo Wait until all data in the buffer has been played. */
-        HRESULT hr = IDirectSoundBuffer8_Stop(pDSoundStrmOut->pDSB);
+        /** @todo Wait until all data in the buffer has been played. */
+        hr = IDirectSoundBuffer8_Stop(pDSoundStrmOut->pDSB);
         if (SUCCEEDED(hr))
             dsoundPlayClearSamples(pDSoundStrmOut);
         else
             DSLOGREL(("DSound: Stop playback %Rhrc\n", hr));
     }
+    else
+        hr = E_UNEXPECTED;
+
+    return hr;
 }
 
 static HRESULT directSoundPlayStart(PDSOUNDSTREAMOUT pDSoundStrmOut)
@@ -675,6 +851,7 @@ static void directSoundCaptureInterfaceRelease(PDSOUNDSTREAMIN pDSoundStrmIn)
 {
     if (pDSoundStrmIn->pDSC)
     {
+        LogFlowFuncEnter();
         IDirectSoundCapture_Release(pDSoundStrmIn->pDSC);
         pDSoundStrmIn->pDSC = NULL;
     }
@@ -709,26 +886,35 @@ static HRESULT directSoundCaptureInterfaceCreate(PDRVHOSTDSOUND pThis, PDSOUNDST
         }
     }
 
+    LogFlowFunc(("Returning %Rhrc\n", hr));
     return hr;
 }
 
-static void directSoundCaptureClose(PDSOUNDSTREAMIN pDSoundStrmIn)
+static HRESULT directSoundCaptureClose(PDSOUNDSTREAMIN pDSoundStrmIn)
 {
-    AssertPtrReturnVoid(pDSoundStrmIn);
+    AssertPtrReturn(pDSoundStrmIn, E_POINTER);
 
     DSLOG(("DSound: pDSoundStrmIn=%p, pDSCB=%p\n", pDSoundStrmIn, pDSoundStrmIn->pDSCB));
 
+    HRESULT hr = S_OK;
+
     if (pDSoundStrmIn->pDSCB)
     {
-        HRESULT hr = IDirectSoundCaptureBuffer_Stop(pDSoundStrmIn->pDSCB);
-        if (FAILED(hr))
+        hr = IDirectSoundCaptureBuffer_Stop(pDSoundStrmIn->pDSCB);
+        if (SUCCEEDED(hr))
+        {
+            IDirectSoundCaptureBuffer8_Release(pDSoundStrmIn->pDSCB);
+            pDSoundStrmIn->pDSCB = NULL;
+        }
+        else
             DSLOGREL(("DSound: Stop capture buffer %Rhrc\n", hr));
-
-        IDirectSoundCaptureBuffer8_Release(pDSoundStrmIn->pDSCB);
-        pDSoundStrmIn->pDSCB = NULL;
     }
 
-    directSoundCaptureInterfaceRelease(pDSoundStrmIn);
+    if (SUCCEEDED(hr))
+        directSoundCaptureInterfaceRelease(pDSoundStrmIn);
+
+    LogFlowFunc(("Returning %Rhrc\n", hr));
+    return hr;
 }
 
 static HRESULT directSoundCaptureOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDSoundStrmIn)
@@ -852,21 +1038,29 @@ static HRESULT directSoundCaptureOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDSo
     if (FAILED(hr))
         directSoundCaptureClose(pDSoundStrmIn);
 
+    LogFlowFunc(("Returning %Rhrc\n", hr));
     return hr;
 }
 
-static void directSoundCaptureStop(PDSOUNDSTREAMIN pDSoundStrmIn)
+static HRESULT directSoundCaptureStop(PDSOUNDSTREAMIN pDSoundStrmIn)
 {
-    AssertPtrReturnVoid(pDSoundStrmIn);
+    AssertPtrReturn(pDSoundStrmIn, E_POINTER);
+
+    HRESULT hr;
 
     if (pDSoundStrmIn->pDSCB)
     {
         DSLOG(("DSound: Stopping capture\n"));
 
-        HRESULT hr = IDirectSoundCaptureBuffer_Stop(pDSoundStrmIn->pDSCB);
+        hr = IDirectSoundCaptureBuffer_Stop(pDSoundStrmIn->pDSCB);
         if (FAILED(hr))
             DSLOGREL(("DSound: Capture buffer stop %Rhrc\n", hr));
     }
+    else
+        hr = E_UNEXPECTED;
+
+    LogFlowFunc(("Returning %Rhrc\n", hr));
+    return hr;
 }
 
 static HRESULT directSoundCaptureStart(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDSoundStrmIn)
@@ -891,18 +1085,21 @@ static HRESULT directSoundCaptureStart(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDS
             }
             else
             {
+                DWORD fFlags = 0;
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+                fFlags |= DSCBSTART_LOOPING;
+#endif
                 DSLOG(("DSound: Capture start\n"));
-                hr = IDirectSoundCaptureBuffer8_Start(pDSoundStrmIn->pDSCB, DSCBSTART_LOOPING);
+                hr = IDirectSoundCaptureBuffer8_Start(pDSoundStrmIn->pDSCB, fFlags);
                 if (FAILED(hr))
                     DSLOGREL(("DSound: Capture started %Rhrc\n", hr));
             }
         }
     }
     else
-    {
         hr = E_UNEXPECTED;
-    }
 
+    LogFlowFunc(("Returning %Rhrc\n", hr));
     return hr;
 }
 
@@ -1023,7 +1220,7 @@ static DECLCALLBACK(int) drvHostDSoundInitOut(PPDMIHOSTAUDIO pInterface,
     pDSoundStrmOut->streamCfg = *pCfg;
     pDSoundStrmOut->streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
 
-    int rc = drvAudioStreamCfgToProps(&pDSoundStrmOut->streamCfg, &pDSoundStrmOut->strmOut.Props);
+    int rc = DrvAudioStreamCfgToProps(&pDSoundStrmOut->streamCfg, &pDSoundStrmOut->strmOut.Props);
     if (RT_SUCCESS(rc))
     {
         pDSoundStrmOut->pDS = NULL;
@@ -1059,29 +1256,39 @@ static DECLCALLBACK(int) drvHostDSoundControlOut(PPDMIHOSTAUDIO pInterface,
     PDSOUNDSTREAMOUT pDSoundStrmOut = (PDSOUNDSTREAMOUT)pHstStrmOut;
 
     int rc = VINF_SUCCESS;
+
+    HRESULT hr;
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
         {
             /* Try to start playback. If it fails, then reopen and try again. */
-            HRESULT hr = directSoundPlayStart(pDSoundStrmOut);
+            hr = directSoundPlayStart(pDSoundStrmOut);
             if (FAILED(hr))
             {
-                directSoundPlayClose(pDSoundStrmOut);
-                directSoundPlayOpen(pThis, pDSoundStrmOut);
-
-                hr = directSoundPlayStart(pDSoundStrmOut);
+                hr = directSoundPlayClose(pThis, pDSoundStrmOut);
+                if (SUCCEEDED(hr))
+                {
+                    hr = directSoundPlayOpen(pThis, pDSoundStrmOut);
+                    if (SUCCEEDED(hr))
+                        hr = directSoundPlayStart(pDSoundStrmOut);
+                }
             }
 
             if (FAILED(hr))
                 rc = VERR_NOT_SUPPORTED;
 
+            pThis->fEnabledOut = RT_SUCCESS(rc);
             break;
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
         {
-            directSoundPlayStop(pThis, pDSoundStrmOut);
+            hr = directSoundPlayStop(pThis, pDSoundStrmOut);
+            if (SUCCEEDED(hr))
+                pThis->fEnabledOut = false;
             break;
         }
 
@@ -1112,43 +1319,27 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
 
     do /* to use 'break' */
     {
-        LPDIRECTSOUNDBUFFER8 pDSB = pDSoundStrmOut->pDSB;
-        if (!pDSB)
-            break;
-
-        int cShift = pHstStrmOut->Props.cShift;
-        DWORD cbBuffer = pDSoundStrmOut->csPlaybackBufferSize << cShift;
-
-        /* Get the current play position which is used for calculating the free space in the buffer. */
-        DWORD cbPlayPos;
-        HRESULT hr = IDirectSoundBuffer8_GetCurrentPosition(pDSB, &cbPlayPos, NULL);
-        if (hr == DSERR_BUFFERLOST)
-        {
-            hr = directSoundPlayRestore(pDSB);
-            if (SUCCEEDED(hr))
-            {
-                hr = IDirectSoundBuffer8_GetCurrentPosition(pDSB, &cbPlayPos, NULL);
-            }
-        }
-
-        if (FAILED(hr))
+        DWORD cbBuffer, cbFree, cbPlayPos;
+        rc = dsoundGetStatusOut(pDSoundStrmOut, &cbBuffer, &cbFree, &cbPlayPos);
+        if (RT_FAILURE(rc))
         {
-            if (hr != DSERR_BUFFERLOST) /* Avoid log flooding if the error is still there. */
-                DSLOGREL(("DSound: Playback GetCurrentPosition %Rhrc\n", hr));
+            /* Set the output status to disabled, as we are not able to retrieve the current
+             * status (anymore). */
+            pThis->fEnabledOut = false;
             break;
         }
 
-        DWORD cbFree = cbBuffer - dsoundRingDistance(pDSoundStrmOut->cbPlayWritePos, cbPlayPos, cbBuffer);
-
-        /* Check for full buffer, do not allow the cbPlayWritePos to catch cbPlayPos during playback,
+        /*
+         * Check for full buffer, do not allow the cbPlayWritePos to catch cbPlayPos during playback,
          * i.e. always leave a free space for 1 audio sample.
          */
-        if (cbFree <= (1U << cShift))
+        const DWORD cbSample = AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf, 1);
+        if (cbFree <= cbSample)
             break;
-        cbFree -= (1U << cShift);
+        cbFree     -= cbSample;
 
-        uint32_t csLive = drvAudioHstOutSamplesLive(pHstStrmOut);
-        uint32_t cbLive = csLive << cShift;
+        uint32_t csLive = AudioMixBufAvail(&pHstStrmOut->MixBuf);
+        uint32_t cbLive = AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf, csLive);
 
         /* Do not write more than available space in the DirectSound playback buffer. */
         cbLive = RT_MIN(cbFree, cbLive);
@@ -1161,15 +1352,21 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
             break;
         }
 
+        LPDIRECTSOUNDBUFFER8 pDSB = pDSoundStrmOut->pDSB;
+        AssertPtr(pDSB);
+
         LPVOID pv1, pv2;
         DWORD cb1, cb2;
-        hr = directSoundPlayLock(pDSB, &pHstStrmOut->Props, pDSoundStrmOut->cbPlayWritePos, cbLive,
+        HRESULT hr = directSoundPlayLock(pDSB, &pHstStrmOut->Props, pDSoundStrmOut->cbPlayWritePos, cbLive,
                                  &pv1, &pv2, &cb1, &cb2, 0 /* dwFlags */);
         if (FAILED(hr))
+        {
+            rc = VERR_ACCESS_DENIED;
             break;
+        }
 
-        DWORD len1 = cb1 >> cShift;
-        DWORD len2 = cb2 >> cShift;
+        DWORD len1 = AUDIOMIXBUF_B2S(&pHstStrmOut->MixBuf, cb1);
+        DWORD len2 = AUDIOMIXBUF_B2S(&pHstStrmOut->MixBuf, cb2);
 
         uint32_t cRead = 0;
 
@@ -1191,7 +1388,8 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
 
         directSoundPlayUnlock(pDSB, pv1, pv2, cb1, cb2);
 
-        pDSoundStrmOut->cbPlayWritePos = (pDSoundStrmOut->cbPlayWritePos + (cReadTotal << cShift)) % cbBuffer;
+        pDSoundStrmOut->cbPlayWritePos =
+            (pDSoundStrmOut->cbPlayWritePos + AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf, cReadTotal)) % cbBuffer;
 
         DSLOGF(("DSound: %RU32 (%RU32 samples) out of %RU32%s, buffer write pos %ld, rc=%Rrc\n",
                 AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf, cReadTotal), cReadTotal, cbLive,
@@ -1209,22 +1407,33 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
 
         if (pDSoundStrmOut->fRestartPlayback)
         {
-            /* The playback has been just started.
+            /*
+             * The playback has been just started.
              * Some samples of the new sound have been copied to the buffer
              * and it can start playing.
              */
             pDSoundStrmOut->fRestartPlayback = false;
-            hr = IDirectSoundBuffer8_Play(pDSoundStrmOut->pDSB, 0, 0, DSBPLAY_LOOPING);
+
+            DWORD fFlags = 0;
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
+            fFlags |= DSCBSTART_LOOPING;
+#endif
+            hr = IDirectSoundBuffer8_Play(pDSoundStrmOut->pDSB, 0, 0, fFlags);
             if (FAILED(hr))
             {
-                DSLOGREL(("DSound: Playback start %Rhrc\n", hr));
+                DSLOGREL(("DSound: Playback: Unable to start playing, hr=%Rhrc\n", hr));
                 rc = VERR_NOT_SUPPORTED;
+                break;
             }
         }
+
     } while (0);
 
-    if (pcSamplesPlayed)
-        *pcSamplesPlayed = cReadTotal;
+    if (RT_SUCCESS(rc))
+    {
+        if (pcSamplesPlayed)
+            *pcSamplesPlayed = cReadTotal;
+    }
 
     return rc;
 }
@@ -1234,11 +1443,12 @@ static DECLCALLBACK(int) drvHostDSoundFiniOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
     PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
     PDSOUNDSTREAMOUT pDSoundStrmOut = (PDSOUNDSTREAMOUT)pHstStrmOut;
 
-    directSoundPlayClose(pDSoundStrmOut);
+    directSoundPlayClose(pThis, pDSoundStrmOut);
 
     pDSoundStrmOut->cbPlayWritePos = 0;
     pDSoundStrmOut->fRestartPlayback = true;
     pDSoundStrmOut->csPlaybackBufferSize = 0;
+
     RT_ZERO(pDSoundStrmOut->streamCfg);
 
     return VINF_SUCCESS;
@@ -1259,7 +1469,7 @@ static DECLCALLBACK(int) drvHostDSoundInitIn(PPDMIHOSTAUDIO pInterface,
     pDSoundStrmIn->streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
 
     /** @todo caller should already init Props? */
-    int rc = drvAudioStreamCfgToProps(&pDSoundStrmIn->streamCfg, &pHstStrmIn->Props);
+    int rc = DrvAudioStreamCfgToProps(&pDSoundStrmIn->streamCfg, &pHstStrmIn->Props);
     if (RT_SUCCESS(rc))
     {
         /* Init the stream structure and save relevant information to it. */
@@ -1298,34 +1508,47 @@ static DECLCALLBACK(int) drvHostDSoundControlIn(PPDMIHOSTAUDIO pInterface, PPDMA
 
     int rc = VINF_SUCCESS;
 
+    HRESULT hr;
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
         {
             /* Try to start capture. If it fails, then reopen and try again. */
-            HRESULT hr = directSoundCaptureStart(pThis, pDSoundStrmIn);
+            hr = directSoundCaptureStart(pThis, pDSoundStrmIn);
             if (FAILED(hr))
             {
-                directSoundCaptureClose(pDSoundStrmIn);
-                directSoundCaptureOpen(pThis, pDSoundStrmIn);
-
-                hr = directSoundCaptureStart(pThis, pDSoundStrmIn);
+                hr = directSoundCaptureClose(pDSoundStrmIn);
+                if (SUCCEEDED(hr))
+                {
+                    hr = directSoundCaptureOpen(pThis, pDSoundStrmIn);
+                    if (SUCCEEDED(hr))
+                        hr = directSoundCaptureStart(pThis, pDSoundStrmIn);
+                }
             }
 
             if (FAILED(hr))
                 rc = VERR_NOT_SUPPORTED;
-        } break;
+
+            pThis->fEnabledIn = RT_SUCCESS(rc);
+            break;
+        }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
         {
-            directSoundCaptureStop(pDSoundStrmIn);
-        } break;
+            hr = directSoundCaptureStop(pDSoundStrmIn);
+            if (SUCCEEDED(hr))
+                pThis->fEnabledIn = false;
+            break;
+        }
 
         default:
         {
             AssertMsgFailed(("Invalid command %ld\n", enmStreamCmd));
             rc = VERR_INVALID_PARAMETER;
-        } break;
+            break;
+        }
     }
 
     return rc;
@@ -1340,121 +1563,116 @@ static DECLCALLBACK(int) drvHostDSoundCaptureIn(PPDMIHOSTAUDIO pInterface, PPDMA
 
     int rc = VINF_SUCCESS;
 
-    if (pDSCB == NULL)
-    {
-        if (pcSamplesCaptured) /** @todo single point of return */
-            *pcSamplesCaptured = 0;
-        return VINF_SUCCESS;
-    }
+    uint32_t cCaptured = 0;
 
-    /* Get DirectSound capture position in bytes. */
-    DWORD cbReadPos;
-    HRESULT hr = IDirectSoundCaptureBuffer_GetCurrentPosition(pDSCB, NULL, &cbReadPos);
-    if (FAILED(hr))
+    do
     {
-        if (hr != pDSoundStrmIn->hrLastCaptureIn)
+        if (pDSCB == NULL)
         {
-            DSLOGREL(("DSound: Capture GetCurrentPosition %Rhrc\n", hr));
-            pDSoundStrmIn->hrLastCaptureIn = hr;
+            pThis->fEnabledIn = false;
+
+            rc = VERR_NOT_AVAILABLE;
+            break;
         }
 
-        if (pcSamplesCaptured)
-            *pcSamplesCaptured = 0;
-        return VINF_SUCCESS;
-    }
-    pDSoundStrmIn->hrLastCaptureIn = hr;
+        /* Get DirectSound capture position in bytes. */
+        DWORD cbReadPos;
+        HRESULT hr = IDirectSoundCaptureBuffer_GetCurrentPosition(pDSCB, NULL, &cbReadPos);
+        if (FAILED(hr))
+        {
+            if (hr != pDSoundStrmIn->hrLastCaptureIn)
+            {
+                DSLOGREL(("DSound: Capture GetCurrentPosition %Rhrc\n", hr));
+                pDSoundStrmIn->hrLastCaptureIn = hr;
+            }
 
-    if (cbReadPos & pHstStrmIn->Props.uAlign)
-        DSLOGF(("DSound: Misaligned capture read position %ld (alignment: %RU32)\n", cbReadPos, pHstStrmIn->Props.uAlign));
+            rc = VERR_NOT_AVAILABLE;
+            break;
+        }
 
-    /* Capture position in samples. */
-    DWORD csReadPos = cbReadPos >> pHstStrmIn->Props.cShift;
+        pDSoundStrmIn->hrLastCaptureIn = hr;
 
-    /* Number of samples available in the DirectSound capture buffer. */
-    DWORD csCaptured = dsoundRingDistance(csReadPos, pDSoundStrmIn->csCaptureReadPos, pDSoundStrmIn->csCaptureBufferSize);
-    if (csCaptured == 0)
-    {
-        if (pcSamplesCaptured)
-            *pcSamplesCaptured = 0;
-        return VINF_SUCCESS;
-    }
+        if (cbReadPos & pHstStrmIn->Props.uAlign)
+            DSLOGF(("DSound: Misaligned capture read position %ld (alignment: %RU32)\n", cbReadPos, pHstStrmIn->Props.uAlign));
 
-    /* Using as an intermediate not circular buffer. */
-    AudioMixBufReset(&pHstStrmIn->MixBuf);
+        /* Capture position in samples. */
+        DWORD csReadPos = cbReadPos >> pHstStrmIn->Props.cShift;
 
-    /* Get number of free samples in the mix buffer and check that is has free space */
-    uint32_t csMixFree = AudioMixBufFree(&pHstStrmIn->MixBuf);
-    if (csMixFree == 0)
-    {
-        DSLOGF(("DSound: Capture buffer full\n"));
-        if (pcSamplesCaptured)
-            *pcSamplesCaptured = 0;
-        return VINF_SUCCESS;
-    }
+        /* Number of samples available in the DirectSound capture buffer. */
+        DWORD csCaptured = dsoundRingDistance(csReadPos, pDSoundStrmIn->csCaptureReadPos, pDSoundStrmIn->csCaptureBufferSize);
+        if (csCaptured == 0)
+            break;
 
-    DSLOGF(("DSound: Capture csMixFree=%RU32, csReadPos=%ld, csCaptureReadPos=%ld, csCaptured=%ld\n",
-            csMixFree, csReadPos, pDSoundStrmIn->csCaptureReadPos, csCaptured));
+        /* Using as an intermediate not circular buffer. */
+        AudioMixBufReset(&pHstStrmIn->MixBuf);
 
-    /* No need to fetch more samples than mix buffer can receive. */
-    csCaptured = RT_MIN(csCaptured, csMixFree);
+        /* Get number of free samples in the mix buffer and check that is has free space */
+        uint32_t csMixFree = AudioMixBufFree(&pHstStrmIn->MixBuf);
+        if (csMixFree == 0)
+        {
+            DSLOGF(("DSound: Capture buffer full\n"));
+            break;
+        }
 
-    /* Lock relevant range in the DirectSound capture buffer. */
-    LPVOID pv1, pv2;
-    DWORD cb1, cb2;
-    hr = directSoundCaptureLock(pDSCB, &pHstStrmIn->Props,
-                                pDSoundStrmIn->csCaptureReadPos << pHstStrmIn->Props.cShift,
-                                csCaptured << pHstStrmIn->Props.cShift,
-                                &pv1, &pv2, &cb1, &cb2,
-                                0 /* dwFlags */);
-    if (FAILED(hr))
-    {
-        if (pcSamplesCaptured)
-            *pcSamplesCaptured = 0;
-        return VINF_SUCCESS;
-    }
+        DSLOGF(("DSound: Capture csMixFree=%RU32, csReadPos=%ld, csCaptureReadPos=%ld, csCaptured=%ld\n",
+                csMixFree, csReadPos, pDSoundStrmIn->csCaptureReadPos, csCaptured));
 
-    DWORD len1 = cb1 >> pHstStrmIn->Props.cShift;
-    DWORD len2 = cb2 >> pHstStrmIn->Props.cShift;
+        /* No need to fetch more samples than mix buffer can receive. */
+        csCaptured = RT_MIN(csCaptured, csMixFree);
 
-    uint32_t csWrittenTotal = 0;
-    uint32_t csWritten;
-    if (pv1 && len1)
-    {
-        rc = AudioMixBufWriteAt(&pHstStrmIn->MixBuf, 0 /* offWrite */,
-                                pv1, cb1, &csWritten);
-        if (RT_SUCCESS(rc))
-            csWrittenTotal += csWritten;
-    }
+        /* Lock relevant range in the DirectSound capture buffer. */
+        LPVOID pv1, pv2;
+        DWORD cb1, cb2;
+        hr = directSoundCaptureLock(pDSCB, &pHstStrmIn->Props,
+                                    AUDIOMIXBUF_S2B(&pHstStrmIn->MixBuf, pDSoundStrmIn->csCaptureReadPos), /* dwOffset */
+                                    AUDIOMIXBUF_S2B(&pHstStrmIn->MixBuf, csCaptured),                      /* dwBytes */
+                                    &pv1, &pv2, &cb1, &cb2,
+                                    0 /* dwFlags */);
+        if (FAILED(hr))
+        {
+            rc = VERR_ACCESS_DENIED;
+            break;
+        }
 
-    if (   RT_SUCCESS(rc)
-        && csWrittenTotal == len1
-        && pv2 && len2)
-    {
-        rc = AudioMixBufWriteAt(&pHstStrmIn->MixBuf, csWrittenTotal,
-                                pv2, cb2, &csWritten);
-        if (RT_SUCCESS(rc))
-            csWrittenTotal += csWritten;
-    }
+        DWORD len1 = AUDIOMIXBUF_B2S(&pHstStrmIn->MixBuf, cb1);
+        DWORD len2 = AUDIOMIXBUF_B2S(&pHstStrmIn->MixBuf, cb2);
 
-    directSoundCaptureUnlock(pDSCB, pv1, pv2, cb1, cb2);
+        uint32_t csWrittenTotal = 0;
+        uint32_t csWritten;
+        if (pv1 && len1)
+        {
+            rc = AudioMixBufWriteAt(&pHstStrmIn->MixBuf, 0 /* offWrite */,
+                                    pv1, cb1, &csWritten);
+            if (RT_SUCCESS(rc))
+                csWrittenTotal += csWritten;
+        }
 
-    uint32_t csProcessed = 0;
-    if (csWrittenTotal != 0)
-    {
-        /* Captured something. */
-        rc = AudioMixBufMixToParent(&pHstStrmIn->MixBuf, csWrittenTotal,
-                                    &csProcessed);
-    }
+        if (   RT_SUCCESS(rc)
+            && csWrittenTotal == len1
+            && pv2 && len2)
+        {
+            rc = AudioMixBufWriteAt(&pHstStrmIn->MixBuf, csWrittenTotal,
+                                    pv2, cb2, &csWritten);
+            if (RT_SUCCESS(rc))
+                csWrittenTotal += csWritten;
+        }
 
-    if (RT_SUCCESS(rc))
-    {
-        pDSoundStrmIn->csCaptureReadPos = (pDSoundStrmIn->csCaptureReadPos + csProcessed) % pDSoundStrmIn->csCaptureBufferSize;
-        DSLOGF(("DSound: Capture %ld (%ld+%ld), processed %RU32/%RU32\n",
-                csCaptured, len1, len2, csProcessed, csWrittenTotal));
-    }
+        directSoundCaptureUnlock(pDSCB, pv1, pv2, cb1, cb2);
+
+        if (csWrittenTotal) /* Captured something? */
+            rc = AudioMixBufMixToParent(&pHstStrmIn->MixBuf, csWrittenTotal, &cCaptured);
+
+        if (RT_SUCCESS(rc))
+        {
+            pDSoundStrmIn->csCaptureReadPos = (pDSoundStrmIn->csCaptureReadPos + cCaptured) % pDSoundStrmIn->csCaptureBufferSize;
+            DSLOGF(("DSound: Capture %ld (%ld+%ld), processed %RU32/%RU32\n",
+                    csCaptured, len1, len2, cCaptured, csWrittenTotal));
+        }
+
+    } while (0);
 
     if (pcSamplesCaptured)
-        *pcSamplesCaptured = csProcessed;
+        *pcSamplesCaptured = cCaptured;
 
     return rc;
 }
@@ -1473,18 +1691,25 @@ static DECLCALLBACK(int) drvHostDSoundFiniIn(PPDMIHOSTAUDIO pInterface, PPDMAUDI
     return VINF_SUCCESS;
 }
 
+/** @todo Replace PDMAUDIODIR with a (registered? unique) channel ID to provide multi-channel input/output. */
 static DECLCALLBACK(bool) drvHostDSoundIsEnabled(PPDMIHOSTAUDIO pInterface, PDMAUDIODIR enmDir)
 {
-    NOREF(pInterface);
-    NOREF(enmDir);
-    return true; /* Always all enabled. */
+    AssertPtrReturn(pInterface, false);
+
+    PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
+
+    if (enmDir == PDMAUDIODIR_IN)
+        return pThis->fEnabledIn;
+
+    return pThis->fEnabledOut;
 }
 
 static DECLCALLBACK(int) drvHostDSoundGetConf(PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDCFG pCfg)
 {
-    PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
+    AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
+    AssertPtrReturn(pCfg,       VERR_INVALID_POINTER);
 
-    AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
+    PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
 
     dsoundFreeDeviceLists(pThis);
 
@@ -1548,9 +1773,138 @@ static DECLCALLBACK(int) drvHostDSoundGetConf(PPDMIHOSTAUDIO pInterface, PPDMAUD
     return VINF_SUCCESS;
 }
 
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+static int dsoundNotifyThread(PDRVHOSTDSOUND pThis, bool fShutdown)
+{
+    AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+
+    if (fShutdown)
+    {
+        LogFlowFunc(("Shutting down thread ...\n"));
+        pThis->fShutdown = fShutdown;
+    }
+
+    /* Set the notification event so that the thread is being notified. */
+    BOOL fRc = SetEvent(pThis->aEvents[DSOUNDEVENT_NOTIFY]);
+    Assert(fRc);
+
+    return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) drvHostDSoundThread(RTTHREAD hThreadSelf, void *pvUser)
+{
+    PDRVHOSTDSOUND pThis = (PDRVHOSTDSOUND)pvUser;
+    AssertPtr(pThis);
+
+    LogFlowFuncEnter();
+
+    /* Let caller know that we're done initializing, regardless of the result. */
+    int rc = RTThreadUserSignal(hThreadSelf);
+    AssertRC(rc);
+
+    do
+    {
+        HANDLE aEvents[VBOX_DSOUND_MAX_EVENTS];
+        DWORD  cEvents = 0;
+        for (uint8_t i = 0; i < VBOX_DSOUND_MAX_EVENTS; i++)
+        {
+            if (pThis->aEvents[i])
+                aEvents[cEvents++] = pThis->aEvents[i];
+        }
+        Assert(cEvents);
+
+        LogFlowFunc(("Waiting: cEvents=%ld\n", cEvents));
+
+        DWORD dwObj = WaitForMultipleObjects(cEvents, aEvents, FALSE /* bWaitAll */, INFINITE);
+        switch (dwObj)
+        {
+            case WAIT_FAILED:
+            {
+                rc = VERR_CANCELLED;
+                break;
+            }
+
+            case WAIT_TIMEOUT:
+            {
+                rc = VERR_TIMEOUT;
+                break;
+            }
+
+            default:
+            {
+                dwObj = WAIT_OBJECT_0 + cEvents - 1;
+                if (aEvents[dwObj] == pThis->aEvents[DSOUNDEVENT_NOTIFY])
+                {
+                    LogFlowFunc(("Notify\n"));
+                }
+                else if (aEvents[dwObj] == pThis->aEvents[DSOUNDEVENT_INPUT])
+                {
+
+                }
+                else if (aEvents[dwObj] == pThis->aEvents[DSOUNDEVENT_OUTPUT])
+                {
+                    DWORD cbBuffer, cbFree, cbPlayPos;
+                    rc = dsoundGetStatusOut(pThis->pDSStrmOut, &cbBuffer, &cbFree, &cbPlayPos);
+                    if (   RT_SUCCESS(rc)
+                        && cbFree)
+                    {
+                        PDMAUDIOCALLBACKDATAOUT Out;
+                        Out.cbInFree     = cbFree;
+                        Out.cbOutWritten = 0;
+
+                        while (!Out.cbOutWritten)
+                        {
+                            rc = pThis->pUpIAudioConnector->pfnCallback(pThis->pUpIAudioConnector,
+                                                                        PDMAUDIOCALLBACKTYPE_OUTPUT, &Out, sizeof(Out));
+                            if (RT_FAILURE(rc))
+                                break;
+                            RTThreadSleep(100);
+                        }
+
+                        LogFlowFunc(("Output: cbBuffer=%ld, cbFree=%ld, cbPlayPos=%ld, cbWritten=%RU32, rc=%Rrc\n",
+                                     cbBuffer, cbFree, cbPlayPos, Out.cbOutWritten, rc));
+                    }
+                }
+                break;
+            }
+        }
+
+        if (pThis->fShutdown)
+            break;
+
+    } while (RT_SUCCESS(rc));
+
+    pThis->fStopped = true;
+
+    LogFlowFunc(("Exited with fShutdown=%RTbool, rc=%Rrc\n", pThis->fShutdown, rc));
+    return rc;
+}
+#endif /* VBOX_WITH_AUDIO_CALLBACKS */
+
 static DECLCALLBACK(void) drvHostDSoundShutdown(PPDMIHOSTAUDIO pInterface)
 {
-    NOREF(pInterface);
+    PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
+
+    LogFlowFuncEnter();
+
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    int rc = dsoundNotifyThread(pThis, true /* fShutdown */);
+    AssertRC(rc);
+
+    int rcThread;
+    rc = RTThreadWait(pThis->Thread,  15 * 1000 /* 15s timeout */, &rcThread);
+    LogFlowFunc(("rc=%Rrc, rcThread=%Rrc\n", rc, rcThread));
+
+    Assert(pThis->fStopped);
+
+    if (pThis->aEvents[DSOUNDEVENT_NOTIFY])
+    {
+        CloseHandle(pThis->aEvents[DSOUNDEVENT_NOTIFY]);
+        pThis->aEvents[DSOUNDEVENT_NOTIFY] = NULL;
+}
+#endif
+
+    LogFlowFuncLeave();
 }
 
 static DECLCALLBACK(int) drvHostDSoundInit(PPDMIHOSTAUDIO pInterface)
@@ -1559,16 +1913,45 @@ static DECLCALLBACK(int) drvHostDSoundInit(PPDMIHOSTAUDIO pInterface)
 
     LogFlowFuncEnter();
 
+    int rc;
+
     /* Verify that IDirectSound is available. */
     LPDIRECTSOUND pDirectSound = NULL;
     HRESULT hr = CoCreateInstance(CLSID_DirectSound, NULL, CLSCTX_ALL,
                                   IID_IDirectSound, (void **)&pDirectSound);
     if (SUCCEEDED(hr))
+    {
         IDirectSound_Release(pDirectSound);
+
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+        /* Create notification event. */
+        pThis->aEvents[DSOUNDEVENT_NOTIFY] = CreateEvent(NULL /* Security attribute */,
+                                                         FALSE /* bManualReset */, FALSE /* bInitialState */,
+                                                         NULL /* lpName */);
+        Assert(pThis->aEvents[DSOUNDEVENT_NOTIFY] != NULL);
+
+        /* Start notification thread. */
+        rc = RTThreadCreate(&pThis->Thread, drvHostDSoundThread,
+                            pThis /*pvUser*/, 0 /*cbStack*/,
+                            RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "dSoundNtfy");
+        if (RT_SUCCESS(rc))
+        {
+            /* Wait for the thread to initialize. */
+            rc = RTThreadUserWait(pThis->Thread, RT_MS_1MIN);
+            if (RT_FAILURE(rc))
+                DSLOGREL(("DSound: Waiting for thread to initialize failed with rc=%Rrc\n", rc));
+        }
+    else
+            DSLOGREL(("DSound: Creating thread failed with rc=%Rrc\n", rc));
+#else
+        rc = VINF_SUCCESS;
+#endif
+    }
     else
+    {
         DSLOGREL(("DSound: DirectSound not available %Rhrc\n", hr));
-
-    int rc = SUCCEEDED(hr) ? VINF_SUCCESS: VERR_NOT_SUPPORTED;
+        rc = VERR_NOT_SUPPORTED;
+    }
 
     LogFlowFuncLeaveRC(rc);
     return rc;
@@ -1584,35 +1967,13 @@ static DECLCALLBACK(void *) drvHostDSoundQueryInterface(PPDMIBASE pInterface, co
     return NULL;
 }
 
-static int dsoundConfigQueryStringAlloc(PCFGMNODE pNode, const char *pszName, char **ppszString)
-{
-    /** @todo r=bird: What's wrong with CFGMR3QueryStringAlloc ??   */
-    size_t cbString;
-    int rc = CFGMR3QuerySize(pNode, pszName, &cbString);
-    if (RT_SUCCESS(rc))
-    {
-        char *pszString = RTStrAlloc(cbString);
-        if (pszString)
-        {
-            rc = CFGMR3QueryString(pNode, pszName, pszString, cbString);
-            if (RT_SUCCESS(rc))
-                *ppszString = pszString;
-            else
-                RTStrFree(pszString);
-        }
-        else
-            rc = VERR_NO_MEMORY;
-    }
-    return rc;
-}
-
 static LPCGUID dsoundConfigQueryGUID(PCFGMNODE pCfg, const char *pszName, RTUUID *pUuid)
 {
     LPCGUID pGuid = NULL;
 
     char *pszGuid = NULL;
-    dsoundConfigQueryStringAlloc(pCfg, pszName, &pszGuid);
-    if (pszGuid)
+    int rc = CFGMR3QueryStringAlloc(pCfg, pszName, &pszGuid);
+    if (RT_SUCCESS(rc))
     {
         int rc = RTUuidFromStr(pUuid, pszGuid);
         if (RT_SUCCESS(rc))
@@ -1678,17 +2039,42 @@ static DECLCALLBACK(int) drvHostDSoundConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pC
     }
 
     /*
-     * Init the static parts.
+     * Init basic data members and interfaces.
      */
-    pThis->pDrvIns                    = pDrvIns;
+    pThis->pDrvIns                   = pDrvIns;
     /* IBase */
-    pDrvIns->IBase.pfnQueryInterface  = drvHostDSoundQueryInterface;
+    pDrvIns->IBase.pfnQueryInterface = drvHostDSoundQueryInterface;
     /* IHostAudio */
     PDMAUDIO_IHOSTAUDIO_CALLBACKS(drvHostDSound);
 
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    /*
+     * Get the IAudioConnector interface of the above driver/device.
+     */
+    pThis->pUpIAudioConnector = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIAUDIOCONNECTOR);
+    if (!pThis->pUpIAudioConnector)
+    {
+        AssertMsgFailed(("Configuration error: No audio connector interface above!\n"));
+        return VERR_PDM_MISSING_INTERFACE_ABOVE;
+    }
+#endif
+
+    /*
+     * Init the static parts.
+     */
     RTListInit(&pThis->lstDevInput);
     RTListInit(&pThis->lstDevOutput);
 
+    pThis->fEnabledIn  = false;
+    pThis->fEnabledOut = false;
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    pThis->fStopped  = false;
+    pThis->fShutdown = false;
+
+    RT_ZERO(pThis->aEvents);
+    pThis->cEvents = 0;
+#endif
+
     /*
      * Initialize configuration values.
      */
@@ -1713,7 +2099,7 @@ const PDMDRVREG g_DrvHostDSound =
     /* pszDescription */
     "DirectSound Audio host driver",
     /* fFlags */
-     PDM_DRVREG_FLAGS_HOST_BITS_DEFAULT,
+    PDM_DRVREG_FLAGS_HOST_BITS_DEFAULT,
     /* fClass. */
     PDM_DRVREG_CLASS_AUDIO,
     /* cMaxInstances */
diff --git a/src/VBox/Devices/Audio/DrvHostNullAudio.cpp b/src/VBox/Devices/Audio/DrvHostNullAudio.cpp
index f5c4a80..c56aca6 100644
--- a/src/VBox/Devices/Audio/DrvHostNullAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostNullAudio.cpp
@@ -54,17 +54,17 @@
 typedef struct NULLAUDIOSTREAMOUT
 {
     /** Note: Always must come first! */
-    PDMAUDIOHSTSTRMOUT hw;
+    PDMAUDIOHSTSTRMOUT streamOut;
     uint64_t u64TicksLast;
     uint64_t csPlayBuffer;
     uint8_t *pu8PlayBuffer;
-} NULLAUDIOSTREAMOUT;
+} NULLAUDIOSTREAMOUT, *PNULLAUDIOSTREAMOUT;
 
 typedef struct NULLAUDIOSTREAMIN
 {
     /** Note: Always must come first! */
-    PDMAUDIOHSTSTRMIN hw;
-} NULLAUDIOSTREAMIN;
+    PDMAUDIOHSTSTRMIN  streamIn;
+} NULLAUDIOSTREAMIN, *PNULLAUDIOSTREAMIN;
 
 /**
  * NULL audio driver instance data.
@@ -111,7 +111,7 @@ static DECLCALLBACK(int) drvHostNullAudioInitIn(PPDMIHOSTAUDIO pInterface,
     NOREF(enmRecSource);
 
     /* Just adopt the wanted stream configuration. */
-    int rc = drvAudioStreamCfgToProps(pCfg, &pHstStrmIn->Props);
+    int rc = DrvAudioStreamCfgToProps(pCfg, &pHstStrmIn->Props);
     if (RT_SUCCESS(rc))
     {
         if (pcSamples)
@@ -128,10 +128,10 @@ static DECLCALLBACK(int) drvHostNullAudioInitOut(PPDMIHOSTAUDIO pInterface,
     NOREF(pInterface);
 
     /* Just adopt the wanted stream configuration. */
-    int rc = drvAudioStreamCfgToProps(pCfg, &pHstStrmOut->Props);
+    int rc = DrvAudioStreamCfgToProps(pCfg, &pHstStrmOut->Props);
     if (RT_SUCCESS(rc))
     {
-        NULLAUDIOSTREAMOUT *pNullStrmOut = (NULLAUDIOSTREAMOUT *)pHstStrmOut;
+        PNULLAUDIOSTREAMOUT pNullStrmOut = (PNULLAUDIOSTREAMOUT)pHstStrmOut;
         pNullStrmOut->u64TicksLast = 0;
         pNullStrmOut->csPlayBuffer = _1K;
         pNullStrmOut->pu8PlayBuffer = (uint8_t *)RTMemAlloc(_1K << pHstStrmOut->Props.cShift);
@@ -160,18 +160,19 @@ static DECLCALLBACK(int) drvHostNullAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPDM
                                                  uint32_t *pcSamplesPlayed)
 {
     PDRVHOSTNULLAUDIO pDrv = RT_FROM_MEMBER(pInterface, DRVHOSTNULLAUDIO, IHostAudio);
-    NULLAUDIOSTREAMOUT *pNullStrmOut = (NULLAUDIOSTREAMOUT *)pHstStrmOut;
+    PNULLAUDIOSTREAMOUT pNullStrmOut = (PNULLAUDIOSTREAMOUT)pHstStrmOut;
 
     /* Consume as many samples as would be played at the current frequency since last call. */
-    uint32_t csLive = drvAudioHstOutSamplesLive(pHstStrmOut);
-    uint64_t u64TicksNow = PDMDrvHlpTMGetVirtualTime(pDrv->pDrvIns);
+    uint32_t csLive          = AudioMixBufAvail(&pHstStrmOut->MixBuf);
+    uint64_t u64TicksNow     = PDMDrvHlpTMGetVirtualTime(pDrv->pDrvIns);
     uint64_t u64TicksElapsed = u64TicksNow  - pNullStrmOut->u64TicksLast;
-    uint64_t u64TicksFreq = PDMDrvHlpTMGetVirtualFreq(pDrv->pDrvIns);
+    uint64_t u64TicksFreq    = PDMDrvHlpTMGetVirtualFreq(pDrv->pDrvIns);
 
     /* Remember when samples were consumed. */
     pNullStrmOut->u64TicksLast = u64TicksNow;
 
-    /* Minimize the rounding error by adding 0.5: samples = int((u64TicksElapsed * samplesFreq) / u64TicksFreq + 0.5).
+    /*
+     * Minimize the rounding error by adding 0.5: samples = int((u64TicksElapsed * samplesFreq) / u64TicksFreq + 0.5).
      * If rounding is not taken into account then the playback rate will be consistently lower that expected.
      */
     uint64_t cSamplesPlayed = (2 * u64TicksElapsed * pHstStrmOut->Props.uHz + u64TicksFreq) / u64TicksFreq / 2;
@@ -183,7 +184,8 @@ static DECLCALLBACK(int) drvHostNullAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPDM
     cSamplesPlayed = RT_MIN(cSamplesPlayed, pNullStrmOut->csPlayBuffer);
 
     uint32_t csRead = 0;
-    AudioMixBufReadCirc(&pHstStrmOut->MixBuf, pNullStrmOut->pu8PlayBuffer, cSamplesPlayed << pHstStrmOut->Props.cShift, &csRead);
+    AudioMixBufReadCirc(&pHstStrmOut->MixBuf, pNullStrmOut->pu8PlayBuffer,
+                        AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf, cSamplesPlayed), &csRead);
     AudioMixBufFinish(&pHstStrmOut->MixBuf, csRead);
 
     if (pcSamplesPlayed)
@@ -229,8 +231,12 @@ static DECLCALLBACK(int) drvHostNullAudioFiniIn(PPDMIHOSTAUDIO pInterface, PPDMA
 
 static DECLCALLBACK(int) drvHostNullAudioFiniOut(PPDMIHOSTAUDIO pInterface, PPDMAUDIOHSTSTRMOUT pHstStrmOut)
 {
-    NULLAUDIOSTREAMOUT *pNullStrmOut = (NULLAUDIOSTREAMOUT *)pHstStrmOut;
-    RTMemFree(pNullStrmOut->pu8PlayBuffer);
+    PNULLAUDIOSTREAMOUT pNullStrmOut = (PNULLAUDIOSTREAMOUT)pHstStrmOut;
+    if (   pNullStrmOut
+        && pNullStrmOut->pu8PlayBuffer)
+    {
+        RTMemFree(pNullStrmOut->pu8PlayBuffer);
+    }
     return VINF_SUCCESS;
 }
 
diff --git a/src/VBox/Devices/Audio/DrvHostOSSAudio.cpp b/src/VBox/Devices/Audio/DrvHostOSSAudio.cpp
index 21c2369..038b5f1 100644
--- a/src/VBox/Devices/Audio/DrvHostOSSAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostOSSAudio.cpp
@@ -65,8 +65,10 @@ typedef struct OSSAUDIOSTREAMIN
     int                hFile;
     int                cFragments;
     int                cbFragmentSize;
-    void              *pvBuf;
-    size_t             cbBuf;
+    /** Own PCM buffer. */
+    void              *pvPCMBuf;
+    /** Size (in bytes) of own PCM buffer. */
+    size_t             cbPCMBuf;
     int                old_optr;
 } OSSAUDIOSTREAMIN, *POSSAUDIOSTREAMIN;
 
@@ -78,9 +80,14 @@ typedef struct OSSAUDIOSTREAMOUT
     int                 cFragments;
     int                 cbFragmentSize;
 #ifndef RT_OS_L4
+    /** Whether we use a memory mapped file instead of our
+     *  own allocated PCM buffer below. */
     bool                fMemMapped;
 #endif
+    /** Own PCM buffer in case memory mapping is unavailable. */
     void               *pvPCMBuf;
+    /** Size (in bytes) of own PCM buffer. */
+    size_t              cbPCMBuf;
     int                 old_optr;
 } OSSAUDIOSTREAMOUT, *POSSAUDIOSTREAMOUT;
 
@@ -351,9 +358,10 @@ static DECLCALLBACK(int) drvHostOSSAudioControlOut(PPDMIHOSTAUDIO pInterface, PP
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
         {
-            drvAudioClearBuf(&pHstStrmOut->Props,
-                             pThisStrmOut->pvPCMBuf, AudioMixBufSize(&pHstStrmOut->MixBuf));
+            DrvAudioClearBuf(&pHstStrmOut->Props,
+                             pThisStrmOut->pvPCMBuf, pThisStrmOut->cbPCMBuf, AudioMixBufSize(&pHstStrmOut->MixBuf));
 
             mask = PCM_ENABLE_OUTPUT;
             if (ioctl(pThisStrmOut->hFile, SNDCTL_DSP_SETTRIGGER, &mask) < 0)
@@ -366,6 +374,7 @@ static DECLCALLBACK(int) drvHostOSSAudioControlOut(PPDMIHOSTAUDIO pInterface, PP
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
         {
             mask = 0;
             if (ioctl(pThisStrmOut->hFile, SNDCTL_DSP_SETTRIGGER, &mask) < 0)
@@ -405,7 +414,7 @@ static DECLCALLBACK(int) drvHostOSSAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PPD
     POSSAUDIOSTREAMIN pThisStrmIn = (POSSAUDIOSTREAMIN)pHstStrmIn;
 
     int rc = VINF_SUCCESS;
-    size_t cbToRead = RT_MIN(pThisStrmIn->cbBuf,
+    size_t cbToRead = RT_MIN(pThisStrmIn->cbPCMBuf,
                              AudioMixBufFreeBytes(&pHstStrmIn->MixBuf));
 
     LogFlowFunc(("cbToRead=%zu\n", cbToRead));
@@ -417,9 +426,9 @@ static DECLCALLBACK(int) drvHostOSSAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PPD
 
     while (cbToRead)
     {
-        cbTemp = RT_MIN(cbToRead, pThisStrmIn->cbBuf);
+        cbTemp = RT_MIN(cbToRead, pThisStrmIn->cbPCMBuf);
         AssertBreakStmt(cbTemp, rc = VERR_NO_DATA);
-        cbRead = read(pThisStrmIn->hFile, (uint8_t *)pThisStrmIn->pvBuf + offWrite, cbTemp);
+        cbRead = read(pThisStrmIn->hFile, (uint8_t *)pThisStrmIn->pvPCMBuf + offWrite, cbTemp);
 
         LogFlowFunc(("cbRead=%zi, cbTemp=%RU32, cbToRead=%zu\n",
                      cbRead, cbTemp, cbToRead));
@@ -454,7 +463,7 @@ static DECLCALLBACK(int) drvHostOSSAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PPD
         {
             uint32_t cWritten;
             rc = AudioMixBufWriteCirc(&pHstStrmIn->MixBuf,
-                                      pThisStrmIn->pvBuf, cbRead,
+                                      pThisStrmIn->pvPCMBuf, cbRead,
                                       &cWritten);
             if (RT_FAILURE(rc))
                 break;
@@ -500,12 +509,16 @@ static DECLCALLBACK(int) drvHostOSSAudioFiniIn(PPDMIHOSTAUDIO pInterface, PPDMAU
 
     LogFlowFuncEnter();
 
-    if (pThisStrmIn->pvBuf)
+    if (pThisStrmIn->pvPCMBuf)
     {
-        RTMemFree(pThisStrmIn->pvBuf);
-        pThisStrmIn->pvBuf = NULL;
+        Assert(pThisStrmIn->cbPCMBuf);
+
+        RTMemFree(pThisStrmIn->pvPCMBuf);
+        pThisStrmIn->pvPCMBuf = NULL;
     }
 
+    pThisStrmIn->cbPCMBuf = 0;
+
     return VINF_SUCCESS;
 }
 
@@ -523,9 +536,13 @@ static DECLCALLBACK(int) drvHostOSSAudioFiniOut(PPDMIHOSTAUDIO pInterface, PPDMA
     {
         if (pThisStrmOut->pvPCMBuf)
         {
+            Assert(pThisStrmOut->cbPCMBuf);
+
             RTMemFree(pThisStrmOut->pvPCMBuf);
             pThisStrmOut->pvPCMBuf = NULL;
         }
+
+        pThisStrmOut->cbPCMBuf = 0;
     }
 #endif
 
@@ -586,7 +603,7 @@ static DECLCALLBACK(int) drvHostOSSAudioInitIn(PPDMIHOSTAUDIO pInterface,
             streamCfg.cChannels     = pCfg->cChannels;
             streamCfg.enmEndianness = obtStream.enmENDIANNESS;
 
-            rc = drvAudioStreamCfgToProps(&streamCfg, &pHstStrmIn->Props);
+            rc = DrvAudioStreamCfgToProps(&streamCfg, &pHstStrmIn->Props);
             if (RT_SUCCESS(rc))
             {
                 cSamples = (obtStream.cFragments * obtStream.cbFragmentSize)
@@ -598,16 +615,16 @@ static DECLCALLBACK(int) drvHostOSSAudioInitIn(PPDMIHOSTAUDIO pInterface,
 
         if (RT_SUCCESS(rc))
         {
-            size_t cbBuf = cSamples * (1 << pHstStrmIn->Props.cShift);
-            pThisStrmIn->pvBuf = RTMemAlloc(cbBuf);
-            if (!pThisStrmIn->pvBuf)
+            size_t cbSample = (1 << pHstStrmIn->Props.cShift);
+            size_t cbBuf    = cSamples * cbSample;
+            pThisStrmIn->pvPCMBuf = RTMemAlloc(cbBuf);
+            if (!pThisStrmIn->pvPCMBuf)
             {
-                LogRel(("OSS: Failed allocating ADC buffer with %RU32 samples, each %d bytes\n",
-                        cSamples, 1 << pHstStrmIn->Props.cShift));
+                LogRel(("OSS: Failed allocating ADC buffer with %RU32 samples (%zu bytes per sample)\n", cSamples, cbSample));
                 rc = VERR_NO_MEMORY;
             }
 
-            pThisStrmIn->cbBuf = cbBuf;
+            pThisStrmIn->cbPCMBuf = cbBuf;
 
             if (pcSamples)
                 *pcSamples = cSamples;
@@ -663,7 +680,7 @@ static DECLCALLBACK(int) drvHostOSSAudioInitOut(PPDMIHOSTAUDIO pInterface,
             streamCfg.cChannels     = pCfg->cChannels;
             streamCfg.enmEndianness = obtStream.enmENDIANNESS;
 
-            rc = drvAudioStreamCfgToProps(&streamCfg, &pHstStrmOut->Props);
+            rc = DrvAudioStreamCfgToProps(&streamCfg, &pHstStrmOut->Props);
             if (RT_SUCCESS(rc))
                 cSamples = (obtStream.cFragments * obtStream.cbFragmentSize)
                            >> pHstStrmOut->Props.cShift;
@@ -713,9 +730,7 @@ static DECLCALLBACK(int) drvHostOSSAudioInitOut(PPDMIHOSTAUDIO pInterface,
                         int rc2 = munmap(pThisStrmOut->pvPCMBuf,
                                          cSamples << pHstStrmOut->Props.cShift);
                         if (rc2)
-                            LogRel(("OSS: Failed to unmap DAC output file: %s\n",
-                                    strerror(errno)));
-
+                            LogRel(("OSS: Failed to unmap DAC output file: %s\n", strerror(errno)));
                         break;
                     }
                 }
@@ -727,15 +742,20 @@ static DECLCALLBACK(int) drvHostOSSAudioInitOut(PPDMIHOSTAUDIO pInterface,
             if (!pThisStrmOut->fMemMapped)
             {
 #endif
+                size_t cbSample = (1 << pHstStrmOut->Props.cShift);
+                size_t cbPCMBuf = cSamples * cbSample;
+
                 LogFlowFunc(("cSamples=%RU32\n", cSamples));
-                pThisStrmOut->pvPCMBuf = RTMemAlloc(cSamples * (1 << pHstStrmOut->Props.cShift));
+
+                pThisStrmOut->pvPCMBuf = RTMemAlloc(cbPCMBuf);
                 if (!pThisStrmOut->pvPCMBuf)
                 {
-                    LogRel(("OSS: Failed allocating DAC buffer with %RU32 samples, each %d bytes\n",
-                            cSamples, 1 << pHstStrmOut->Props.cShift));
+                    LogRel(("OSS: Failed allocating DAC buffer with %RU32 samples (%zu bytes per sample)\n", cSamples, cbSample));
                     rc = VERR_NO_MEMORY;
                     break;
                 }
+
+                pThisStrmOut->cbPCMBuf = cbPCMBuf;
 #ifndef RT_OS_L4
             }
 #endif
@@ -775,7 +795,7 @@ static DECLCALLBACK(int) drvHostOSSAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPDMA
     {
         size_t cbBuf = AudioMixBufSizeBytes(&pHstStrmOut->MixBuf);
 
-        uint32_t cLive = drvAudioHstOutSamplesLive(pHstStrmOut);
+        uint32_t cLive = AudioMixBufAvail(&pHstStrmOut->MixBuf);
         uint32_t cToRead;
 
 #ifndef RT_OS_L4
@@ -857,7 +877,7 @@ static DECLCALLBACK(int) drvHostOSSAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPDMA
                                       cbRead);
             if (cbWritten == -1)
             {
-                LogRel(("OSS: Failed writing output data %s\n", strerror(errno)));
+                LogRel(("OSS: Failed writing output data: %s\n", strerror(errno)));
                 rc = RTErrConvertFromErrno(errno);
                 break;
             }
diff --git a/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp b/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
index 7f079d0..0ed18ac 100644
--- a/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
@@ -603,7 +603,7 @@ static DECLCALLBACK(int) drvHostPulseAudioInitOut(PPDMIHOSTAUDIO pInterface,
     streamCfg.uHz       = pThisStrmOut->SampleSpec.rate;
     streamCfg.cChannels = pThisStrmOut->SampleSpec.channels;
 
-    rc = drvAudioStreamCfgToProps(&streamCfg, &pHstStrmOut->Props);
+    rc = DrvAudioStreamCfgToProps(&streamCfg, &pHstStrmOut->Props);
     if (RT_SUCCESS(rc))
     {
         uint32_t cbBuf  = RT_MIN(pThisStrmOut->BufAttr.tlength * 2,
@@ -686,7 +686,7 @@ static DECLCALLBACK(int) drvHostPulseAudioInitIn(PPDMIHOSTAUDIO pInterface,
     streamCfg.uHz       = pThisStrmIn->SampleSpec.rate;
     streamCfg.cChannels = pThisStrmIn->SampleSpec.channels;
 
-    rc = drvAudioStreamCfgToProps(&streamCfg, &pHstStrmIn->Props);
+    rc = DrvAudioStreamCfgToProps(&streamCfg, &pHstStrmIn->Props);
     if (RT_SUCCESS(rc))
     {
         uint32_t cSamples = RT_MIN(pThisStrmIn->BufAttr.fragsize * 10, pThisStrmIn->BufAttr.maxlength)
@@ -837,7 +837,7 @@ static DECLCALLBACK(int) drvHostPulseAudioPlayOut(PPDMIHOSTAUDIO pInterface, PPD
     int rc = VINF_SUCCESS;
     uint32_t cbReadTotal = 0;
 
-    uint32_t cLive = drvAudioHstOutSamplesLive(pHstStrmOut);
+    uint32_t cLive = AudioMixBufAvail(&pHstStrmOut->MixBuf);
     if (!cLive)
     {
         LogFlowFunc(("%p: No live samples, skipping\n", pHstStrmOut));
@@ -991,6 +991,7 @@ static DECLCALLBACK(int) drvHostPulseAudioControlOut(PPDMIHOSTAUDIO pInterface,
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
         {
             pa_threaded_mainloop_lock(g_pMainLoop);
 
@@ -1015,6 +1016,7 @@ static DECLCALLBACK(int) drvHostPulseAudioControlOut(PPDMIHOSTAUDIO pInterface,
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
         {
             /* Pause audio output (the Pause bit of the AC97 x_CR register is set).
              * Note that we must return immediately from here! */
@@ -1057,6 +1059,7 @@ static DECLCALLBACK(int) drvHostPulseAudioControlIn(PPDMIHOSTAUDIO pInterface, P
     switch (enmStreamCmd)
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
+        case PDMAUDIOSTREAMCMD_RESUME:
         {
             pa_threaded_mainloop_lock(g_pMainLoop);
             /* This should return immediately. */
@@ -1068,6 +1071,7 @@ static DECLCALLBACK(int) drvHostPulseAudioControlIn(PPDMIHOSTAUDIO pInterface, P
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
+        case PDMAUDIOSTREAMCMD_PAUSE:
         {
             pa_threaded_mainloop_lock(g_pMainLoop);
             if (pThisStrmIn->pu8PeekBuf) /* Do we need to drop the peek buffer?*/
diff --git a/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp b/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp
index 5b6741b..e877c1f 100644
--- a/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp
+++ b/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp
@@ -49,7 +49,7 @@ static int tstSingle(RTTEST hTest)
     };
     PDMPCMPROPS props;
 
-    int rc = drvAudioStreamCfgToProps(&config, &props);
+    int rc = DrvAudioStreamCfgToProps(&config, &props);
     AssertRC(rc);
 
     uint32_t cBufSize = _1K;
@@ -148,7 +148,7 @@ static int tstParentChild(RTTEST hTest)
     };
     PDMPCMPROPS props;
 
-    int rc = drvAudioStreamCfgToProps(&cfg_p, &props);
+    int rc = DrvAudioStreamCfgToProps(&cfg_p, &props);
     AssertRC(rc);
 
     PDMAUDIOMIXBUF parent;
@@ -162,7 +162,7 @@ static int tstParentChild(RTTEST hTest)
         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
     };
 
-    rc = drvAudioStreamCfgToProps(&cfg_c1, &props);
+    rc = DrvAudioStreamCfgToProps(&cfg_c1, &props);
     AssertRC(rc);
 
     PDMAUDIOMIXBUF child1;
@@ -177,7 +177,7 @@ static int tstParentChild(RTTEST hTest)
         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
     };
 
-    rc = drvAudioStreamCfgToProps(&cfg_c2, &props);
+    rc = DrvAudioStreamCfgToProps(&cfg_c2, &props);
     AssertRC(rc);
 
     PDMAUDIOMIXBUF child2;
@@ -259,7 +259,7 @@ static int tstConversion8(RTTEST hTest)
         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
     };
 
-    int rc = drvAudioStreamCfgToProps(&cfg_p, &props);
+    int rc = DrvAudioStreamCfgToProps(&cfg_p, &props);
     AssertRC(rc);
 
     PDMAUDIOMIXBUF parent;
@@ -280,7 +280,7 @@ static int tstConversion8(RTTEST hTest)
         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
     };
 
-    rc = drvAudioStreamCfgToProps(&cfg_c, &props);
+    rc = DrvAudioStreamCfgToProps(&cfg_c, &props);
     AssertRC(rc);
 
     PDMAUDIOMIXBUF child;
@@ -363,7 +363,7 @@ static int tstConversion16(RTTEST hTest)
         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
     };
 
-    int rc = drvAudioStreamCfgToProps(&cfg_p, &props);
+    int rc = DrvAudioStreamCfgToProps(&cfg_p, &props);
     AssertRC(rc);
 
     PDMAUDIOMIXBUF parent;
@@ -377,7 +377,7 @@ static int tstConversion16(RTTEST hTest)
         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
     };
 
-    rc = drvAudioStreamCfgToProps(&cfg_c, &props);
+    rc = DrvAudioStreamCfgToProps(&cfg_c, &props);
     AssertRC(rc);
 
     PDMAUDIOMIXBUF child;
@@ -461,7 +461,7 @@ static int tstVolume(RTTEST hTest)
         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
     };
 
-    int rc = drvAudioStreamCfgToProps(&cfg, &props);
+    int rc = DrvAudioStreamCfgToProps(&cfg, &props);
     AssertRC(rc);
 
     PDMAUDIOVOLUME vol = { false, 0, 0 };   /* Not muted. */
diff --git a/src/VBox/Devices/BiosCommonCode/support.asm b/src/VBox/Devices/BiosCommonCode/support.asm
index 879866f..574e8fd 100644
--- a/src/VBox/Devices/BiosCommonCode/support.asm
+++ b/src/VBox/Devices/BiosCommonCode/support.asm
@@ -21,6 +21,8 @@
 ;*******************************************************************************
 public          __U4D
 public          __U4M
+public          __U8LS
+public          __U8RS
 ifndef          VBOX_PC_BIOS
 public          __I4D
 public          __I4M
@@ -42,7 +44,7 @@ _TEXT           segment public 'CODE' use16
 ; @param    dx:ax   Dividend.
 ; @param    cx:bx   Divisor.
 ; @returns  dx:ax   Quotient.
-;           cx:bx   Reminder.
+;           cx:bx   Remainder.
 ;
 __U4D:
                 pushf
@@ -58,7 +60,7 @@ __U4D:
                 shr     ecx, 16
                 mov     cx, bx
 
-                div     ecx                 ; eax:edx / ecx -> eax=quotient, edx=reminder.
+                div     ecx                 ; eax:edx / ecx -> eax=quotient, edx=remainder.
 
                 mov     bx, dx
                 pop     ecx
@@ -83,7 +85,7 @@ ifndef          VBOX_PC_BIOS
 ; @param    dx:ax   Dividend.
 ; @param    cx:bx   Divisor.
 ; @returns  dx:ax   Quotient.
-;           cx:bx   Reminder.
+;           cx:bx   Remainder.
 ;
 __I4D:
                 pushf
@@ -99,7 +101,7 @@ __I4D:
                 shr     ecx, 16
                 mov     cx, bx
 
-                idiv    ecx                 ; eax:edx / ecx -> eax=quotient, edx=reminder.
+                idiv    ecx                 ; eax:edx / ecx -> eax=quotient, edx=remainder.
 
                 mov     bx, dx
                 pop     ecx
@@ -156,8 +158,7 @@ __U4M:
 
 ifndef          VBOX_PC_BIOS
 ;;
-; 32-bit unsigned multiplication.
-; memset taking a far pointer.
+; 32-bit signed multiplication.
 ;
 ; @param    dx:ax   Factor 1.
 ; @param    cx:bx   Factor 2.
@@ -197,6 +198,52 @@ endif           ; VBOX_PC_BIOS
 
 
 ;;
+; 64-bit left shift.
+;
+; @param    ax:bx:cx:dx Value.
+; @param    si          Shift count.
+; @returns  ax:bx:cx:dx Shifted value.
+; si is zeroed
+;
+__U8LS:
+
+                test    si, si
+                jz      u8ls_quit
+u8ls_rot:
+                shl     dx, 1
+                rcl     cx, 1
+                rcl     bx, 1
+                rcl     ax, 1
+                dec     si
+                jnz     u8ls_rot
+u8ls_quit:
+                ret
+
+
+;;
+; 64-bit unsigned right shift.
+;
+; @param    ax:bx:cx:dx Value.
+; @param    si          Shift count.
+; @returns  ax:bx:cx:dx Shifted value.
+; si is zeroed
+;
+__U8RS:
+
+                test    si, si
+                jz      u8rs_quit
+u8rs_rot:
+                shr     ax, 1
+                rcr     bx, 1
+                rcr     cx, 1
+                rcr     dx, 1
+                dec     si
+                jnz     u8rs_rot
+u8rs_quit:
+                ret
+
+
+;;
 ; memset taking a far pointer.
 ;
 ; cx, es may be modified; di is preserved
@@ -220,7 +267,7 @@ _fmemset_:
 
 
 ;;
-; memset taking far pointers.
+; memcpy taking far pointers.
 ;
 ; cx, es may be modified; si, di are preserved
 ;
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd
index deb0502..1d0a43e 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd differ
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd
index 13000e7..38aa8a4 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd differ
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
index 1f5c5a7..3c27683 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
@@ -6769,7 +6769,7 @@ vesa_pm_end:                                 ; 0xc4514 LB 0x1
 
 section _DATA progbits vstart=0x4600 align=1 ; size=0x371f class=DATA group=DGROUP
 _msg_vga_init:                               ; 0xc4600 LB 0x2f
-    db  'Oracle VM VirtualBox Version 5.0.10 VGA BIOS', 00dh, 00ah, 000h
+    db  'Oracle VM VirtualBox Version 5.0.12 VGA BIOS', 00dh, 00ah, 000h
 _vga_modes:                                  ; 0xc462f LB 0x80
     db  000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
     db  002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
@@ -7664,7 +7664,7 @@ _vbebios_vendor_name:                        ; 0xc7c73 LB 0x13
 _vbebios_product_name:                       ; 0xc7c86 LB 0x21
     db  'Oracle VM VirtualBox VBE Adapter', 000h
 _vbebios_product_revision:                   ; 0xc7ca7 LB 0x24
-    db  'Oracle VM VirtualBox Version 5.0.10', 000h
+    db  'Oracle VM VirtualBox Version 5.0.12', 000h
 _vbebios_info_string:                        ; 0xc7ccb LB 0x2b
     db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
 _no_vbebios_info_string:                     ; 0xc7cf6 LB 0x29
@@ -7723,4 +7723,4 @@ section CONST2 progbits vstart=0x7d20 align=1 ; size=0x0 class=DATA group=DGROUP
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 002h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
index d872bc5..4d5e3d7 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
@@ -1 +1 @@
-2ba27a4a460badfb91c4defb54aa8471 *VBoxVgaBios.rom
+c9e29e5c1b1c51afff96aa525ee09de6 *VBoxVgaBios.rom
diff --git a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
index 0cbfcf4..403db7e 100644
--- a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
@@ -3204,6 +3204,8 @@ int vboxCmdVBVACmdHostCtl(PPDMIDISPLAYVBVACALLBACKS pInterface,
 {
     PVGASTATE pVGAState = PPDMIDISPLAYVBVACALLBACKS_2_PVGASTATE(pInterface);
     struct VBOXVDMAHOST *pVdma = pVGAState->pVdma;
+    if (pVdma == NULL)
+        return VERR_INVALID_STATE;
     pCmd->CalloutList.List.pNext = NULL;
     return vdmaVBVACtlOpaqueHostSubmit(pVdma, pCmd, cbCmd, pfnCompletion, pvCompletion);
 }
@@ -3281,6 +3283,8 @@ DECLCALLBACK(int) vboxCmdVBVACmdHostCtlSync(PPDMIDISPLAYVBVACALLBACKS pInterface
 {
     PVGASTATE pVGAState = PPDMIDISPLAYVBVACALLBACKS_2_PVGASTATE(pInterface);
     struct VBOXVDMAHOST *pVdma = pVGAState->pVdma;
+    if (pVdma == NULL)
+        return VERR_INVALID_STATE;
     VBOXCMDVBVA_CMDHOSTCTL_SYNC Data;
     Data.pVdma = pVdma;
     Data.fProcessing = 1;
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
index 5adc7d9..0c5e0d3 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
@@ -855,20 +855,21 @@ _fd_parm:                                    ; 0xf0000 LB 0x5b
 _fd_map:                                     ; 0xf005b LB 0xf
     db  001h, 000h, 002h, 002h, 003h, 003h, 004h, 004h, 005h, 005h, 00eh, 006h, 00fh, 006h, 000h
 _pktacc:                                     ; 0xf006a LB 0xc
-    db  000h, 000h, 000h, 000h, 000h, 000h, 08fh, 028h, 089h, 07bh, 06bh, 089h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 064h, 02bh, 032h, 07fh, 059h, 08eh
 _softrst:                                    ; 0xf0076 LB 0xc
-    db  000h, 000h, 000h, 000h, 000h, 000h, 077h, 02bh, 054h, 038h, 054h, 038h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 04ch, 02eh, 029h, 03bh, 029h, 03bh
 _dskacc:                                     ; 0xf0082 LB 0x2e
-    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0d8h, 027h, 052h, 028h, 000h, 000h, 000h, 000h
-    db  017h, 07ah, 0d0h, 07ah, 066h, 088h, 0f9h, 088h, 000h, 000h, 000h, 000h, 000h, 000h, 05fh, 033h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 054h, 02ah, 009h, 02bh, 000h, 000h, 000h, 000h
+    db  07ch, 07dh, 057h, 07eh, 02fh, 08dh, 0d5h, 08dh, 000h, 000h, 000h, 000h, 000h, 000h, 05fh, 033h
     db  032h, 05fh, 000h, 0dah, 00fh, 000h, 000h, 001h, 0f3h, 000h, 000h, 000h, 000h, 000h
 
-section CONST progbits vstart=0xb0 align=1 ; size=0xce0 class=DATA group=DGROUP
+section CONST progbits vstart=0xb0 align=1 ; size=0xcde class=DATA group=DGROUP
     db   'NMI Handler called', 00ah, 000h
     db   'INT18: BOOT FAILURE', 00ah, 000h
     db   '%s', 00ah, 000h, 000h
     db   'FATAL: ', 000h
-    db   'bios_printf: unknown format', 00ah, 000h, 000h
+    db   'bios_printf: unknown %ll format', 00ah, 000h
+    db   'bios_printf: unknown format', 00ah, 000h
     db   'ata-detect: Failed to detect ATA device', 00ah, 000h
     db   'ata%d-%d: PCHS=%u/%u/%u LCHS=%u/%u/%u', 00ah, 000h
     db   'ata-detect: Failed to detect ATAPI device', 00ah, 000h
@@ -926,8 +927,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xce0 class=DATA group=DGROUP
     db   '%s: function %02xh unimplemented, returns success', 00ah, 000h
     db   '%s: function %02xh unsupported, returns fail', 00ah, 000h
     db   'int13_harddisk_ext', 000h
-    db   '%s: function %02x. Can', 027h, 't use 64bits lba', 00ah, 000h
-    db   '%s: function %02x. LBA out of range', 00ah, 000h
+    db   '%s: function %02x. LBA out of range', 00ah, 000h, 000h
     db   'int15: Func 24h, subfunc %02xh, A20 gate control not supported', 00ah, 000h
     db   '*** int 15h function AH=bf not yet supported!', 00ah, 000h
     db   'EISA BIOS not present', 00ah, 000h
@@ -967,34 +967,34 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xce0 class=DATA group=DGROUP
     db   '%s: SCSI_INQUIRY failed', 00ah, 000h
     db   '%s: SCSI_READ_CAPACITY failed', 00ah, 000h
     db   'Disk %d has an unsupported sector size of %u', 00ah, 000h
-    db   'SCSI %d-ID#%d: LCHS=%u/%u/%u %lu sectors', 00ah, 000h
+    db   'SCSI %d-ID#%d: LCHS=%lu/%u/%u 0x%llx sectors', 00ah, 000h
     db   'SCSI %d-ID#%d: CD/DVD-ROM', 00ah, 000h, 000h
     db   'ahci_read_sectors', 000h
     db   '%s: device_id out of range %d', 00ah, 000h
     db   'ahci_write_sectors', 000h
     db   'ahci_cmd_packet', 000h
     db   '%s: DATA_OUT not supported yet', 00ah, 000h
-    db   'AHCI %d-P#%d: PCHS=%u/%u/%u LCHS=%u/%u/%u %lu sectors', 00ah, 000h, 000h
+    db   'AHCI %d-P#%d: PCHS=%u/%u/%u LCHS=%u/%u/%u 0x%llx sectors', 00ah, 000h
     db   'Standby', 000h
     db   'Suspend', 000h
     db   'Shutdown', 000h
     db   'APM: Unsupported function AX=%04X BX=%04X called', 00ah, 000h, 000h
     db   'PCI: Unsupported function AX=%04X BX=%04X called', 00ah, 000h
 
-section CONST2 progbits vstart=0xd90 align=1 ; size=0x3fa class=DATA group=DGROUP
-_bios_cvs_version_string:                    ; 0xf0d90 LB 0x12
-    db  'VirtualBox 5.0.10', 000h
-_bios_prefix_string:                         ; 0xf0da2 LB 0x8
+section CONST2 progbits vstart=0xd8e align=1 ; size=0x3fa class=DATA group=DGROUP
+_bios_cvs_version_string:                    ; 0xf0d8e LB 0x12
+    db  'VirtualBox 5.0.12', 000h
+_bios_prefix_string:                         ; 0xf0da0 LB 0x8
     db  'BIOS: ', 000h, 000h
-_isotag:                                     ; 0xf0daa LB 0x6
+_isotag:                                     ; 0xf0da8 LB 0x6
     db  'CD001', 000h
-_eltorito:                                   ; 0xf0db0 LB 0x18
+_eltorito:                                   ; 0xf0dae LB 0x18
     db  'EL TORITO SPECIFICATION', 000h
-_drivetypes:                                 ; 0xf0dc8 LB 0x28
+_drivetypes:                                 ; 0xf0dc6 LB 0x28
     db  046h, 06ch, 06fh, 070h, 070h, 079h, 000h, 000h, 000h, 000h, 048h, 061h, 072h, 064h, 020h, 044h
     db  069h, 073h, 06bh, 000h, 043h, 044h, 02dh, 052h, 04fh, 04dh, 000h, 000h, 000h, 000h, 04ch, 041h
     db  04eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_scan_to_scanascii:                          ; 0xf0df0 LB 0x37a
+_scan_to_scanascii:                          ; 0xf0dee LB 0x37a
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01bh, 001h, 01bh, 001h, 01bh, 001h
     db  000h, 001h, 000h, 000h, 031h, 002h, 021h, 002h, 000h, 000h, 000h, 078h, 000h, 000h, 032h, 003h
     db  040h, 003h, 000h, 003h, 000h, 079h, 000h, 000h, 033h, 004h, 023h, 004h, 000h, 000h, 000h, 07ah
@@ -1051,13 +1051,13 @@ _scan_to_scanascii:                          ; 0xf0df0 LB 0x37a
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch, 056h, 07ch, 056h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 085h, 000h, 087h, 000h, 089h, 000h, 08bh, 000h, 000h
     db  000h, 086h, 000h, 088h, 000h, 08ah, 000h, 08ch, 000h, 000h
-_panic_msg_keyb_buffer_full:                 ; 0xf116a LB 0x20
+_panic_msg_keyb_buffer_full:                 ; 0xf1168 LB 0x20
     db  '%s: keyboard input buffer full', 00ah, 000h
 
-  ; Padding 0x476 bytes at 0xf118a
-  times 1142 db 0
+  ; Padding 0x478 bytes at 0xf1188
+  times 1144 db 0
 
-section _TEXT progbits vstart=0x1600 align=1 ; size=0x8235 class=CODE group=AUTO
+section _TEXT progbits vstart=0x1600 align=1 ; size=0x87e5 class=CODE group=AUTO
 rom_scan_:                                   ; 0xf1600 LB 0x50
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
@@ -1279,11 +1279,11 @@ _int18_panic_msg:                            ; 0xf1765 LB 0x12
 _log_bios_start:                             ; 0xf1777 LB 0x20
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
-    mov bx, 00da2h                            ; bb a2 0d
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
     call 01931h                               ; e8 ac 01
-    push 00d90h                               ; 68 90 0d
+    push 00d8eh                               ; 68 8e 0d
     push 000d9h                               ; 68 d9 00
     push strict byte 00004h                   ; 6a 04
     call 01972h                               ; e8 e2 01
@@ -1308,7 +1308,7 @@ _print_bios_banner:                          ; 0xf1797 LB 0x2e
     mov AH, strict byte 000h                  ; b4 00
     int 010h                                  ; cd 10
     jmp short 017c1h                          ; eb 03
-    call 075fah                               ; e8 39 5e
+    call 07947h                               ; e8 86 61
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
@@ -1454,7 +1454,7 @@ put_luint_:                                  ; 0xf18bf LB 0x72
     mov dx, cx                                ; 89 ca
     mov bx, strict word 0000ah                ; bb 0a 00
     xor cx, cx                                ; 31 c9
-    call 09740h                               ; e8 67 7e
+    call 09cd0h                               ; e8 f7 83
     mov word [bp-008h], ax                    ; 89 46 f8
     mov cx, dx                                ; 89 d1
     mov dx, ax                                ; 89 c2
@@ -1533,7 +1533,7 @@ put_str_near_:                               ; 0xf1952 LB 0x20
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-bios_printf_:                                ; 0xf1972 LB 0x23b
+bios_printf_:                                ; 0xf1972 LB 0x33d
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -1541,12 +1541,12 @@ bios_printf_:                                ; 0xf1972 LB 0x23b
     push dx                                   ; 52
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, strict byte 00008h                ; 83 ec 08
+    sub sp, strict byte 0001ch                ; 83 ec 1c
     lea bx, [bp+008h]                         ; 8d 5e 08
-    mov word [bp-012h], bx                    ; 89 5e ee
-    mov [bp-010h], ss                         ; 8c 56 f0
-    xor cx, cx                                ; 31 c9
-    xor si, si                                ; 31 f6
+    mov word [bp-016h], bx                    ; 89 5e ea
+    mov [bp-014h], ss                         ; 8c 56 ec
+    xor bx, bx                                ; 31 db
+    xor di, di                                ; 31 ff
     mov ax, word [bp+004h]                    ; 8b 46 04
     and ax, strict word 00007h                ; 25 07 00
     cmp ax, strict word 00007h                ; 3d 07 00
@@ -1555,204 +1555,285 @@ bios_printf_:                                ; 0xf1972 LB 0x23b
     push strict byte 00002h                   ; 6a 02
     call 01972h                               ; e8 d5 ff
     add sp, strict byte 00004h                ; 83 c4 04
-    mov bx, word [bp+006h]                    ; 8b 5e 06
-    mov dl, byte [bx]                         ; 8a 17
+    mov si, word [bp+006h]                    ; 8b 76 06
+    mov dl, byte [si]                         ; 8a 14
     test dl, dl                               ; 84 d2
-    je near 01b91h                            ; 0f 84 e6 01
+    je near 01c93h                            ; 0f 84 e8 02
     cmp dl, 025h                              ; 80 fa 25
     jne short 019b8h                          ; 75 08
-    mov cx, strict word 00001h                ; b9 01 00
-    xor si, si                                ; 31 f6
-    jmp near 01b8bh                           ; e9 d3 01
-    test cx, cx                               ; 85 c9
-    je near 01b83h                            ; 0f 84 c5 01
+    mov bx, strict word 00001h                ; bb 01 00
+    xor di, di                                ; 31 ff
+    jmp near 01c8dh                           ; e9 d5 02
+    test bx, bx                               ; 85 db
+    je near 01c85h                            ; 0f 84 c7 02
     cmp dl, 030h                              ; 80 fa 30
     jc short 019d6h                           ; 72 13
     cmp dl, 039h                              ; 80 fa 39
     jnbe short 019d6h                         ; 77 0e
     movzx ax, dl                              ; 0f b6 c2
-    imul si, si, strict byte 0000ah           ; 6b f6 0a
+    imul di, di, strict byte 0000ah           ; 6b ff 0a
     sub ax, strict word 00030h                ; 2d 30 00
-    add si, ax                                ; 01 c6
-    jmp near 01b8bh                           ; e9 b5 01
-    mov ax, word [bp-010h]                    ; 8b 46 f0
-    mov word [bp-010h], ax                    ; 89 46 f0
-    add word [bp-012h], strict byte 00002h    ; 83 46 ee 02
-    les bx, [bp-012h]                         ; c4 5e ee
+    add di, ax                                ; 01 c7
+    jmp near 01c8dh                           ; e9 b7 02
+    mov ax, word [bp-014h]                    ; 8b 46 ec
+    mov word [bp-014h], ax                    ; 89 46 ec
+    add word [bp-016h], strict byte 00002h    ; 83 46 ea 02
+    les bx, [bp-016h]                         ; c4 5e ea
     mov ax, word [es:bx-002h]                 ; 26 8b 47 fe
-    mov word [bp-00ch], ax                    ; 89 46 f4
+    mov word [bp-012h], ax                    ; 89 46 ee
     cmp dl, 078h                              ; 80 fa 78
     je short 019f4h                           ; 74 05
     cmp dl, 058h                              ; 80 fa 58
-    jne short 01a3dh                          ; 75 49
-    test si, si                               ; 85 f6
+    jne short 01a4ah                          ; 75 56
+    test di, di                               ; 85 ff
     jne short 019fbh                          ; 75 03
-    mov si, strict word 00004h                ; be 04 00
+    mov di, strict word 00004h                ; bf 04 00
     cmp dl, 078h                              ; 80 fa 78
-    jne short 01a05h                          ; 75 05
-    mov di, strict word 00061h                ; bf 61 00
-    jmp short 01a08h                          ; eb 03
-    mov di, strict word 00041h                ; bf 41 00
-    lea bx, [si-001h]                         ; 8d 5c ff
-    test bx, bx                               ; 85 db
-    jl near 01b7fh                            ; 0f 8c 6e 01
-    mov cx, bx                                ; 89 d9
-    sal cx, 002h                              ; c1 e1 02
+    jne short 01a07h                          ; 75 07
+    mov word [bp-00eh], strict word 00061h    ; c7 46 f2 61 00
+    jmp short 01a0ch                          ; eb 05
+    mov word [bp-00eh], strict word 00041h    ; c7 46 f2 41 00
+    lea ax, [di-001h]                         ; 8d 45 ff
+    mov word [bp-00ch], ax                    ; 89 46 f4
     mov ax, word [bp-00ch]                    ; 8b 46 f4
+    test ax, ax                               ; 85 c0
+    jl near 01c81h                            ; 0f 8c 66 02
+    mov cx, ax                                ; 89 c1
+    sal cx, 002h                              ; c1 e1 02
+    mov ax, word [bp-012h]                    ; 8b 46 ee
     shr ax, CL                                ; d3 e8
     xor ah, ah                                ; 30 e4
     and AL, strict byte 00fh                  ; 24 0f
     cmp ax, strict word 00009h                ; 3d 09 00
-    jnbe short 01a2bh                         ; 77 07
+    jnbe short 01a35h                         ; 77 07
     mov dx, ax                                ; 89 c2
     add dx, strict byte 00030h                ; 83 c2 30
-    jmp short 01a32h                          ; eb 07
-    mov dx, ax                                ; 89 c2
-    sub dx, strict byte 0000ah                ; 83 ea 0a
-    add dx, di                                ; 01 fa
+    jmp short 01a3dh                          ; eb 08
+    sub ax, strict word 0000ah                ; 2d 0a 00
+    mov dx, word [bp-00eh]                    ; 8b 56 f2
+    add dx, ax                                ; 01 c2
     xor dh, dh                                ; 30 f6
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 017c5h                               ; e8 8b fd
-    dec bx                                    ; 4b
-    jmp short 01a0bh                          ; eb ce
+    call 017c5h                               ; e8 80 fd
+    dec word [bp-00ch]                        ; ff 4e f4
+    jmp short 01a12h                          ; eb c8
     cmp dl, 075h                              ; 80 fa 75
-    jne short 01a51h                          ; 75 0f
+    jne short 01a5eh                          ; 75 0f
     xor cx, cx                                ; 31 c9
-    mov bx, si                                ; 89 f3
+    mov bx, di                                ; 89 fb
+    mov dx, ax                                ; 89 c2
+    mov ax, word [bp+004h]                    ; 8b 46 04
+    call 0185fh                               ; e8 04 fe
+    jmp near 01c81h                           ; e9 23 02
+    cmp dl, 06ch                              ; 80 fa 6c
+    jne near 01b40h                           ; 0f 85 db 00
+    mov bx, word [bp+006h]                    ; 8b 5e 06
+    cmp dl, byte [bx+001h]                    ; 3a 57 01
+    jne near 01b40h                           ; 0f 85 d1 00
+    add word [bp+006h], strict byte 00002h    ; 83 46 06 02
+    mov bx, word [bp+006h]                    ; 8b 5e 06
+    mov dl, byte [bx]                         ; 8a 17
+    mov word [bp-026h], ax                    ; 89 46 da
+    mov ax, word [bp-014h]                    ; 8b 46 ec
+    mov word [bp-014h], ax                    ; 89 46 ec
+    add word [bp-016h], strict byte 00002h    ; 83 46 ea 02
+    les bx, [bp-016h]                         ; c4 5e ea
+    mov ax, word [es:bx-002h]                 ; 26 8b 47 fe
+    mov word [bp-024h], ax                    ; 89 46 dc
+    mov ax, word [bp-014h]                    ; 8b 46 ec
+    mov word [bp-014h], ax                    ; 89 46 ec
+    add word [bp-016h], strict byte 00002h    ; 83 46 ea 02
+    les bx, [bp-016h]                         ; c4 5e ea
+    mov ax, word [es:bx-002h]                 ; 26 8b 47 fe
+    mov word [bp-022h], ax                    ; 89 46 de
+    mov ax, word [bp-014h]                    ; 8b 46 ec
+    mov word [bp-014h], ax                    ; 89 46 ec
+    add word [bp-016h], strict byte 00002h    ; 83 46 ea 02
+    les bx, [bp-016h]                         ; c4 5e ea
+    mov ax, word [es:bx-002h]                 ; 26 8b 47 fe
+    mov word [bp-020h], ax                    ; 89 46 e0
+    cmp dl, 078h                              ; 80 fa 78
+    je short 01ac1h                           ; 74 05
+    cmp dl, 058h                              ; 80 fa 58
+    jne short 01b32h                          ; 75 71
+    test di, di                               ; 85 ff
+    jne short 01ac8h                          ; 75 03
+    mov di, strict word 00010h                ; bf 10 00
+    cmp dl, 078h                              ; 80 fa 78
+    jne short 01ad4h                          ; 75 07
+    mov word [bp-00eh], strict word 00061h    ; c7 46 f2 61 00
+    jmp short 01ad9h                          ; eb 05
+    mov word [bp-00eh], strict word 00041h    ; c7 46 f2 41 00
+    lea ax, [di-001h]                         ; 8d 45 ff
+    mov word [bp-00ch], ax                    ; 89 46 f4
+    mov ax, word [bp-00ch]                    ; 8b 46 f4
+    test ax, ax                               ; 85 c0
+    jl near 01c81h                            ; 0f 8c 99 01
+    sal ax, 002h                              ; c1 e0 02
+    mov word [bp-01eh], ax                    ; 89 46 e2
+    xor ax, ax                                ; 31 c0
+    mov word [bp-01ch], ax                    ; 89 46 e4
+    mov word [bp-01ah], ax                    ; 89 46 e6
+    mov word [bp-018h], ax                    ; 89 46 e8
+    mov ax, word [bp-020h]                    ; 8b 46 e0
+    mov bx, word [bp-022h]                    ; 8b 5e de
+    mov cx, word [bp-024h]                    ; 8b 4e dc
+    mov dx, word [bp-026h]                    ; 8b 56 da
+    mov si, word [bp-01eh]                    ; 8b 76 e2
+    call 09d4ah                               ; e8 3f 82
+    mov ax, dx                                ; 89 d0
+    xor ah, dh                                ; 30 f4
+    and AL, strict byte 00fh                  ; 24 0f
+    cmp ax, strict word 00009h                ; 3d 09 00
+    jnbe short 01b1dh                         ; 77 07
     mov dx, ax                                ; 89 c2
+    add dx, strict byte 00030h                ; 83 c2 30
+    jmp short 01b25h                          ; eb 08
+    sub ax, strict word 0000ah                ; 2d 0a 00
+    mov dx, word [bp-00eh]                    ; 8b 56 f2
+    add dx, ax                                ; 01 c2
+    xor dh, dh                                ; 30 f6
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0185fh                               ; e8 11 fe
-    jmp near 01b7fh                           ; e9 2e 01
-    lea bx, [si-001h]                         ; 8d 5c ff
+    call 017c5h                               ; e8 98 fc
+    dec word [bp-00ch]                        ; ff 4e f4
+    jmp short 01adfh                          ; eb ad
+    push 000e6h                               ; 68 e6 00
+    push strict byte 00007h                   ; 6a 07
+    call 01972h                               ; e8 38 fe
+    add sp, strict byte 00004h                ; 83 c4 04
+    jmp near 01c81h                           ; e9 41 01
+    lea bx, [di-001h]                         ; 8d 5d ff
     cmp dl, 06ch                              ; 80 fa 6c
-    jne near 01b0dh                           ; 0f 85 b2 00
+    jne near 01c09h                           ; 0f 85 bf 00
     inc word [bp+006h]                        ; ff 46 06
-    mov di, word [bp+006h]                    ; 8b 7e 06
-    mov dl, byte [di]                         ; 8a 15
-    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov si, word [bp+006h]                    ; 8b 76 06
+    mov dl, byte [si]                         ; 8a 14
+    mov ax, word [bp-014h]                    ; 8b 46 ec
+    mov word [bp-014h], ax                    ; 89 46 ec
+    add word [bp-016h], strict byte 00002h    ; 83 46 ea 02
+    les si, [bp-016h]                         ; c4 76 ea
+    mov ax, word [es:si-002h]                 ; 26 8b 44 fe
     mov word [bp-010h], ax                    ; 89 46 f0
-    add word [bp-012h], strict byte 00002h    ; 83 46 ee 02
-    les di, [bp-012h]                         ; c4 7e ee
-    mov ax, word [es:di-002h]                 ; 26 8b 45 fe
-    mov word [bp-00eh], ax                    ; 89 46 f2
     cmp dl, 064h                              ; 80 fa 64
-    jne short 01aa9h                          ; 75 2d
-    test byte [bp-00dh], 080h                 ; f6 46 f3 80
-    je short 01a97h                           ; 74 15
+    jne short 01b98h                          ; 75 2d
+    test byte [bp-00fh], 080h                 ; f6 46 f1 80
+    je short 01b86h                           ; 74 15
     push strict byte 00001h                   ; 6a 01
-    mov ax, word [bp-00ch]                    ; 8b 46 f4
-    mov cx, word [bp-00eh]                    ; 8b 4e f2
+    mov ax, word [bp-012h]                    ; 8b 46 ee
+    mov cx, word [bp-010h]                    ; 8b 4e f0
     neg cx                                    ; f7 d9
     neg ax                                    ; f7 d8
     sbb cx, strict byte 00000h                ; 83 d9 00
     mov dx, bx                                ; 89 da
     mov bx, ax                                ; 89 c3
-    jmp short 01aa0h                          ; eb 09
+    jmp short 01b8fh                          ; eb 09
     push strict byte 00000h                   ; 6a 00
-    mov bx, word [bp-00ch]                    ; 8b 5e f4
-    mov dx, si                                ; 89 f2
+    mov bx, word [bp-012h]                    ; 8b 5e ee
+    mov dx, di                                ; 89 fa
     mov cx, ax                                ; 89 c1
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 018bfh                               ; e8 19 fe
-    jmp near 01b7fh                           ; e9 d6 00
+    call 018bfh                               ; e8 2a fd
+    jmp near 01c81h                           ; e9 e9 00
     cmp dl, 075h                              ; 80 fa 75
-    jne short 01ab0h                          ; 75 02
-    jmp short 01a97h                          ; eb e7
+    jne short 01b9fh                          ; 75 02
+    jmp short 01b86h                          ; eb e7
     cmp dl, 078h                              ; 80 fa 78
-    je short 01abch                           ; 74 07
+    je short 01babh                           ; 74 07
     cmp dl, 058h                              ; 80 fa 58
-    jne near 01b7fh                           ; 0f 85 c3 00
-    test si, si                               ; 85 f6
-    jne short 01ac3h                          ; 75 03
-    mov si, strict word 00008h                ; be 08 00
+    jne near 01c81h                           ; 0f 85 d6 00
+    test di, di                               ; 85 ff
+    jne short 01bb2h                          ; 75 03
+    mov di, strict word 00008h                ; bf 08 00
     cmp dl, 078h                              ; 80 fa 78
-    jne short 01acdh                          ; 75 05
-    mov di, strict word 00061h                ; bf 61 00
-    jmp short 01ad0h                          ; eb 03
-    mov di, strict word 00041h                ; bf 41 00
-    lea bx, [si-001h]                         ; 8d 5c ff
-    test bx, bx                               ; 85 db
-    jl near 01b7fh                            ; 0f 8c a6 00
-    mov ax, word [bp-00ch]                    ; 8b 46 f4
-    mov cx, bx                                ; 89 d9
+    jne short 01bbeh                          ; 75 07
+    mov word [bp-00eh], strict word 00061h    ; c7 46 f2 61 00
+    jmp short 01bc3h                          ; eb 05
+    mov word [bp-00eh], strict word 00041h    ; c7 46 f2 41 00
+    lea ax, [di-001h]                         ; 8d 45 ff
+    mov word [bp-00ch], ax                    ; 89 46 f4
+    cmp word [bp-00ch], strict byte 00000h    ; 83 7e f4 00
+    jl near 01c81h                            ; 0f 8c b0 00
+    mov ax, word [bp-012h]                    ; 8b 46 ee
+    mov cx, word [bp-00ch]                    ; 8b 4e f4
     sal cx, 002h                              ; c1 e1 02
-    mov dx, word [bp-00eh]                    ; 8b 56 f2
-    jcxz 01aech                               ; e3 06
+    mov dx, word [bp-010h]                    ; 8b 56 f0
+    jcxz 01be5h                               ; e3 06
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 01ae6h                               ; e2 fa
+    loop 01bdfh                               ; e2 fa
     and ax, strict word 0000fh                ; 25 0f 00
     cmp ax, strict word 00009h                ; 3d 09 00
-    jnbe short 01afbh                         ; 77 07
+    jnbe short 01bf4h                         ; 77 07
     mov dx, ax                                ; 89 c2
     add dx, strict byte 00030h                ; 83 c2 30
-    jmp short 01b02h                          ; eb 07
-    mov dx, ax                                ; 89 c2
-    sub dx, strict byte 0000ah                ; 83 ea 0a
-    add dx, di                                ; 01 fa
+    jmp short 01bfch                          ; eb 08
+    sub ax, strict word 0000ah                ; 2d 0a 00
+    mov dx, word [bp-00eh]                    ; 8b 56 f2
+    add dx, ax                                ; 01 c2
     xor dh, dh                                ; 30 f6
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 017c5h                               ; e8 bb fc
-    dec bx                                    ; 4b
-    jmp short 01ad3h                          ; eb c6
+    call 017c5h                               ; e8 c1 fb
+    dec word [bp-00ch]                        ; ff 4e f4
+    jmp short 01bc9h                          ; eb c0
     cmp dl, 064h                              ; 80 fa 64
-    jne short 01b2fh                          ; 75 1d
-    test byte [bp-00bh], 080h                 ; f6 46 f5 80
-    je short 01b21h                           ; 74 09
-    mov dx, ax                                ; 89 c2
+    jne short 01c2dh                          ; 75 1f
+    test byte [bp-011h], 080h                 ; f6 46 ef 80
+    je short 01c1eh                           ; 74 0a
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     neg dx                                    ; f7 da
     mov cx, strict word 00001h                ; b9 01 00
-    jmp short 01b27h                          ; eb 06
+    jmp short 01c25h                          ; eb 07
     xor cx, cx                                ; 31 c9
-    mov bx, si                                ; 89 f3
-    mov dx, ax                                ; 89 c2
+    mov bx, di                                ; 89 fb
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 01800h                               ; e8 d3 fc
-    jmp short 01b7fh                          ; eb 50
+    call 01800h                               ; e8 d5 fb
+    jmp short 01c81h                          ; eb 54
     cmp dl, 073h                              ; 80 fa 73
-    jne short 01b40h                          ; 75 0c
+    jne short 01c3fh                          ; 75 0d
     mov cx, ds                                ; 8c d9
-    mov bx, ax                                ; 89 c3
+    mov bx, word [bp-012h]                    ; 8b 5e ee
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 01931h                               ; e8 f3 fd
-    jmp short 01b7fh                          ; eb 3f
+    call 01931h                               ; e8 f4 fc
+    jmp short 01c81h                          ; eb 42
     cmp dl, 053h                              ; 80 fa 53
-    jne short 01b63h                          ; 75 1e
-    mov word [bp-00eh], ax                    ; 89 46 f2
-    mov ax, word [bp-010h]                    ; 8b 46 f0
+    jne short 01c65h                          ; 75 21
+    mov ax, word [bp-012h]                    ; 8b 46 ee
     mov word [bp-010h], ax                    ; 89 46 f0
-    add word [bp-012h], strict byte 00002h    ; 83 46 ee 02
-    les bx, [bp-012h]                         ; c4 5e ee
+    mov ax, word [bp-014h]                    ; 8b 46 ec
+    mov word [bp-014h], ax                    ; 89 46 ec
+    add word [bp-016h], strict byte 00002h    ; 83 46 ea 02
+    les bx, [bp-016h]                         ; c4 5e ea
     mov ax, word [es:bx-002h]                 ; 26 8b 47 fe
-    mov word [bp-00ch], ax                    ; 89 46 f4
+    mov word [bp-012h], ax                    ; 89 46 ee
     mov bx, ax                                ; 89 c3
-    mov cx, word [bp-00eh]                    ; 8b 4e f2
-    jmp short 01b38h                          ; eb d5
+    mov cx, word [bp-010h]                    ; 8b 4e f0
+    jmp short 01c37h                          ; eb d2
     cmp dl, 063h                              ; 80 fa 63
-    jne short 01b74h                          ; 75 0c
-    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    jne short 01c76h                          ; 75 0c
+    movzx dx, byte [bp-012h]                  ; 0f b6 56 ee
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 017c5h                               ; e8 53 fc
-    jmp short 01b7fh                          ; eb 0b
-    push 000e6h                               ; 68 e6 00
+    call 017c5h                               ; e8 51 fb
+    jmp short 01c81h                          ; eb 0b
+    push 00107h                               ; 68 07 01
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 f6 fd
+    call 01972h                               ; e8 f4 fc
     add sp, strict byte 00004h                ; 83 c4 04
-    xor cx, cx                                ; 31 c9
-    jmp short 01b8bh                          ; eb 08
+    xor bx, bx                                ; 31 db
+    jmp short 01c8dh                          ; eb 08
     xor dh, dh                                ; 30 f6
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 017c5h                               ; e8 3a fc
+    call 017c5h                               ; e8 38 fb
     inc word [bp+006h]                        ; ff 46 06
-    jmp near 019a0h                           ; e9 0f fe
+    jmp near 019a0h                           ; e9 0d fd
     xor ax, ax                                ; 31 c0
-    mov word [bp-012h], ax                    ; 89 46 ee
-    mov word [bp-010h], ax                    ; 89 46 f0
+    mov word [bp-016h], ax                    ; 89 46 ea
+    mov word [bp-014h], ax                    ; 89 46 ec
     test byte [bp+004h], 001h                 ; f6 46 04 01
-    je short 01ba3h                           ; 74 04
+    je short 01ca5h                           ; 74 04
     cli                                       ; fa
     hlt                                       ; f4
-    jmp short 01ba0h                          ; eb fd
+    jmp short 01ca2h                          ; eb fd
     lea sp, [bp-00ah]                         ; 8d 66 f6
     pop di                                    ; 5f
     pop si                                    ; 5e
@@ -1761,74 +1842,76 @@ bios_printf_:                                ; 0xf1972 LB 0x23b
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-_ata_init:                                   ; 0xf1bad LB 0xc4
+_ata_init:                                   ; 0xf1caf LB 0xcd
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 b2 fa
+    call 0166ch                               ; e8 b0 f9
     mov si, 00122h                            ; be 22 01
     mov dx, ax                                ; 89 c2
     xor al, al                                ; 30 c0
-    jmp short 01bc7h                          ; eb 04
+    jmp short 01cc9h                          ; eb 04
     cmp AL, strict byte 004h                  ; 3c 04
-    jnc short 01bebh                          ; 73 24
+    jnc short 01cedh                          ; 73 24
     movzx bx, al                              ; 0f b6 d8
     imul bx, bx, strict byte 00006h           ; 6b db 06
     mov es, dx                                ; 8e c2
     add bx, si                                ; 01 f3
-    mov byte [es:bx+001c0h], 000h             ; 26 c6 87 c0 01 00
-    db  066h, 026h, 0c7h, 087h, 0c2h, 001h, 000h, 000h, 000h, 000h
-    ; mov dword [es:bx+001c2h], strict dword 000000000h ; 66 26 c7 87 c2 01 00 00 00 00
-    mov byte [es:bx+001c1h], 000h             ; 26 c6 87 c1 01 00
+    mov byte [es:bx+00204h], 000h             ; 26 c6 87 04 02 00
+    db  066h, 026h, 0c7h, 087h, 006h, 002h, 000h, 000h, 000h, 000h
+    ; mov dword [es:bx+00206h], strict dword 000000000h ; 66 26 c7 87 06 02 00 00 00 00
+    mov byte [es:bx+00205h], 000h             ; 26 c6 87 05 02 00
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
-    jmp short 01bc3h                          ; eb d8
+    jmp short 01cc5h                          ; eb d8
     xor al, al                                ; 30 c0
-    jmp short 01bf3h                          ; eb 04
+    jmp short 01cf5h                          ; eb 04
     cmp AL, strict byte 008h                  ; 3c 08
-    jnc short 01c3eh                          ; 73 4b
+    jnc short 01d49h                          ; 73 54
     movzx bx, al                              ; 0f b6 d8
-    imul bx, bx, strict byte 00018h           ; 6b db 18
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
     mov es, dx                                ; 8e c2
     add bx, si                                ; 01 f3
-    db  066h, 026h, 0c7h, 047h, 01eh, 000h, 000h, 000h, 000h
-    ; mov dword [es:bx+01eh], strict dword 000000000h ; 66 26 c7 47 1e 00 00 00 00
-    mov byte [es:bx+022h], 000h               ; 26 c6 47 22 00
-    mov word [es:bx+024h], 00200h             ; 26 c7 47 24 00 02
-    mov byte [es:bx+023h], 000h               ; 26 c6 47 23 00
-    db  066h, 026h, 0c7h, 047h, 026h, 000h, 000h, 000h, 000h
-    ; mov dword [es:bx+026h], strict dword 000000000h ; 66 26 c7 47 26 00 00 00 00
+    db  066h, 026h, 0c7h, 047h, 022h, 000h, 000h, 000h, 000h
+    ; mov dword [es:bx+022h], strict dword 000000000h ; 66 26 c7 47 22 00 00 00 00
+    mov byte [es:bx+026h], 000h               ; 26 c6 47 26 00
+    mov word [es:bx+028h], 00200h             ; 26 c7 47 28 00 02
+    mov byte [es:bx+027h], 000h               ; 26 c6 47 27 00
     db  066h, 026h, 0c7h, 047h, 02ah, 000h, 000h, 000h, 000h
     ; mov dword [es:bx+02ah], strict dword 000000000h ; 66 26 c7 47 2a 00 00 00 00
     db  066h, 026h, 0c7h, 047h, 02eh, 000h, 000h, 000h, 000h
     ; mov dword [es:bx+02eh], strict dword 000000000h ; 66 26 c7 47 2e 00 00 00 00
     db  066h, 026h, 0c7h, 047h, 032h, 000h, 000h, 000h, 000h
     ; mov dword [es:bx+032h], strict dword 000000000h ; 66 26 c7 47 32 00 00 00 00
+    db  066h, 026h, 0c7h, 047h, 03ah, 000h, 000h, 000h, 000h
+    ; mov dword [es:bx+03ah], strict dword 000000000h ; 66 26 c7 47 3a 00 00 00 00
+    db  066h, 026h, 0c7h, 047h, 036h, 000h, 000h, 000h, 000h
+    ; mov dword [es:bx+036h], strict dword 000000000h ; 66 26 c7 47 36 00 00 00 00
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
-    jmp short 01befh                          ; eb b1
+    jmp short 01cf1h                          ; eb a8
     xor al, al                                ; 30 c0
-    jmp short 01c46h                          ; eb 04
+    jmp short 01d51h                          ; eb 04
     cmp AL, strict byte 010h                  ; 3c 10
-    jnc short 01c5dh                          ; 73 17
+    jnc short 01d68h                          ; 73 17
     movzx bx, al                              ; 0f b6 d8
     mov es, dx                                ; 8e c2
     add bx, si                                ; 01 f3
-    mov byte [es:bx+0019fh], 010h             ; 26 c6 87 9f 01 10
-    mov byte [es:bx+001b0h], 010h             ; 26 c6 87 b0 01 10
+    mov byte [es:bx+001e3h], 010h             ; 26 c6 87 e3 01 10
+    mov byte [es:bx+001f4h], 010h             ; 26 c6 87 f4 01 10
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
-    jmp short 01c42h                          ; eb e5
+    jmp short 01d4dh                          ; eb e5
     mov es, dx                                ; 8e c2
-    mov byte [es:si+0019eh], 000h             ; 26 c6 84 9e 01 00
-    mov byte [es:si+001afh], 000h             ; 26 c6 84 af 01 00
+    mov byte [es:si+001e2h], 000h             ; 26 c6 84 e2 01 00
+    mov byte [es:si+001f3h], 000h             ; 26 c6 84 f3 01 00
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-ata_reset_:                                  ; 0xf1c71 LB 0xde
+ata_reset_:                                  ; 0xf1d7c LB 0xde
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -1841,7 +1924,7 @@ ata_reset_:                                  ; 0xf1c71 LB 0xde
     push ax                                   ; 50
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 e7 f9
+    call 0166ch                               ; e8 dc f8
     mov word [bp-00eh], 00122h                ; c7 46 f2 22 01
     mov di, ax                                ; 89 c7
     mov bx, word [bp-010h]                    ; 8b 5e f0
@@ -1853,34 +1936,34 @@ ata_reset_:                                  ; 0xf1c71 LB 0xde
     imul bx, bx, strict byte 00006h           ; 6b db 06
     mov es, ax                                ; 8e c0
     add bx, 00122h                            ; 81 c3 22 01
-    mov cx, word [es:bx+001c2h]               ; 26 8b 8f c2 01
-    mov si, word [es:bx+001c4h]               ; 26 8b b7 c4 01
+    mov cx, word [es:bx+00206h]               ; 26 8b 8f 06 02
+    mov si, word [es:bx+00208h]               ; 26 8b b7 08 02
     lea dx, [si+006h]                         ; 8d 54 06
     mov AL, strict byte 00eh                  ; b0 0e
     out DX, AL                                ; ee
     mov bx, 000ffh                            ; bb ff 00
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 01cc9h                          ; 76 0c
+    jbe short 01dd4h                          ; 76 0c
     mov dx, cx                                ; 89 ca
     add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 080h                 ; a8 80
-    je short 01cb8h                           ; 74 ef
+    je short 01dc3h                           ; 74 ef
     lea dx, [si+006h]                         ; 8d 54 06
     mov AL, strict byte 00ah                  ; b0 0a
     out DX, AL                                ; ee
-    imul bx, word [bp-010h], strict byte 00018h ; 6b 5e f0 18
+    imul bx, word [bp-010h], strict byte 0001ch ; 6b 5e f0 1c
     mov es, di                                ; 8e c7
     add bx, word [bp-00eh]                    ; 03 5e f2
-    cmp byte [es:bx+01eh], 000h               ; 26 80 7f 1e 00
-    je short 01d2bh                           ; 74 4c
+    cmp byte [es:bx+022h], 000h               ; 26 80 7f 22 00
+    je short 01e36h                           ; 74 4c
     cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    je short 01ceah                           ; 74 05
+    je short 01df5h                           ; 74 05
     mov ax, 000b0h                            ; b8 b0 00
-    jmp short 01cedh                          ; eb 03
+    jmp short 01df8h                          ; eb 03
     mov ax, 000a0h                            ; b8 a0 00
     mov dx, cx                                ; 89 ca
     add dx, strict byte 00006h                ; 83 c2 06
@@ -1898,36 +1981,36 @@ ata_reset_:                                  ; 0xf1c71 LB 0xde
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp bl, 001h                              ; 80 fb 01
-    jne short 01d2bh                          ; 75 22
+    jne short 01e36h                          ; 75 22
     cmp al, bl                                ; 38 d8
-    jne short 01d2bh                          ; 75 1e
+    jne short 01e36h                          ; 75 1e
     mov bx, strict word 0ffffh                ; bb ff ff
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 01d2bh                          ; 76 16
+    jbe short 01e36h                          ; 76 16
     mov dx, cx                                ; 89 ca
     add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 080h                 ; a8 80
-    je short 01d2bh                           ; 74 0a
+    je short 01e36h                           ; 74 0a
     mov ax, strict word 0ffffh                ; b8 ff ff
     dec ax                                    ; 48
     test ax, ax                               ; 85 c0
-    jnbe short 01d24h                         ; 77 fb
-    jmp short 01d10h                          ; eb e5
+    jnbe short 01e2fh                         ; 77 fb
+    jmp short 01e1bh                          ; eb e5
     mov bx, strict word 00010h                ; bb 10 00
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 01d3fh                          ; 76 0c
+    jbe short 01e4ah                          ; 76 0c
     mov dx, cx                                ; 89 ca
     add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 040h                 ; a8 40
-    je short 01d2eh                           ; 74 ef
+    je short 01e39h                           ; 74 ef
     lea dx, [si+006h]                         ; 8d 54 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
@@ -1939,233 +2022,285 @@ ata_reset_:                                  ; 0xf1c71 LB 0xde
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-ata_cmd_data_in_:                            ; 0xf1d4f LB 0x258
+ata_cmd_data_in_:                            ; 0xf1e5a LB 0x2e2
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, strict byte 0001ch                ; 83 ec 1c
-    mov si, ax                                ; 89 c6
-    mov word [bp-00ah], dx                    ; 89 56 f6
-    mov word [bp-016h], bx                    ; 89 5e ea
-    mov word [bp-014h], cx                    ; 89 4e ec
+    sub sp, strict byte 00012h                ; 83 ec 12
+    push ax                                   ; 50
+    push dx                                   ; 52
+    push bx                                   ; 53
+    push cx                                   ; 51
     mov es, dx                                ; 8e c2
-    movzx ax, byte [es:si+008h]               ; 26 0f b6 44 08
-    mov dx, ax                                ; 89 c2
-    shr dx, 1                                 ; d1 ea
-    mov dh, al                                ; 88 c6
-    and dh, 001h                              ; 80 e6 01
-    mov byte [bp-008h], dh                    ; 88 76 f8
-    movzx di, dl                              ; 0f b6 fa
-    imul di, di, strict byte 00006h           ; 6b ff 06
-    add di, si                                ; 01 f7
-    mov bx, word [es:di+001c2h]               ; 26 8b 9d c2 01
-    mov dx, word [es:di+001c4h]               ; 26 8b 95 c4 01
-    mov word [bp-01ch], dx                    ; 89 56 e4
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov di, si                                ; 89 f7
+    mov bx, ax                                ; 89 c3
+    mov al, byte [es:bx+00ch]                 ; 26 8a 47 0c
+    mov byte [bp-00ah], al                    ; 88 46 f6
+    movzx bx, al                              ; 0f b6 d8
+    mov ax, bx                                ; 89 d8
+    cwd                                       ; 99
+    db  02bh, 0c2h
+    ; sub ax, dx                                ; 2b c2
+    sar ax, 1                                 ; d1 f8
+    imul ax, ax, strict byte 00006h           ; 6b c0 06
+    mov di, word [bp-018h]                    ; 8b 7e e8
     add di, ax                                ; 01 c7
-    mov al, byte [es:di+022h]                 ; 26 8a 45 22
-    mov byte [bp-006h], al                    ; 88 46 fa
-    mov ax, word [es:di+024h]                 ; 26 8b 45 24
+    mov ax, word [es:di+00206h]               ; 26 8b 85 06 02
     mov word [bp-00ch], ax                    ; 89 46 f4
+    mov ax, word [es:di+00208h]               ; 26 8b 85 08 02
+    mov word [bp-010h], ax                    ; 89 46 f0
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
+    mov di, word [bp-018h]                    ; 8b 7e e8
+    add di, bx                                ; 01 df
+    mov al, byte [es:di+026h]                 ; 26 8a 45 26
+    mov byte [bp-008h], al                    ; 88 46 f8
+    mov ax, word [es:di+028h]                 ; 26 8b 45 28
+    mov word [bp-00eh], ax                    ; 89 46 f2
     test ax, ax                               ; 85 c0
-    jne short 01db7h                          ; 75 14
-    cmp byte [bp-006h], 001h                  ; 80 7e fa 01
-    jne short 01db0h                          ; 75 07
-    mov word [bp-00ch], 04000h                ; c7 46 f4 00 40
-    jmp short 01dc6h                          ; eb 16
-    mov word [bp-00ch], 08000h                ; c7 46 f4 00 80
-    jmp short 01dc6h                          ; eb 0f
-    cmp byte [bp-006h], 001h                  ; 80 7e fa 01
-    jne short 01dc3h                          ; 75 06
-    shr word [bp-00ch], 002h                  ; c1 6e f4 02
-    jmp short 01dc6h                          ; eb 03
-    shr word [bp-00ch], 1                     ; d1 6e f4
-    lea dx, [bx+007h]                         ; 8d 57 07
+    jne short 01ec1h                          ; 75 14
+    cmp byte [bp-008h], 001h                  ; 80 7e f8 01
+    jne short 01ebah                          ; 75 07
+    mov word [bp-00eh], 04000h                ; c7 46 f2 00 40
+    jmp short 01ed0h                          ; eb 16
+    mov word [bp-00eh], 08000h                ; c7 46 f2 00 80
+    jmp short 01ed0h                          ; eb 0f
+    cmp byte [bp-008h], 001h                  ; 80 7e f8 01
+    jne short 01ecdh                          ; 75 06
+    shr word [bp-00eh], 002h                  ; c1 6e f2 02
+    jmp short 01ed0h                          ; eb 03
+    shr word [bp-00eh], 1                     ; d1 6e f2
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 080h                 ; a8 80
-    je short 01ddfh                           ; 74 0f
-    mov dx, word [bp-01ch]                    ; 8b 56 e4
+    je short 01eech                           ; 74 0f
+    mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00001h                ; ba 01 00
-    jmp near 01f9eh                           ; e9 bf 01
-    mov es, [bp-00ah]                         ; 8e 46 f6
-    mov ax, word [es:si]                      ; 26 8b 04
-    mov word [bp-020h], ax                    ; 89 46 e0
-    mov ax, word [es:si+002h]                 ; 26 8b 44 02
-    mov word [bp-01eh], ax                    ; 89 46 e2
-    mov di, word [es:si+004h]                 ; 26 8b 7c 04
-    mov ax, word [es:si+006h]                 ; 26 8b 44 06
-    mov word [bp-00eh], ax                    ; 89 46 f2
-    mov ax, word [es:si+012h]                 ; 26 8b 44 12
-    mov word [bp-010h], ax                    ; 89 46 f0
-    mov ax, word [es:si+00eh]                 ; 26 8b 44 0e
+    jmp near 02133h                           ; e9 47 02
+    mov es, [bp-01ah]                         ; 8e 46 e6
+    mov di, word [bp-018h]                    ; 8b 7e e8
+    mov di, word [es:di+008h]                 ; 26 8b 7d 08
+    mov bx, word [bp-018h]                    ; 8b 5e e8
+    mov ax, word [es:bx+00ah]                 ; 26 8b 47 0a
     mov word [bp-012h], ax                    ; 89 46 ee
-    mov ax, word [es:si+010h]                 ; 26 8b 44 10
-    mov word [bp-018h], ax                    ; 89 46 e8
-    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov al, byte [es:bx+016h]                 ; 26 8a 47 16
+    mov byte [bp-006h], al                    ; 88 46 fa
+    mov ax, word [es:bx+012h]                 ; 26 8b 47 12
+    mov word [bp-014h], ax                    ; 89 46 ec
+    mov bl, byte [es:bx+014h]                 ; 26 8a 5f 14
+    mov al, byte [bp-006h]                    ; 8a 46 fa
+    test al, al                               ; 84 c0
+    jne near 01ffeh                           ; 0f 85 e3 00
+    xor bx, bx                                ; 31 db
+    xor dx, dx                                ; 31 d2
+    xor ah, ah                                ; 30 e4
+    mov word [bp-016h], ax                    ; 89 46 ea
+    mov si, word [bp-018h]                    ; 8b 76 e8
+    mov cx, word [es:si]                      ; 26 8b 0c
+    add cx, word [bp-01eh]                    ; 03 4e e2
+    adc bx, word [es:si+002h]                 ; 26 13 5c 02
+    adc dx, word [es:si+004h]                 ; 26 13 54 04
+    mov ax, word [es:si+006h]                 ; 26 8b 44 06
+    adc ax, word [bp-016h]                    ; 13 46 ea
     test ax, ax                               ; 85 c0
-    jne short 01e7dh                          ; 75 67
-    mov dx, word [bp-020h]                    ; 8b 56 e0
-    add dx, word [bp-014h]                    ; 03 56 ec
-    adc ax, word [bp-01eh]                    ; 13 46 e2
-    cmp ax, 01000h                            ; 3d 00 10
-    jnbe short 01e26h                         ; 77 02
-    jne short 01e51h                          ; 75 2b
+    jnbe short 01f50h                         ; 77 10
+    jne short 01fb4h                          ; 75 72
+    test dx, dx                               ; 85 d2
+    jnbe short 01f50h                         ; 77 0a
+    jne short 01fb4h                          ; 75 6c
+    cmp bx, 01000h                            ; 81 fb 00 10
+    jnbe short 01f50h                         ; 77 02
+    jne short 01fb4h                          ; 75 64
+    mov bx, si                                ; 89 f3
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00018h                ; be 18 00
+    call 09d4ah                               ; e8 e3 7d
+    xor dh, dh                                ; 30 f6
+    mov word [bp-016h], dx                    ; 89 56 ea
+    mov bx, word [bp-018h]                    ; 8b 5e e8
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-018h]                    ; 8b 76 e8
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00020h                ; be 20 00
+    call 09d4ah                               ; e8 c3 7d
+    mov bx, dx                                ; 89 d3
     mov ax, word [bp-01eh]                    ; 8b 46 e2
     xor al, al                                ; 30 c0
     shr ax, 008h                              ; c1 e8 08
-    mov word [bp-010h], ax                    ; 89 46 f0
-    mov ax, word [bp-014h]                    ; 8b 46 ec
-    xor al, al                                ; 30 c0
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    inc dx                                    ; 42
+    inc dx                                    ; 42
+    out DX, AL                                ; ee
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00003h                ; 83 c2 03
+    mov al, byte [bp-016h]                    ; 8a 46 ea
+    out DX, AL                                ; ee
+    mov ax, bx                                ; 89 d8
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00004h                ; 83 c2 04
+    out DX, AL                                ; ee
     shr ax, 008h                              ; c1 e8 08
-    lea dx, [bx+002h]                         ; 8d 57 02
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00005h                ; 83 c2 05
     out DX, AL                                ; ee
-    lea dx, [bx+003h]                         ; 8d 57 03
-    mov al, byte [bp-010h]                    ; 8a 46 f0
+    mov es, [bp-01ah]                         ; 8e 46 e6
+    mov bx, word [bp-018h]                    ; 8b 5e e8
+    mov ax, word [es:bx]                      ; 26 8b 07
+    mov byte [bp-006h], al                    ; 88 46 fa
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-018h]                    ; 8b 76 e8
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00008h                ; be 08 00
+    call 09d4ah                               ; e8 72 7d
+    mov word [bp-014h], dx                    ; 89 56 ec
+    mov bx, word [bp-018h]                    ; 8b 5e e8
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-018h]                    ; 8b 76 e8
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00018h                ; be 18 00
+    call 09d4ah                               ; e8 54 7d
+    and dx, strict byte 0000fh                ; 83 e2 0f
+    or dl, 040h                               ; 80 ca 40
+    mov bx, dx                                ; 89 d3
+    mov dx, word [bp-010h]                    ; 8b 56 f0
+    add dx, strict byte 00006h                ; 83 c2 06
+    mov AL, strict byte 00ah                  ; b0 0a
     out DX, AL                                ; ee
-    lea dx, [bx+004h]                         ; 8d 57 04
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    inc dx                                    ; 42
     xor al, al                                ; 30 c0
     out DX, AL                                ; ee
-    lea dx, [bx+005h]                         ; 8d 57 05
-    out DX, AL                                ; ee
-    mov byte [bp-01dh], al                    ; 88 46 e3
-    mov ax, word [bp-020h]                    ; 8b 46 e0
-    xor ah, ah                                ; 30 e4
-    mov word [bp-010h], ax                    ; 89 46 f0
-    mov cx, strict word 00008h                ; b9 08 00
-    shr word [bp-01eh], 1                     ; d1 6e e2
-    rcr word [bp-020h], 1                     ; d1 5e e0
-    loop 01e5ch                               ; e2 f8
-    mov ax, word [bp-020h]                    ; 8b 46 e0
-    mov word [bp-012h], ax                    ; 89 46 ee
-    mov ax, word [bp-01eh]                    ; 8b 46 e2
-    mov word [bp-020h], ax                    ; 89 46 e0
-    mov word [bp-01eh], strict word 00000h    ; c7 46 e2 00 00
-    and ax, strict word 0000fh                ; 25 0f 00
-    or AL, strict byte 040h                   ; 0c 40
-    mov word [bp-018h], ax                    ; 89 46 e8
-    mov dx, word [bp-01ch]                    ; 8b 56 e4
-    add dx, strict byte 00006h                ; 83 c2 06
-    mov AL, strict byte 00ah                  ; b0 0a
-    out DX, AL                                ; ee
-    lea dx, [bx+001h]                         ; 8d 57 01
-    xor al, al                                ; 30 c0
-    out DX, AL                                ; ee
-    lea dx, [bx+002h]                         ; 8d 57 02
-    mov al, byte [bp-014h]                    ; 8a 46 ec
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    inc dx                                    ; 42
+    inc dx                                    ; 42
+    mov al, byte [bp-01eh]                    ; 8a 46 e2
     out DX, AL                                ; ee
-    lea dx, [bx+003h]                         ; 8d 57 03
-    mov al, byte [bp-010h]                    ; 8a 46 f0
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00003h                ; 83 c2 03
+    mov al, byte [bp-006h]                    ; 8a 46 fa
     out DX, AL                                ; ee
-    mov ax, word [bp-012h]                    ; 8b 46 ee
-    lea dx, [bx+004h]                         ; 8d 57 04
+    mov ax, word [bp-014h]                    ; 8b 46 ec
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00004h                ; 83 c2 04
     out DX, AL                                ; ee
     shr ax, 008h                              ; c1 e8 08
-    lea dx, [bx+005h]                         ; 8d 57 05
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00005h                ; 83 c2 05
     out DX, AL                                ; ee
-    cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    je short 01eb3h                           ; 74 05
+    test byte [bp-00ah], 001h                 ; f6 46 f6 01
+    je short 02040h                           ; 74 05
     mov ax, 000b0h                            ; b8 b0 00
-    jmp short 01eb6h                          ; eb 03
+    jmp short 02043h                          ; eb 03
     mov ax, 000a0h                            ; b8 a0 00
-    movzx dx, byte [bp-018h]                  ; 0f b6 56 e8
+    movzx dx, bl                              ; 0f b6 d3
     or ax, dx                                 ; 09 d0
-    lea dx, [bx+006h]                         ; 8d 57 06
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00006h                ; 83 c2 06
     out DX, AL                                ; ee
-    lea dx, [bx+007h]                         ; 8d 57 07
-    mov al, byte [bp-016h]                    ; 8a 46 ea
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00007h                ; 83 c2 07
+    mov al, byte [bp-01ch]                    ; 8a 46 e4
     out DX, AL                                ; ee
-    mov ax, word [bp-016h]                    ; 8b 46 ea
+    mov ax, word [bp-01ch]                    ; 8b 46 e4
     cmp ax, 000c4h                            ; 3d c4 00
-    je short 01ed4h                           ; 74 05
+    je short 02066h                           ; 74 05
     cmp ax, strict word 00029h                ; 3d 29 00
-    jne short 01ee1h                          ; 75 0d
-    mov ax, word [bp-014h]                    ; 8b 46 ec
-    mov word [bp-01ah], ax                    ; 89 46 e6
-    mov word [bp-014h], strict word 00001h    ; c7 46 ec 01 00
-    jmp short 01ee6h                          ; eb 05
-    mov word [bp-01ah], strict word 00001h    ; c7 46 e6 01 00
-    lea dx, [bx+007h]                         ; 8d 57 07
+    jne short 02070h                          ; 75 0a
+    mov bx, word [bp-01eh]                    ; 8b 5e e2
+    mov word [bp-01eh], strict word 00001h    ; c7 46 e2 01 00
+    jmp short 02073h                          ; eb 03
+    mov bx, strict word 00001h                ; bb 01 00
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov dl, al                                ; 88 c2
     test AL, strict byte 080h                 ; a8 80
-    jne short 01ee6h                          ; 75 f4
+    jne short 02073h                          ; 75 f1
     test AL, strict byte 001h                 ; a8 01
-    je short 01f05h                           ; 74 0f
-    mov dx, word [bp-01ch]                    ; 8b 56 e4
+    je short 02095h                           ; 74 0f
+    mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00002h                ; ba 02 00
-    jmp near 01f9eh                           ; e9 99 00
+    jmp near 02133h                           ; e9 9e 00
     test dl, 008h                             ; f6 c2 08
-    jne short 01f19h                          ; 75 0f
-    mov dx, word [bp-01ch]                    ; 8b 56 e4
+    jne short 020a9h                          ; 75 0f
+    mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00003h                ; ba 03 00
-    jmp near 01f9eh                           ; e9 85 00
+    jmp near 02133h                           ; e9 8a 00
     sti                                       ; fb
     cmp di, 0f800h                            ; 81 ff 00 f8
-    jc short 01f2dh                           ; 72 0d
+    jc short 020bdh                           ; 72 0d
     sub di, 00800h                            ; 81 ef 00 08
-    mov ax, word [bp-00eh]                    ; 8b 46 f2
+    mov ax, word [bp-012h]                    ; 8b 46 ee
     add ax, 00080h                            ; 05 80 00
-    mov word [bp-00eh], ax                    ; 89 46 f2
-    cmp byte [bp-006h], 001h                  ; 80 7e fa 01
-    jne short 01f40h                          ; 75 0d
-    mov dx, bx                                ; 89 da
-    mov cx, word [bp-00ch]                    ; 8b 4e f4
-    mov es, [bp-00eh]                         ; 8e 46 f2
+    mov word [bp-012h], ax                    ; 89 46 ee
+    cmp byte [bp-008h], 001h                  ; 80 7e f8 01
+    jne short 020d1h                          ; 75 0e
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    mov cx, word [bp-00eh]                    ; 8b 4e f2
+    mov es, [bp-012h]                         ; 8e 46 ee
     db  0f3h, 066h, 06dh
     ; rep insd                                  ; f3 66 6d
-    jmp short 01f4ah                          ; eb 0a
-    mov dx, bx                                ; 89 da
-    mov cx, word [bp-00ch]                    ; 8b 4e f4
-    mov es, [bp-00eh]                         ; 8e 46 f2
+    jmp short 020dch                          ; eb 0b
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    mov cx, word [bp-00eh]                    ; 8b 4e f2
+    mov es, [bp-012h]                         ; 8e 46 ee
     rep insw                                  ; f3 6d
-    mov ax, word [bp-01ah]                    ; 8b 46 e6
-    mov es, [bp-00ah]                         ; 8e 46 f6
-    add word [es:si+014h], ax                 ; 26 01 44 14
-    dec word [bp-014h]                        ; ff 4e ec
-    lea dx, [bx+007h]                         ; 8d 57 07
+    mov es, [bp-01ah]                         ; 8e 46 e6
+    mov si, word [bp-018h]                    ; 8b 76 e8
+    add word [es:si+018h], bx                 ; 26 01 5c 18
+    dec word [bp-01eh]                        ; ff 4e e2
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov dl, al                                ; 88 c2
     test AL, strict byte 080h                 ; a8 80
-    jne short 01f57h                          ; 75 f4
-    cmp word [bp-014h], strict byte 00000h    ; 83 7e ec 00
-    jne short 01f7dh                          ; 75 14
+    jne short 020e9h                          ; 75 f1
+    cmp word [bp-01eh], strict byte 00000h    ; 83 7e e2 00
+    jne short 02112h                          ; 75 14
     and AL, strict byte 0c9h                  ; 24 c9
     cmp AL, strict byte 040h                  ; 3c 40
-    je short 01f93h                           ; 74 24
-    mov dx, word [bp-01ch]                    ; 8b 56 e4
+    je short 02128h                           ; 74 24
+    mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00004h                ; ba 04 00
-    jmp short 01f9eh                          ; eb 21
+    jmp short 02133h                          ; eb 21
     mov al, dl                                ; 88 d0
     and AL, strict byte 0c9h                  ; 24 c9
     cmp AL, strict byte 048h                  ; 3c 48
-    je short 01f1ah                           ; 74 95
-    mov dx, word [bp-01ch]                    ; 8b 56 e4
+    je short 020aah                           ; 74 90
+    mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00005h                ; ba 05 00
-    jmp short 01f9eh                          ; eb 0b
-    mov dx, word [bp-01ch]                    ; 8b 56 e4
+    jmp short 02133h                          ; eb 0b
+    mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
@@ -2176,33 +2311,33 @@ ata_cmd_data_in_:                            ; 0xf1d4f LB 0x258
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-_ata_detect:                                 ; 0xf1fa7 LB 0x617
+_ata_detect:                                 ; 0xf213c LB 0x65c
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, 0025ch                            ; 81 ec 5c 02
+    sub sp, 00260h                            ; 81 ec 60 02
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 b3 f6
-    mov word [bp-024h], ax                    ; 89 46 dc
+    call 0166ch                               ; e8 1e f5
+    mov word [bp-020h], ax                    ; 89 46 e0
     mov di, 00122h                            ; bf 22 01
     mov es, ax                                ; 8e c0
-    mov word [bp-028h], di                    ; 89 7e d8
-    mov word [bp-026h], ax                    ; 89 46 da
-    mov byte [es:di+001c0h], 000h             ; 26 c6 85 c0 01 00
-    db  066h, 026h, 0c7h, 085h, 0c2h, 001h, 0f0h, 001h, 0f0h, 003h
-    ; mov dword [es:di+001c2h], strict dword 003f001f0h ; 66 26 c7 85 c2 01 f0 01 f0 03
-    mov byte [es:di+001c1h], 00eh             ; 26 c6 85 c1 01 0e
-    mov byte [es:di+001c6h], 000h             ; 26 c6 85 c6 01 00
-    db  066h, 026h, 0c7h, 085h, 0c8h, 001h, 070h, 001h, 070h, 003h
-    ; mov dword [es:di+001c8h], strict dword 003700170h ; 66 26 c7 85 c8 01 70 01 70 03
-    mov byte [es:di+001c7h], 00fh             ; 26 c6 85 c7 01 0f
+    mov word [bp-022h], di                    ; 89 7e de
+    mov word [bp-034h], ax                    ; 89 46 cc
+    mov byte [es:di+00204h], 000h             ; 26 c6 85 04 02 00
+    db  066h, 026h, 0c7h, 085h, 006h, 002h, 0f0h, 001h, 0f0h, 003h
+    ; mov dword [es:di+00206h], strict dword 003f001f0h ; 66 26 c7 85 06 02 f0 01 f0 03
+    mov byte [es:di+00205h], 00eh             ; 26 c6 85 05 02 0e
+    mov byte [es:di+0020ah], 000h             ; 26 c6 85 0a 02 00
+    db  066h, 026h, 0c7h, 085h, 00ch, 002h, 070h, 001h, 070h, 003h
+    ; mov dword [es:di+0020ch], strict dword 003700170h ; 66 26 c7 85 0c 02 70 01 70 03
+    mov byte [es:di+0020bh], 00fh             ; 26 c6 85 0b 02 0f
     xor al, al                                ; 30 c0
-    mov byte [bp-00ah], al                    ; 88 46 f6
     mov byte [bp-006h], al                    ; 88 46 fa
-    mov byte [bp-00eh], al                    ; 88 46 f2
-    jmp near 02549h                           ; e9 48 05
+    mov byte [bp-010h], al                    ; 88 46 f0
+    mov byte [bp-016h], al                    ; 88 46 ea
+    jmp near 0271ch                           ; e9 86 05
     mov ax, 000a0h                            ; b8 a0 00
     lea dx, [si+006h]                         ; 8d 54 06
     out DX, AL                                ; ee
@@ -2234,20 +2369,21 @@ _ata_detect:                                 ; 0xf1fa7 LB 0x617
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp cl, 055h                              ; 80 f9 55
-    jne near 020fbh                           ; 0f 85 c0 00
+    jne near 0229ah                           ; 0f 85 ca 00
     cmp AL, strict byte 0aah                  ; 3c aa
-    jne near 020fbh                           ; 0f 85 ba 00
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    les bx, [bp-028h]                         ; c4 5e d8
+    jne near 0229ah                           ; 0f 85 c4 00
+    movzx ax, byte [bp-016h]                  ; 0f b6 46 ea
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov bx, word [bp-022h]                    ; 8b 5e de
     add bx, ax                                ; 01 c3
-    mov byte [es:bx+01eh], 001h               ; 26 c6 47 1e 01
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    call 01c71h                               ; e8 18 fc
-    cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    je short 02064h                           ; 74 05
+    mov byte [es:bx+022h], 001h               ; 26 c6 47 22 01
+    movzx ax, byte [bp-016h]                  ; 0f b6 46 ea
+    call 01d7ch                               ; e8 8b fb
+    cmp byte [bp-00eh], 000h                  ; 80 7e f2 00
+    je short 021fch                           ; 74 05
     mov ax, 000b0h                            ; b8 b0 00
-    jmp short 02067h                          ; eb 03
+    jmp short 021ffh                          ; eb 03
     mov ax, 000a0h                            ; b8 a0 00
     lea dx, [si+006h]                         ; 8d 54 06
     out DX, AL                                ; ee
@@ -2261,705 +2397,785 @@ _ata_detect:                                 ; 0xf1fa7 LB 0x617
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp bl, 001h                              ; 80 fb 01
-    jne near 020fbh                           ; 0f 85 7b 00
+    jne near 0229ah                           ; 0f 85 82 00
     cmp al, bl                                ; 38 d8
-    jne near 020fbh                           ; 0f 85 75 00
+    jne near 0229ah                           ; 0f 85 7c 00
     lea dx, [si+004h]                         ; 8d 54 04
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov bx, ax                                ; 89 c3
-    mov bh, al                                ; 88 c7
+    mov byte [bp-018h], al                    ; 88 46 e8
     lea dx, [si+005h]                         ; 8d 54 05
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov cx, ax                                ; 89 c1
-    mov byte [bp-00ch], al                    ; 88 46 f4
+    mov bh, al                                ; 88 c7
     lea dx, [si+007h]                         ; 8d 54 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp bl, 014h                              ; 80 fb 14
-    jne short 020beh                          ; 75 18
+    jne short 02259h                          ; 75 1b
     cmp cl, 0ebh                              ; 80 f9 eb
-    jne short 020beh                          ; 75 13
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    les bx, [bp-028h]                         ; c4 5e d8
+    jne short 02259h                          ; 75 16
+    movzx ax, byte [bp-016h]                  ; 0f b6 46 ea
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov bx, word [bp-022h]                    ; 8b 5e de
     add bx, ax                                ; 01 c3
-    mov byte [es:bx+01eh], 003h               ; 26 c6 47 1e 03
-    jmp short 020fbh                          ; eb 3d
+    mov byte [es:bx+022h], 003h               ; 26 c6 47 22 03
+    jmp short 0229ah                          ; eb 41
+    cmp byte [bp-018h], 000h                  ; 80 7e e8 00
+    jne short 0227bh                          ; 75 1c
     test bh, bh                               ; 84 ff
-    jne short 020e0h                          ; 75 1e
-    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    jne short 020e0h                          ; 75 18
+    jne short 0227bh                          ; 75 18
     test al, al                               ; 84 c0
-    je short 020e0h                           ; 74 14
-    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
-    imul bx, bx, strict byte 00018h           ; 6b db 18
-    mov es, [bp-026h]                         ; 8e 46 da
-    add bx, word [bp-028h]                    ; 03 5e d8
-    mov byte [es:bx+01eh], 002h               ; 26 c6 47 1e 02
-    jmp short 020fbh                          ; eb 1b
-    cmp bh, 0ffh                              ; 80 ff ff
-    jne short 020fbh                          ; 75 16
-    cmp bh, byte [bp-00ch]                    ; 3a 7e f4
-    jne short 020fbh                          ; 75 11
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    les bx, [bp-028h]                         ; c4 5e d8
+    je short 0227bh                           ; 74 14
+    movzx bx, byte [bp-016h]                  ; 0f b6 5e ea
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    add bx, word [bp-022h]                    ; 03 5e de
+    mov byte [es:bx+022h], 002h               ; 26 c6 47 22 02
+    jmp short 0229ah                          ; eb 1f
+    mov al, byte [bp-018h]                    ; 8a 46 e8
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    jne short 0229ah                          ; 75 18
+    cmp bh, al                                ; 38 c7
+    jne short 0229ah                          ; 75 14
+    movzx ax, byte [bp-016h]                  ; 0f b6 46 ea
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov bx, word [bp-022h]                    ; 8b 5e de
     add bx, ax                                ; 01 c3
-    mov byte [es:bx+01eh], 000h               ; 26 c6 47 1e 00
-    mov dx, word [bp-02ch]                    ; 8b 56 d4
+    mov byte [es:bx+022h], 000h               ; 26 c6 47 22 00
+    mov dx, word [bp-024h]                    ; 8b 56 dc
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
-    movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
-    imul si, si, strict byte 00018h           ; 6b f6 18
-    mov es, [bp-026h]                         ; 8e 46 da
-    add si, word [bp-028h]                    ; 03 76 d8
-    mov al, byte [es:si+01eh]                 ; 26 8a 44 1e
-    mov byte [bp-010h], al                    ; 88 46 f0
+    movzx si, byte [bp-016h]                  ; 0f b6 76 ea
+    imul si, si, strict byte 0001ch           ; 6b f6 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    add si, word [bp-022h]                    ; 03 76 de
+    mov al, byte [es:si+022h]                 ; 26 8a 44 22
+    mov byte [bp-00ah], al                    ; 88 46 f6
     cmp AL, strict byte 002h                  ; 3c 02
-    jne near 02321h                           ; 0f 85 03 02
-    mov byte [es:si+01fh], 0ffh               ; 26 c6 44 1f ff
-    mov byte [es:si+022h], 000h               ; 26 c6 44 22 00
-    lea dx, [bp-00260h]                       ; 8d 96 a0 fd
-    mov bx, word [bp-028h]                    ; 8b 5e d8
-    mov word [es:bx+004h], dx                 ; 26 89 57 04
-    mov [es:bx+006h], ss                      ; 26 8c 57 06
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
-    mov byte [es:bx+008h], al                 ; 26 88 47 08
+    jne near 024e9h                           ; 0f 85 2c 02
+    mov byte [es:si+023h], 0ffh               ; 26 c6 44 23 ff
+    mov byte [es:si+026h], 000h               ; 26 c6 44 26 00
+    lea dx, [bp-00264h]                       ; 8d 96 9c fd
+    mov bx, word [bp-022h]                    ; 8b 5e de
+    mov word [es:bx+008h], dx                 ; 26 89 57 08
+    mov [es:bx+00ah], ss                      ; 26 8c 57 0a
+    mov al, byte [bp-016h]                    ; 8a 46 ea
+    mov byte [es:bx+00ch], al                 ; 26 88 47 0c
     mov cx, strict word 00001h                ; b9 01 00
     mov bx, 000ech                            ; bb ec 00
-    mov ax, word [bp-028h]                    ; 8b 46 d8
+    mov ax, word [bp-022h]                    ; 8b 46 de
     mov dx, es                                ; 8c c2
-    call 01d4fh                               ; e8 03 fc
+    call 01e5ah                               ; e8 6f fb
     test ax, ax                               ; 85 c0
-    je short 0215bh                           ; 74 0b
-    push 00104h                               ; 68 04 01
+    je short 022fah                           ; 74 0b
+    push 00124h                               ; 68 24 01
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 1a f8
+    call 01972h                               ; e8 7b f6
     add sp, strict byte 00004h                ; 83 c4 04
-    test byte [bp-00260h], 080h               ; f6 86 a0 fd 80
+    test byte [bp-00264h], 080h               ; f6 86 9c fd 80
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
     xor ah, ah                                ; 30 e4
     mov byte [bp-014h], al                    ; 88 46 ec
-    cmp byte [bp-00200h], 000h                ; 80 be 00 fe 00
+    cmp byte [bp-00204h], 000h                ; 80 be fc fd 00
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
     xor ah, ah                                ; 30 e4
-    mov byte [bp-016h], al                    ; 88 46 ea
-    mov word [bp-022h], 00200h                ; c7 46 de 00 02
+    mov byte [bp-012h], al                    ; 88 46 ee
+    mov word [bp-02ah], 00200h                ; c7 46 d6 00 02
+    mov ax, word [bp-00262h]                  ; 8b 86 9e fd
+    mov word [bp-026h], ax                    ; 89 46 da
     mov ax, word [bp-0025eh]                  ; 8b 86 a2 fd
-    mov word [bp-01ah], ax                    ; 89 46 e6
-    mov ax, word [bp-0025ah]                  ; 8b 86 a6 fd
     mov word [bp-01ch], ax                    ; 89 46 e4
-    mov ax, word [bp-00254h]                  ; 8b 86 ac fd
+    mov ax, word [bp-00258h]                  ; 8b 86 a8 fd
+    mov word [bp-01ah], ax                    ; 89 46 e6
+    mov si, word [bp-001ech]                  ; 8b b6 14 fe
+    mov ax, word [bp-001eah]                  ; 8b 86 16 fe
+    mov word [bp-02ch], ax                    ; 89 46 d4
+    xor ax, ax                                ; 31 c0
+    mov word [bp-028h], ax                    ; 89 46 d8
+    mov word [bp-01eh], ax                    ; 89 46 e2
+    cmp word [bp-02ch], 00fffh                ; 81 7e d4 ff 0f
+    jne short 02366h                          ; 75 1e
+    cmp si, strict byte 0ffffh                ; 83 fe ff
+    jne short 02366h                          ; 75 19
+    mov ax, word [bp-00196h]                  ; 8b 86 6a fe
     mov word [bp-01eh], ax                    ; 89 46 e2
-    mov ax, word [bp-001e8h]                  ; 8b 86 18 fe
-    mov word [bp-020h], ax                    ; 89 46 e0
-    mov si, word [bp-001e6h]                  ; 8b b6 1a fe
-    cmp si, 00fffh                            ; 81 fe ff 0f
-    jne short 021b0h                          ; 75 10
-    cmp ax, strict word 0ffffh                ; 3d ff ff
-    jne short 021b0h                          ; 75 0b
     mov ax, word [bp-00198h]                  ; 8b 86 68 fe
-    mov word [bp-020h], ax                    ; 89 46 e0
-    mov si, word [bp-00196h]                  ; 8b b6 6a fe
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
+    mov word [bp-028h], ax                    ; 89 46 d8
+    mov ax, word [bp-0019ah]                  ; 8b 86 66 fe
+    mov word [bp-02ch], ax                    ; 89 46 d4
+    mov si, word [bp-0019ch]                  ; 8b b6 64 fe
+    mov al, byte [bp-016h]                    ; 8a 46 ea
     cmp AL, strict byte 001h                  ; 3c 01
-    jc short 021c3h                           ; 72 0c
-    jbe short 021cbh                          ; 76 12
+    jc short 02379h                           ; 72 0c
+    jbe short 02381h                          ; 76 12
     cmp AL, strict byte 003h                  ; 3c 03
-    je short 021d3h                           ; 74 16
+    je short 02389h                           ; 74 16
     cmp AL, strict byte 002h                  ; 3c 02
-    je short 021cfh                           ; 74 0e
-    jmp short 02210h                          ; eb 4d
+    je short 02385h                           ; 74 0e
+    jmp short 023c6h                          ; eb 4d
     test al, al                               ; 84 c0
-    jne short 02210h                          ; 75 49
+    jne short 023c6h                          ; 75 49
     mov BL, strict byte 01eh                  ; b3 1e
-    jmp short 021d5h                          ; eb 0a
+    jmp short 0238bh                          ; eb 0a
     mov BL, strict byte 026h                  ; b3 26
-    jmp short 021d5h                          ; eb 06
+    jmp short 0238bh                          ; eb 06
     mov BL, strict byte 067h                  ; b3 67
-    jmp short 021d5h                          ; eb 02
+    jmp short 0238bh                          ; eb 02
     mov BL, strict byte 070h                  ; b3 70
     mov al, bl                                ; 88 d8
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     xor ah, ah                                ; 30 e4
-    call 016ach                               ; e8 ce f4
+    call 016ach                               ; e8 18 f3
     xor ah, ah                                ; 30 e4
     mov dx, ax                                ; 89 c2
     sal dx, 008h                              ; c1 e2 08
     movzx ax, bl                              ; 0f b6 c3
-    call 016ach                               ; e8 c1 f4
+    call 016ach                               ; e8 0b f3
     xor ah, ah                                ; 30 e4
     add ax, dx                                ; 01 d0
-    mov word [bp-034h], ax                    ; 89 46 cc
+    mov word [bp-038h], ax                    ; 89 46 c8
     mov al, bl                                ; 88 d8
     add AL, strict byte 002h                  ; 04 02
     xor ah, ah                                ; 30 e4
-    call 016ach                               ; e8 b1 f4
+    call 016ach                               ; e8 fb f2
     xor ah, ah                                ; 30 e4
-    mov word [bp-036h], ax                    ; 89 46 ca
+    mov word [bp-03ah], ax                    ; 89 46 c6
     mov al, bl                                ; 88 d8
     add AL, strict byte 007h                  ; 04 07
     xor ah, ah                                ; 30 e4
-    call 016ach                               ; e8 a3 f4
+    call 016ach                               ; e8 ed f2
     xor ah, ah                                ; 30 e4
-    mov word [bp-032h], ax                    ; 89 46 ce
-    jmp short 0221dh                          ; eb 0d
-    mov bx, word [bp-020h]                    ; 8b 5e e0
-    mov cx, si                                ; 89 f1
+    mov word [bp-036h], ax                    ; 89 46 ca
+    jmp short 023d8h                          ; eb 12
+    push word [bp-01eh]                       ; ff 76 e2
+    push word [bp-028h]                       ; ff 76 d8
+    push word [bp-02ch]                       ; ff 76 d4
+    push si                                   ; 56
     mov dx, ss                                ; 8c d2
-    lea ax, [bp-036h]                         ; 8d 46 ca
-    call 055b6h                               ; e8 99 33
-    mov bx, 00da2h                            ; bb a2 0d
+    lea ax, [bp-03ah]                         ; 8d 46 c6
+    call 0588bh                               ; e8 b3 34
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 09 f7
-    mov ax, word [bp-032h]                    ; 8b 46 ce
-    push ax                                   ; 50
+    call 01931h                               ; e8 4e f5
     mov ax, word [bp-036h]                    ; 8b 46 ca
     push ax                                   ; 50
-    mov ax, word [bp-034h]                    ; 8b 46 cc
+    mov ax, word [bp-03ah]                    ; 8b 46 c6
     push ax                                   ; 50
-    push word [bp-01eh]                       ; ff 76 e2
-    push word [bp-01ch]                       ; ff 76 e4
-    push word [bp-01ah]                       ; ff 76 e6
-    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    mov ax, word [bp-038h]                    ; 8b 46 c8
+    push ax                                   ; 50
+    push dword [bp-01ch]                      ; 66 ff 76 e4
+    push word [bp-026h]                       ; ff 76 da
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
     push ax                                   ; 50
-    movzx ax, byte [bp-018h]                  ; 0f b6 46 e8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 0012dh                               ; 68 2d 01
+    push 0014dh                               ; 68 4d 01
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 23 f7
+    call 01972h                               ; e8 6a f5
     add sp, strict byte 00014h                ; 83 c4 14
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    les di, [bp-028h]                         ; c4 7e d8
-    add di, ax                                ; 01 c7
-    mov byte [es:di+01fh], 0ffh               ; 26 c6 45 1f ff
+    movzx di, byte [bp-016h]                  ; 0f b6 7e ea
+    imul di, di, strict byte 0001ch           ; 6b ff 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    add di, word [bp-022h]                    ; 03 7e de
+    mov byte [es:di+023h], 0ffh               ; 26 c6 45 23 ff
     mov al, byte [bp-014h]                    ; 8a 46 ec
-    mov byte [es:di+020h], al                 ; 26 88 45 20
-    mov al, byte [bp-016h]                    ; 8a 46 ea
-    mov byte [es:di+022h], al                 ; 26 88 45 22
-    mov ax, word [bp-022h]                    ; 8b 46 de
-    mov word [es:di+024h], ax                 ; 26 89 45 24
+    mov byte [es:di+024h], al                 ; 26 88 45 24
+    mov al, byte [bp-012h]                    ; 8a 46 ee
+    mov byte [es:di+026h], al                 ; 26 88 45 26
+    mov ax, word [bp-02ah]                    ; 8b 46 d6
+    mov word [es:di+028h], ax                 ; 26 89 45 28
     mov ax, word [bp-01ch]                    ; 8b 46 e4
-    mov word [es:di+02ch], ax                 ; 26 89 45 2c
-    mov ax, word [bp-01ah]                    ; 8b 46 e6
-    mov word [es:di+02eh], ax                 ; 26 89 45 2e
-    mov ax, word [bp-01eh]                    ; 8b 46 e2
     mov word [es:di+030h], ax                 ; 26 89 45 30
-    mov ax, word [bp-020h]                    ; 8b 46 e0
+    mov ax, word [bp-026h]                    ; 8b 46 da
     mov word [es:di+032h], ax                 ; 26 89 45 32
-    mov word [es:di+034h], si                 ; 26 89 75 34
-    lea di, [di+026h]                         ; 8d 7d 26
+    mov ax, word [bp-01ah]                    ; 8b 46 e6
+    mov word [es:di+034h], ax                 ; 26 89 45 34
+    mov ax, word [bp-01eh]                    ; 8b 46 e2
+    mov word [es:di+03ch], ax                 ; 26 89 45 3c
+    mov ax, word [bp-028h]                    ; 8b 46 d8
+    mov word [es:di+03ah], ax                 ; 26 89 45 3a
+    mov ax, word [bp-02ch]                    ; 8b 46 d4
+    mov word [es:di+038h], ax                 ; 26 89 45 38
+    mov word [es:di+036h], si                 ; 26 89 75 36
+    lea di, [di+02ah]                         ; 8d 7d 2a
     push DS                                   ; 1e
     push SS                                   ; 16
     pop DS                                    ; 1f
-    lea si, [bp-036h]                         ; 8d 76 ca
+    lea si, [bp-03ah]                         ; 8d 76 c6
     movsw                                     ; a5
     movsw                                     ; a5
     movsw                                     ; a5
     pop DS                                    ; 1f
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
+    mov al, byte [bp-016h]                    ; 8a 46 ea
     cmp AL, strict byte 002h                  ; 3c 02
-    jnc short 0230ch                          ; 73 60
+    jnc short 024d4h                          ; 73 60
     test al, al                               ; 84 c0
-    jne short 022b5h                          ; 75 05
+    jne short 0247dh                          ; 75 05
     mov di, strict word 0003dh                ; bf 3d 00
-    jmp short 022b8h                          ; eb 03
+    jmp short 02480h                          ; eb 03
     mov di, strict word 0004dh                ; bf 4d 00
-    mov dx, word [bp-024h]                    ; 8b 56 dc
-    mov ax, word [bp-034h]                    ; 8b 46 cc
+    mov dx, word [bp-020h]                    ; 8b 56 e0
+    mov ax, word [bp-038h]                    ; 8b 46 c8
     mov es, dx                                ; 8e c2
     mov word [es:di], ax                      ; 26 89 05
-    mov al, byte [bp-036h]                    ; 8a 46 ca
+    mov al, byte [bp-03ah]                    ; 8a 46 c6
     mov byte [es:di+002h], al                 ; 26 88 45 02
     mov byte [es:di+003h], 0a0h               ; 26 c6 45 03 a0
-    mov al, byte [bp-01eh]                    ; 8a 46 e2
+    mov al, byte [bp-01ah]                    ; 8a 46 e6
     mov byte [es:di+004h], al                 ; 26 88 45 04
-    mov ax, word [bp-01ah]                    ; 8b 46 e6
+    mov ax, word [bp-026h]                    ; 8b 46 da
     mov word [es:di+009h], ax                 ; 26 89 45 09
     mov al, byte [bp-01ch]                    ; 8a 46 e4
     mov byte [es:di+00bh], al                 ; 26 88 45 0b
-    mov al, byte [bp-01eh]                    ; 8a 46 e2
+    mov al, byte [bp-01ah]                    ; 8a 46 e6
     mov byte [es:di+00eh], al                 ; 26 88 45 0e
     xor al, al                                ; 30 c0
     xor ah, ah                                ; 30 e4
-    jmp short 022f6h                          ; eb 05
+    jmp short 024beh                          ; eb 05
     cmp ah, 00fh                              ; 80 fc 0f
-    jnc short 02304h                          ; 73 0e
+    jnc short 024cch                          ; 73 0e
     movzx bx, ah                              ; 0f b6 dc
     mov es, dx                                ; 8e c2
     add bx, di                                ; 01 fb
     add al, byte [es:bx]                      ; 26 02 07
     db  0feh, 0c4h
     ; inc ah                                    ; fe c4
-    jmp short 022f1h                          ; eb ed
+    jmp short 024b9h                          ; eb ed
     neg al                                    ; f6 d8
     mov es, dx                                ; 8e c2
     mov byte [es:di+00fh], al                 ; 26 88 45 0f
-    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
-    mov es, [bp-026h]                         ; 8e 46 da
-    add bx, word [bp-028h]                    ; 03 5e d8
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
-    mov byte [es:bx+0019fh], al               ; 26 88 87 9f 01
-    inc byte [bp-006h]                        ; fe 46 fa
-    cmp byte [bp-010h], 003h                  ; 80 7e f0 03
-    jne near 023c1h                           ; 0f 85 98 00
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    les bx, [bp-028h]                         ; c4 5e d8
+    movzx bx, byte [bp-010h]                  ; 0f b6 5e f0
+    mov es, [bp-034h]                         ; 8e 46 cc
+    add bx, word [bp-022h]                    ; 03 5e de
+    mov al, byte [bp-016h]                    ; 8a 46 ea
+    mov byte [es:bx+001e3h], al               ; 26 88 87 e3 01
+    inc byte [bp-010h]                        ; fe 46 f0
+    cmp byte [bp-00ah], 003h                  ; 80 7e f6 03
+    jne near 0258ch                           ; 0f 85 9b 00
+    movzx ax, byte [bp-016h]                  ; 0f b6 46 ea
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov bx, word [bp-022h]                    ; 8b 5e de
     add bx, ax                                ; 01 c3
-    mov byte [es:bx+01fh], 005h               ; 26 c6 47 1f 05
-    mov byte [es:bx+022h], 000h               ; 26 c6 47 22 00
-    lea dx, [bp-00260h]                       ; 8d 96 a0 fd
-    mov bx, word [bp-028h]                    ; 8b 5e d8
-    mov word [es:bx+004h], dx                 ; 26 89 57 04
-    mov [es:bx+006h], ss                      ; 26 8c 57 06
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
-    mov byte [es:bx+008h], al                 ; 26 88 47 08
+    mov byte [es:bx+023h], 005h               ; 26 c6 47 23 05
+    mov byte [es:bx+026h], 000h               ; 26 c6 47 26 00
+    lea dx, [bp-00264h]                       ; 8d 96 9c fd
+    mov bx, word [bp-022h]                    ; 8b 5e de
+    mov word [es:bx+008h], dx                 ; 26 89 57 08
+    mov [es:bx+00ah], ss                      ; 26 8c 57 0a
+    mov al, byte [bp-016h]                    ; 8a 46 ea
+    mov byte [es:bx+00ch], al                 ; 26 88 47 0c
     mov cx, strict word 00001h                ; b9 01 00
     mov bx, 000a1h                            ; bb a1 00
-    mov ax, word [bp-028h]                    ; 8b 46 d8
+    mov ax, word [bp-022h]                    ; 8b 46 de
     mov dx, es                                ; 8c c2
-    call 01d4fh                               ; e8 ec f9
+    call 01e5ah                               ; e8 2c f9
     test ax, ax                               ; 85 c0
-    je short 02372h                           ; 74 0b
-    push 00154h                               ; 68 54 01
+    je short 0253dh                           ; 74 0b
+    push 00174h                               ; 68 74 01
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 03 f6
+    call 01972h                               ; e8 38 f4
     add sp, strict byte 00004h                ; 83 c4 04
-    mov cl, byte [bp-0025fh]                  ; 8a 8e a1 fd
-    and cl, 01fh                              ; 80 e1 1f
-    test byte [bp-00260h], 080h               ; f6 86 a0 fd 80
+    mov dl, byte [bp-00263h]                  ; 8a 96 9d fd
+    and dl, 01fh                              ; 80 e2 1f
+    test byte [bp-00264h], 080h               ; f6 86 9c fd 80
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
-    xor ah, ah                                ; 30 e4
-    mov dx, ax                                ; 89 c2
-    cmp byte [bp-00200h], 000h                ; 80 be 00 fe 00
+    movzx bx, al                              ; 0f b6 d8
+    cmp byte [bp-00204h], 000h                ; 80 be fc fd 00
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
     xor ah, ah                                ; 30 e4
-    mov bx, ax                                ; 89 c3
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    les si, [bp-028h]                         ; c4 76 d8
-    add si, ax                                ; 01 c6
-    mov byte [es:si+01fh], cl                 ; 26 88 4c 1f
-    mov byte [es:si+020h], dl                 ; 26 88 54 20
-    mov byte [es:si+022h], bl                 ; 26 88 5c 22
-    mov word [es:si+024h], 00800h             ; 26 c7 44 24 00 08
-    movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
-    add bx, word [bp-028h]                    ; 03 5e d8
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
-    mov byte [es:bx+001b0h], al               ; 26 88 87 b0 01
-    inc byte [bp-00ah]                        ; fe 46 f6
-    mov al, byte [bp-010h]                    ; 8a 46 f0
+    movzx cx, byte [bp-016h]                  ; 0f b6 4e ea
+    imul cx, cx, strict byte 0001ch           ; 6b c9 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov si, word [bp-022h]                    ; 8b 76 de
+    add si, cx                                ; 01 ce
+    mov byte [es:si+023h], dl                 ; 26 88 54 23
+    mov byte [es:si+024h], bl                 ; 26 88 5c 24
+    mov byte [es:si+026h], al                 ; 26 88 44 26
+    mov word [es:si+028h], 00800h             ; 26 c7 44 28 00 08
+    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    add bx, word [bp-022h]                    ; 03 5e de
+    mov al, byte [bp-016h]                    ; 8a 46 ea
+    mov byte [es:bx+001f4h], al               ; 26 88 87 f4 01
+    inc byte [bp-006h]                        ; fe 46 fa
+    mov al, byte [bp-00ah]                    ; 8a 46 f6
     cmp AL, strict byte 003h                  ; 3c 03
-    je short 023f4h                           ; 74 2c
+    je short 025c4h                           ; 74 31
     cmp AL, strict byte 002h                  ; 3c 02
-    jne near 02457h                           ; 0f 85 89 00
-    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
-    imul bx, bx, strict byte 00018h           ; 6b db 18
-    mov es, [bp-026h]                         ; 8e 46 da
-    add bx, word [bp-028h]                    ; 03 5e d8
-    mov ax, word [es:bx+032h]                 ; 26 8b 47 32
-    mov word [bp-030h], ax                    ; 89 46 d0
-    mov ax, word [es:bx+034h]                 ; 26 8b 47 34
-    mov word [bp-02eh], ax                    ; 89 46 d2
-    mov cx, strict word 0000bh                ; b9 0b 00
-    shr word [bp-02eh], 1                     ; d1 6e d2
-    rcr word [bp-030h], 1                     ; d1 5e d0
-    loop 023ech                               ; e2 f8
-    movzx dx, byte [bp-001bfh]                ; 0f b6 96 41 fe
-    sal dx, 008h                              ; c1 e2 08
-    movzx ax, byte [bp-001c0h]                ; 0f b6 86 40 fe
+    jne near 02627h                           ; 0f 85 8e 00
+    movzx ax, byte [bp-016h]                  ; 0f b6 46 ea
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov si, word [bp-022h]                    ; 8b 76 de
+    add si, ax                                ; 01 c6
+    mov ax, word [es:si+03ch]                 ; 26 8b 44 3c
+    mov bx, word [es:si+03ah]                 ; 26 8b 5c 3a
+    mov cx, word [es:si+038h]                 ; 26 8b 4c 38
+    mov dx, word [es:si+036h]                 ; 26 8b 54 36
+    mov si, strict word 0000bh                ; be 0b 00
+    call 09d4ah                               ; e8 8c 77
+    mov word [bp-030h], dx                    ; 89 56 d0
+    mov word [bp-02eh], cx                    ; 89 4e d2
+    movzx ax, byte [bp-001c3h]                ; 0f b6 86 3d fe
+    sal ax, 008h                              ; c1 e0 08
+    movzx dx, byte [bp-001c4h]                ; 0f b6 96 3c fe
     or dx, ax                                 ; 09 c2
-    mov byte [bp-012h], 00fh                  ; c6 46 ee 0f
-    jmp short 02412h                          ; eb 09
-    dec byte [bp-012h]                        ; fe 4e ee
-    cmp byte [bp-012h], 000h                  ; 80 7e ee 00
-    jbe short 0241fh                          ; 76 0d
-    movzx cx, byte [bp-012h]                  ; 0f b6 4e ee
+    mov byte [bp-00ch], 00fh                  ; c6 46 f4 0f
+    jmp short 025e2h                          ; eb 09
+    dec byte [bp-00ch]                        ; fe 4e f4
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jbe short 025efh                          ; 76 0d
+    movzx cx, byte [bp-00ch]                  ; 0f b6 4e f4
     mov ax, strict word 00001h                ; b8 01 00
     sal ax, CL                                ; d3 e0
     test dx, ax                               ; 85 c2
-    je short 02409h                           ; 74 ea
+    je short 025d9h                           ; 74 ea
     xor di, di                                ; 31 ff
-    jmp short 02428h                          ; eb 05
+    jmp short 025f8h                          ; eb 05
     cmp di, strict byte 00014h                ; 83 ff 14
-    jnl short 0243dh                          ; 7d 15
+    jnl short 0260dh                          ; 7d 15
     mov si, di                                ; 89 fe
     add si, di                                ; 01 fe
-    mov al, byte [bp+si-00229h]               ; 8a 82 d7 fd
-    mov byte [bp+si-060h], al                 ; 88 42 a0
-    mov al, byte [bp+si-0022ah]               ; 8a 82 d6 fd
-    mov byte [bp+si-05fh], al                 ; 88 42 a1
+    mov al, byte [bp+si-0022dh]               ; 8a 82 d3 fd
+    mov byte [bp+si-064h], al                 ; 88 42 9c
+    mov al, byte [bp+si-0022eh]               ; 8a 82 d2 fd
+    mov byte [bp+si-063h], al                 ; 88 42 9d
     inc di                                    ; 47
-    jmp short 02423h                          ; eb e6
-    mov byte [bp-038h], 000h                  ; c6 46 c8 00
+    jmp short 025f3h                          ; eb e6
+    mov byte [bp-03ch], 000h                  ; c6 46 c4 00
     mov di, strict word 00027h                ; bf 27 00
-    jmp short 0244bh                          ; eb 05
+    jmp short 0261bh                          ; eb 05
     dec di                                    ; 4f
     test di, di                               ; 85 ff
-    jle short 02457h                          ; 7e 0c
-    cmp byte [bp+di-060h], 020h               ; 80 7b a0 20
-    jne short 02457h                          ; 75 06
-    mov byte [bp+di-060h], 000h               ; c6 43 a0 00
-    jmp short 02446h                          ; eb ef
-    mov al, byte [bp-010h]                    ; 8a 46 f0
+    jle short 02627h                          ; 7e 0c
+    cmp byte [bp+di-064h], 020h               ; 80 7b 9c 20
+    jne short 02627h                          ; 75 06
+    mov byte [bp+di-064h], 000h               ; c6 43 9c 00
+    jmp short 02616h                          ; eb ef
+    mov al, byte [bp-00ah]                    ; 8a 46 f6
     cmp AL, strict byte 003h                  ; 3c 03
-    je short 024bah                           ; 74 5c
+    je short 0268ah                           ; 74 5c
     cmp AL, strict byte 002h                  ; 3c 02
-    je short 0246bh                           ; 74 09
+    je short 0263bh                           ; 74 09
     cmp AL, strict byte 001h                  ; 3c 01
-    je near 02521h                            ; 0f 84 b9 00
-    jmp near 02540h                           ; e9 d5 00
-    cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    je short 02476h                           ; 74 05
-    mov ax, 0017fh                            ; b8 7f 01
-    jmp short 02479h                          ; eb 03
-    mov ax, 00186h                            ; b8 86 01
+    je near 026f4h                            ; 0f 84 bc 00
+    jmp near 02713h                           ; e9 d8 00
+    cmp byte [bp-00eh], 000h                  ; 80 7e f2 00
+    je short 02646h                           ; 74 05
+    mov ax, 0019fh                            ; b8 9f 01
+    jmp short 02649h                          ; eb 03
+    mov ax, 001a6h                            ; b8 a6 01
     push ax                                   ; 50
-    movzx ax, byte [bp-018h]                  ; 0f b6 46 e8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 0018dh                               ; 68 8d 01
+    push 001adh                               ; 68 ad 01
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 eb f4
+    call 01972h                               ; e8 1b f3
     add sp, strict byte 00008h                ; 83 c4 08
     xor di, di                                ; 31 ff
-    movzx ax, byte [bp+di-060h]               ; 0f b6 43 a0
+    movzx ax, byte [bp+di-064h]               ; 0f b6 43 9c
     inc di                                    ; 47
     test ax, ax                               ; 85 c0
-    je short 024a3h                           ; 74 0e
+    je short 02673h                           ; 74 0e
     push ax                                   ; 50
-    push 00198h                               ; 68 98 01
+    push 001b8h                               ; 68 b8 01
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 d4 f4
+    call 01972h                               ; e8 04 f3
     add sp, strict byte 00006h                ; 83 c4 06
-    jmp short 0248ch                          ; eb e9
+    jmp short 0265ch                          ; eb e9
     push dword [bp-030h]                      ; 66 ff 76 d0
-    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
     push ax                                   ; 50
-    push 0019bh                               ; 68 9b 01
+    push 001bbh                               ; 68 bb 01
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 be f4
+    call 01972h                               ; e8 ee f2
     add sp, strict byte 0000ah                ; 83 c4 0a
-    jmp near 02540h                           ; e9 86 00
-    cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    je short 024c5h                           ; 74 05
-    mov ax, 0017fh                            ; b8 7f 01
-    jmp short 024c8h                          ; eb 03
-    mov ax, 00186h                            ; b8 86 01
+    jmp near 02713h                           ; e9 89 00
+    cmp byte [bp-00eh], 000h                  ; 80 7e f2 00
+    je short 02695h                           ; 74 05
+    mov ax, 0019fh                            ; b8 9f 01
+    jmp short 02698h                          ; eb 03
+    mov ax, 001a6h                            ; b8 a6 01
     push ax                                   ; 50
-    movzx ax, byte [bp-018h]                  ; 0f b6 46 e8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 0018dh                               ; 68 8d 01
+    push 001adh                               ; 68 ad 01
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 9c f4
+    call 01972h                               ; e8 cc f2
     add sp, strict byte 00008h                ; 83 c4 08
     xor di, di                                ; 31 ff
-    movzx ax, byte [bp+di-060h]               ; 0f b6 43 a0
+    movzx ax, byte [bp+di-064h]               ; 0f b6 43 9c
     inc di                                    ; 47
     test ax, ax                               ; 85 c0
-    je short 024f2h                           ; 74 0e
+    je short 026c2h                           ; 74 0e
     push ax                                   ; 50
-    push 00198h                               ; 68 98 01
+    push 001b8h                               ; 68 b8 01
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 85 f4
+    call 01972h                               ; e8 b5 f2
     add sp, strict byte 00006h                ; 83 c4 06
-    jmp short 024dbh                          ; eb e9
-    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    les bx, [bp-028h]                         ; c4 5e d8
+    jmp short 026abh                          ; eb e9
+    movzx ax, byte [bp-016h]                  ; 0f b6 46 ea
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov bx, word [bp-022h]                    ; 8b 5e de
     add bx, ax                                ; 01 c3
-    cmp byte [es:bx+01fh], 005h               ; 26 80 7f 1f 05
-    jne short 0250fh                          ; 75 0a
-    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    cmp byte [es:bx+023h], 005h               ; 26 80 7f 23 05
+    jne short 026e2h                          ; 75 0a
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
     push ax                                   ; 50
-    push 001bbh                               ; 68 bb 01
-    jmp short 02517h                          ; eb 08
-    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push 001dbh                               ; 68 db 01
+    jmp short 026eah                          ; eb 08
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
     push ax                                   ; 50
-    push 001d5h                               ; 68 d5 01
+    push 001f5h                               ; 68 f5 01
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 56 f4
+    call 01972h                               ; e8 83 f2
     add sp, strict byte 00006h                ; 83 c4 06
-    jmp short 02540h                          ; eb 1f
-    cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    je short 0252ch                           ; 74 05
-    mov ax, 0017fh                            ; b8 7f 01
-    jmp short 0252fh                          ; eb 03
-    mov ax, 00186h                            ; b8 86 01
+    jmp short 02713h                          ; eb 1f
+    cmp byte [bp-00eh], 000h                  ; 80 7e f2 00
+    je short 026ffh                           ; 74 05
+    mov ax, 0019fh                            ; b8 9f 01
+    jmp short 02702h                          ; eb 03
+    mov ax, 001a6h                            ; b8 a6 01
     push ax                                   ; 50
-    movzx ax, byte [bp-018h]                  ; 0f b6 46 e8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 001e7h                               ; 68 e7 01
+    push 00207h                               ; 68 07 02
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 35 f4
+    call 01972h                               ; e8 62 f2
     add sp, strict byte 00008h                ; 83 c4 08
-    inc byte [bp-00eh]                        ; fe 46 f2
-    cmp byte [bp-00eh], 008h                  ; 80 7e f2 08
-    jnc short 02597h                          ; 73 4e
-    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
+    inc byte [bp-016h]                        ; fe 46 ea
+    cmp byte [bp-016h], 008h                  ; 80 7e ea 08
+    jnc short 0276eh                          ; 73 52
+    movzx bx, byte [bp-016h]                  ; 0f b6 5e ea
     mov ax, bx                                ; 89 d8
     cwd                                       ; 99
     db  02bh, 0c2h
     ; sub ax, dx                                ; 2b c2
     sar ax, 1                                 ; d1 f8
-    mov word [bp-02ah], ax                    ; 89 46 d6
-    mov al, byte [bp-02ah]                    ; 8a 46 d6
-    mov byte [bp-018h], al                    ; 88 46 e8
+    mov cx, ax                                ; 89 c1
+    mov byte [bp-008h], al                    ; 88 46 f8
     mov ax, bx                                ; 89 d8
     cwd                                       ; 99
     mov bx, strict word 00002h                ; bb 02 00
     idiv bx                                   ; f7 fb
-    mov cx, dx                                ; 89 d1
-    mov byte [bp-008h], dl                    ; 88 56 f8
-    movzx ax, byte [bp-02ah]                  ; 0f b6 46 d6
+    mov word [bp-032h], dx                    ; 89 56 ce
+    mov al, byte [bp-032h]                    ; 8a 46 ce
+    mov byte [bp-00eh], al                    ; 88 46 f2
+    movzx ax, cl                              ; 0f b6 c1
     imul ax, ax, strict byte 00006h           ; 6b c0 06
-    les bx, [bp-028h]                         ; c4 5e d8
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov bx, word [bp-022h]                    ; 8b 5e de
     add bx, ax                                ; 01 c3
-    mov si, word [es:bx+001c2h]               ; 26 8b b7 c2 01
-    mov ax, word [es:bx+001c4h]               ; 26 8b 87 c4 01
-    mov word [bp-02ch], ax                    ; 89 46 d4
+    mov si, word [es:bx+00206h]               ; 26 8b b7 06 02
+    mov ax, word [es:bx+00208h]               ; 26 8b 87 08 02
+    mov word [bp-024h], ax                    ; 89 46 dc
     mov dx, ax                                ; 89 c2
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 00ah                  ; b0 0a
     out DX, AL                                ; ee
-    test cl, cl                               ; 84 c9
-    je near 02001h                            ; 0f 84 70 fa
+    cmp byte [bp-032h], 000h                  ; 80 7e ce 00
+    je near 02196h                            ; 0f 84 2e fa
     mov ax, 000b0h                            ; b8 b0 00
-    jmp near 02004h                           ; e9 6d fa
+    jmp near 02199h                           ; e9 2b fa
+    mov al, byte [bp-010h]                    ; 8a 46 f0
+    mov es, [bp-034h]                         ; 8e 46 cc
+    mov bx, word [bp-022h]                    ; 8b 5e de
+    mov byte [es:bx+001e2h], al               ; 26 88 87 e2 01
     mov al, byte [bp-006h]                    ; 8a 46 fa
-    les bx, [bp-028h]                         ; c4 5e d8
-    mov byte [es:bx+0019eh], al               ; 26 88 87 9e 01
-    mov al, byte [bp-00ah]                    ; 8a 46 f6
-    mov byte [es:bx+001afh], al               ; 26 88 87 af 01
-    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    mov byte [es:bx+001f3h], al               ; 26 88 87 f3 01
+    movzx bx, byte [bp-010h]                  ; 0f b6 5e f0
     mov dx, strict word 00075h                ; ba 75 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 a7 f0
+    call 0165eh                               ; e8 cd ee
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-ata_cmd_data_out_:                           ; 0xf25be LB 0x21a
+ata_cmd_data_out_:                           ; 0xf2798 LB 0x2bc
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, strict byte 0001ah                ; 83 ec 1a
+    sub sp, strict byte 00022h                ; 83 ec 22
     mov di, ax                                ; 89 c7
-    mov word [bp-00ah], dx                    ; 89 56 f6
-    mov word [bp-01ah], bx                    ; 89 5e e6
-    mov word [bp-00eh], cx                    ; 89 4e f2
+    mov word [bp-00ch], dx                    ; 89 56 f4
+    mov word [bp-024h], bx                    ; 89 5e dc
+    mov word [bp-01ah], cx                    ; 89 4e e6
     mov es, dx                                ; 8e c2
-    movzx ax, byte [es:di+008h]               ; 26 0f b6 45 08
+    movzx ax, byte [es:di+00ch]               ; 26 0f b6 45 0c
     mov dx, ax                                ; 89 c2
     shr dx, 1                                 ; d1 ea
     mov dh, al                                ; 88 c6
     and dh, 001h                              ; 80 e6 01
     mov byte [bp-006h], dh                    ; 88 76 fa
-    movzx si, dl                              ; 0f b6 f2
-    imul si, si, strict byte 00006h           ; 6b f6 06
-    add si, di                                ; 01 fe
-    mov bx, word [es:si+001c2h]               ; 26 8b 9c c2 01
-    mov dx, word [es:si+001c4h]               ; 26 8b 94 c4 01
-    mov word [bp-00ch], dx                    ; 89 56 f4
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov si, di                                ; 89 fe
-    add si, ax                                ; 01 c6
-    mov al, byte [es:si+022h]                 ; 26 8a 44 22
+    xor dh, dh                                ; 30 f6
+    imul dx, dx, strict byte 00006h           ; 6b d2 06
+    mov bx, di                                ; 89 fb
+    add bx, dx                                ; 01 d3
+    mov dx, word [es:bx+00206h]               ; 26 8b 97 06 02
+    mov word [bp-00ah], dx                    ; 89 56 f6
+    mov dx, word [es:bx+00208h]               ; 26 8b 97 08 02
+    mov word [bp-012h], dx                    ; 89 56 ee
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov bx, di                                ; 89 fb
+    add bx, ax                                ; 01 c3
+    mov al, byte [es:bx+026h]                 ; 26 8a 47 26
     mov byte [bp-008h], al                    ; 88 46 f8
     cmp AL, strict byte 001h                  ; 3c 01
-    jne short 02612h                          ; 75 07
-    mov word [bp-012h], 00080h                ; c7 46 ee 80 00
-    jmp short 02617h                          ; eb 05
-    mov word [bp-012h], 00100h                ; c7 46 ee 00 01
-    lea dx, [bx+007h]                         ; 8d 57 07
+    jne short 027f0h                          ; 75 07
+    mov word [bp-020h], 00080h                ; c7 46 e0 80 00
+    jmp short 027f5h                          ; eb 05
+    mov word [bp-020h], 00100h                ; c7 46 e0 00 01
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 080h                 ; a8 80
-    je short 02630h                           ; 74 0f
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    je short 02811h                           ; 74 0f
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00001h                ; ba 01 00
-    jmp near 027cfh                           ; e9 9f 01
-    mov es, [bp-00ah]                         ; 8e 46 f6
+    jmp near 02a4bh                           ; e9 3a 02
+    mov es, [bp-00ch]                         ; 8e 46 f4
+    mov ax, word [es:di+006h]                 ; 26 8b 45 06
+    mov word [bp-010h], ax                    ; 89 46 f0
+    mov ax, word [es:di+004h]                 ; 26 8b 45 04
+    mov word [bp-014h], ax                    ; 89 46 ec
+    mov ax, word [es:di+002h]                 ; 26 8b 45 02
+    mov word [bp-016h], ax                    ; 89 46 ea
     mov ax, word [es:di]                      ; 26 8b 05
     mov word [bp-01eh], ax                    ; 89 46 e2
-    mov ax, word [es:di+002h]                 ; 26 8b 45 02
-    mov word [bp-01ch], ax                    ; 89 46 e4
-    mov si, word [es:di+004h]                 ; 26 8b 75 04
-    mov ax, word [es:di+006h]                 ; 26 8b 45 06
+    mov ax, word [es:di+008h]                 ; 26 8b 45 08
+    mov word [bp-00eh], ax                    ; 89 46 f2
+    mov ax, word [es:di+00ah]                 ; 26 8b 45 0a
     mov word [bp-018h], ax                    ; 89 46 e8
+    mov ax, word [es:di+016h]                 ; 26 8b 45 16
+    mov word [bp-01ch], ax                    ; 89 46 e4
     mov ax, word [es:di+012h]                 ; 26 8b 45 12
-    mov word [bp-010h], ax                    ; 89 46 f0
-    mov ax, word [es:di+00eh]                 ; 26 8b 45 0e
-    mov word [bp-016h], ax                    ; 89 46 ea
-    mov ax, word [es:di+010h]                 ; 26 8b 45 10
-    mov word [bp-014h], ax                    ; 89 46 ec
-    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov word [bp-026h], ax                    ; 89 46 da
+    mov ax, word [es:di+014h]                 ; 26 8b 45 14
+    mov word [bp-022h], ax                    ; 89 46 de
+    mov ax, word [bp-01ch]                    ; 8b 46 e4
+    test ax, ax                               ; 85 c0
+    jne near 02922h                           ; 0f 85 c7 00
+    xor dx, dx                                ; 31 d2
+    xor bx, bx                                ; 31 db
+    mov si, word [bp-01eh]                    ; 8b 76 e2
+    add si, word [bp-01ah]                    ; 03 76 e6
+    adc dx, word [bp-016h]                    ; 13 56 ea
+    adc bx, word [bp-014h]                    ; 13 5e ec
+    adc ax, word [bp-010h]                    ; 13 46 f0
     test ax, ax                               ; 85 c0
-    jne short 026ceh                          ; 75 67
+    jnbe short 02882h                         ; 77 10
+    jne short 028e5h                          ; 75 71
+    test bx, bx                               ; 85 db
+    jnbe short 02882h                         ; 77 0a
+    jne short 028e5h                          ; 75 6b
+    cmp dx, 01000h                            ; 81 fa 00 10
+    jnbe short 02882h                         ; 77 02
+    jne short 028e5h                          ; 75 63
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov cx, word [bp-016h]                    ; 8b 4e ea
     mov dx, word [bp-01eh]                    ; 8b 56 e2
-    add dx, word [bp-00eh]                    ; 03 56 f2
-    adc ax, word [bp-01ch]                    ; 13 46 e4
-    cmp ax, 01000h                            ; 3d 00 10
-    jnbe short 02677h                         ; 77 02
-    jne short 026a2h                          ; 75 2b
-    mov ax, word [bp-01ch]                    ; 8b 46 e4
-    xor al, al                                ; 30 c0
-    shr ax, 008h                              ; c1 e8 08
-    mov word [bp-010h], ax                    ; 89 46 f0
-    mov ax, word [bp-00eh]                    ; 8b 46 f2
+    mov si, strict word 00018h                ; be 18 00
+    call 09d4ah                               ; e8 b6 74
+    xor dh, dh                                ; 30 f6
+    mov word [bp-01ch], dx                    ; 89 56 e4
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov cx, word [bp-016h]                    ; 8b 4e ea
+    mov dx, word [bp-01eh]                    ; 8b 56 e2
+    mov si, strict word 00020h                ; be 20 00
+    call 09d4ah                               ; e8 9f 74
+    mov bx, dx                                ; 89 d3
+    mov ax, word [bp-01ah]                    ; 8b 46 e6
     xor al, al                                ; 30 c0
     shr ax, 008h                              ; c1 e8 08
-    lea dx, [bx+002h]                         ; 8d 57 02
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    inc dx                                    ; 42
+    inc dx                                    ; 42
     out DX, AL                                ; ee
-    lea dx, [bx+003h]                         ; 8d 57 03
-    mov al, byte [bp-010h]                    ; 8a 46 f0
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00003h                ; 83 c2 03
+    mov al, byte [bp-01ch]                    ; 8a 46 e4
     out DX, AL                                ; ee
-    lea dx, [bx+004h]                         ; 8d 57 04
-    xor al, al                                ; 30 c0
+    mov ax, bx                                ; 89 d8
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00004h                ; 83 c2 04
     out DX, AL                                ; ee
-    lea dx, [bx+005h]                         ; 8d 57 05
+    shr ax, 008h                              ; c1 e8 08
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00005h                ; 83 c2 05
     out DX, AL                                ; ee
-    mov byte [bp-01bh], al                    ; 88 46 e5
-    mov ax, word [bp-01eh]                    ; 8b 46 e2
+    xor al, al                                ; 30 c0
+    mov byte [bp-015h], al                    ; 88 46 eb
     xor ah, ah                                ; 30 e4
+    mov word [bp-014h], ax                    ; 89 46 ec
     mov word [bp-010h], ax                    ; 89 46 f0
-    mov cx, strict word 00008h                ; b9 08 00
-    shr word [bp-01ch], 1                     ; d1 6e e4
-    rcr word [bp-01eh], 1                     ; d1 5e e2
-    loop 026adh                               ; e2 f8
     mov ax, word [bp-01eh]                    ; 8b 46 e2
-    mov word [bp-016h], ax                    ; 89 46 ea
-    mov ax, word [bp-01ch]                    ; 8b 46 e4
-    mov word [bp-01eh], ax                    ; 89 46 e2
-    mov word [bp-01ch], strict word 00000h    ; c7 46 e4 00 00
-    and ax, strict word 0000fh                ; 25 0f 00
+    xor ah, ah                                ; 30 e4
+    mov word [bp-01ch], ax                    ; 89 46 e4
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov cx, word [bp-016h]                    ; 8b 4e ea
+    mov dx, word [bp-01eh]                    ; 8b 56 e2
+    mov si, strict word 00008h                ; be 08 00
+    call 09d4ah                               ; e8 4b 74
+    mov word [bp-010h], ax                    ; 89 46 f0
+    mov word [bp-014h], bx                    ; 89 5e ec
+    mov word [bp-016h], cx                    ; 89 4e ea
+    mov word [bp-01eh], dx                    ; 89 56 e2
+    mov word [bp-026h], dx                    ; 89 56 da
+    mov si, strict word 00010h                ; be 10 00
+    call 09d4ah                               ; e8 36 74
+    mov word [bp-01eh], dx                    ; 89 56 e2
+    mov ax, dx                                ; 89 d0
+    xor ah, dh                                ; 30 f4
+    and AL, strict byte 00fh                  ; 24 0f
     or AL, strict byte 040h                   ; 0c 40
-    mov word [bp-014h], ax                    ; 89 46 ec
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    mov word [bp-022h], ax                    ; 89 46 de
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 00ah                  ; b0 0a
     out DX, AL                                ; ee
-    lea dx, [bx+001h]                         ; 8d 57 01
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    inc dx                                    ; 42
     xor al, al                                ; 30 c0
     out DX, AL                                ; ee
-    lea dx, [bx+002h]                         ; 8d 57 02
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    inc dx                                    ; 42
+    inc dx                                    ; 42
+    mov al, byte [bp-01ah]                    ; 8a 46 e6
     out DX, AL                                ; ee
-    lea dx, [bx+003h]                         ; 8d 57 03
-    mov al, byte [bp-010h]                    ; 8a 46 f0
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00003h                ; 83 c2 03
+    mov al, byte [bp-01ch]                    ; 8a 46 e4
     out DX, AL                                ; ee
-    mov ax, word [bp-016h]                    ; 8b 46 ea
-    lea dx, [bx+004h]                         ; 8d 57 04
+    mov ax, word [bp-026h]                    ; 8b 46 da
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00004h                ; 83 c2 04
     out DX, AL                                ; ee
     shr ax, 008h                              ; c1 e8 08
-    lea dx, [bx+005h]                         ; 8d 57 05
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00005h                ; 83 c2 05
     out DX, AL                                ; ee
     cmp byte [bp-006h], 000h                  ; 80 7e fa 00
-    je short 02704h                           ; 74 05
+    je short 02964h                           ; 74 05
     mov ax, 000b0h                            ; b8 b0 00
-    jmp short 02707h                          ; eb 03
+    jmp short 02967h                          ; eb 03
     mov ax, 000a0h                            ; b8 a0 00
-    movzx dx, byte [bp-014h]                  ; 0f b6 56 ec
+    movzx dx, byte [bp-022h]                  ; 0f b6 56 de
     or ax, dx                                 ; 09 d0
-    lea dx, [bx+006h]                         ; 8d 57 06
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00006h                ; 83 c2 06
     out DX, AL                                ; ee
-    lea dx, [bx+007h]                         ; 8d 57 07
-    mov al, byte [bp-01ah]                    ; 8a 46 e6
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00007h                ; 83 c2 07
+    mov al, byte [bp-024h]                    ; 8a 46 dc
     out DX, AL                                ; ee
-    lea dx, [bx+007h]                         ; 8d 57 07
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov dl, al                                ; 88 c2
     test AL, strict byte 080h                 ; a8 80
-    jne short 02718h                          ; 75 f4
+    jne short 0297eh                          ; 75 f1
     test AL, strict byte 001h                 ; a8 01
-    je short 02737h                           ; 74 0f
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    je short 029a0h                           ; 74 0f
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00002h                ; ba 02 00
-    jmp near 027cfh                           ; e9 98 00
+    jmp near 02a4bh                           ; e9 ab 00
     test dl, 008h                             ; f6 c2 08
-    jne short 0274bh                          ; 75 0f
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    jne short 029b4h                          ; 75 0f
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00003h                ; ba 03 00
-    jmp near 027cfh                           ; e9 84 00
+    jmp near 02a4bh                           ; e9 97 00
     sti                                       ; fb
-    cmp si, 0f800h                            ; 81 fe 00 f8
-    jc short 0275fh                           ; 72 0d
-    sub si, 00800h                            ; 81 ee 00 08
-    mov ax, word [bp-018h]                    ; 8b 46 e8
-    add ax, 00080h                            ; 05 80 00
-    mov word [bp-018h], ax                    ; 89 46 e8
+    mov ax, word [bp-00eh]                    ; 8b 46 f2
+    cmp ax, 0f800h                            ; 3d 00 f8
+    jc short 029cdh                           ; 72 10
+    sub ax, 00800h                            ; 2d 00 08
+    mov dx, word [bp-018h]                    ; 8b 56 e8
+    add dx, 00080h                            ; 81 c2 80 00
+    mov word [bp-00eh], ax                    ; 89 46 f2
+    mov word [bp-018h], dx                    ; 89 56 e8
     cmp byte [bp-008h], 001h                  ; 80 7e f8 01
-    jne short 02773h                          ; 75 0e
-    mov dx, bx                                ; 89 da
-    mov cx, word [bp-012h]                    ; 8b 4e ee
+    jne short 029e5h                          ; 75 12
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    mov cx, word [bp-020h]                    ; 8b 4e e0
+    mov si, word [bp-00eh]                    ; 8b 76 f2
     mov es, [bp-018h]                         ; 8e 46 e8
     db  0f3h, 066h, 026h, 06fh
     ; rep es outsd                              ; f3 66 26 6f
-    jmp short 0277eh                          ; eb 0b
-    mov dx, bx                                ; 89 da
-    mov cx, word [bp-012h]                    ; 8b 4e ee
+    jmp short 029f4h                          ; eb 0f
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    mov cx, word [bp-020h]                    ; 8b 4e e0
+    mov si, word [bp-00eh]                    ; 8b 76 f2
     mov es, [bp-018h]                         ; 8e 46 e8
     db  0f3h, 026h, 06fh
     ; rep es outsw                              ; f3 26 6f
-    mov es, [bp-00ah]                         ; 8e 46 f6
-    inc word [es:di+014h]                     ; 26 ff 45 14
-    dec word [bp-00eh]                        ; ff 4e f2
-    lea dx, [bx+007h]                         ; 8d 57 07
+    mov word [bp-00eh], si                    ; 89 76 f2
+    mov es, [bp-00ch]                         ; 8e 46 f4
+    inc word [es:di+018h]                     ; 26 ff 45 18
+    dec word [bp-01ah]                        ; ff 4e e6
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov dl, al                                ; 88 c2
     test AL, strict byte 080h                 ; a8 80
-    jne short 02788h                          ; 75 f4
-    cmp word [bp-00eh], strict byte 00000h    ; 83 7e f2 00
-    jne short 027aeh                          ; 75 14
+    jne short 02a01h                          ; 75 f1
+    cmp word [bp-01ah], strict byte 00000h    ; 83 7e e6 00
+    jne short 02a2ah                          ; 75 14
     and AL, strict byte 0e9h                  ; 24 e9
     cmp AL, strict byte 040h                  ; 3c 40
-    je short 027c4h                           ; 74 24
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    je short 02a40h                           ; 74 24
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00006h                ; ba 06 00
-    jmp short 027cfh                          ; eb 21
+    jmp short 02a4bh                          ; eb 21
     mov al, dl                                ; 88 d0
     and AL, strict byte 0c9h                  ; 24 c9
     cmp AL, strict byte 048h                  ; 3c 48
-    je short 0274ch                           ; 74 96
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    je short 029b5h                           ; 74 83
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00007h                ; ba 07 00
-    jmp short 027cfh                          ; eb 0b
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    jmp short 02a4bh                          ; eb 0b
+    mov dx, word [bp-012h]                    ; 8b 56 ee
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
@@ -2970,82 +3186,117 @@ ata_cmd_data_out_:                           ; 0xf25be LB 0x21a
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
- at ata_read_sectors:                           ; 0xf27d8 LB 0x7a
+ at ata_read_sectors:                           ; 0xf2a54 LB 0xb5
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
-    push ax                                   ; 50
+    sub sp, strict byte 00008h                ; 83 ec 08
     mov si, word [bp+004h]                    ; 8b 76 04
     mov es, [bp+006h]                         ; 8e 46 06
-    mov bl, byte [es:si+008h]                 ; 26 8a 5c 08
-    mov cx, word [es:si+00ah]                 ; 26 8b 4c 0a
+    mov al, byte [es:si+00ch]                 ; 26 8a 44 0c
+    mov cx, word [es:si+00eh]                 ; 26 8b 4c 0e
     mov dx, cx                                ; 89 ca
     sal dx, 009h                              ; c1 e2 09
-    mov ax, word [es:si+012h]                 ; 26 8b 44 12
-    test ax, ax                               ; 85 c0
-    je short 02806h                           ; 74 0d
-    movzx di, bl                              ; 0f b6 fb
-    imul di, di, strict byte 00018h           ; 6b ff 18
-    mov [bp-006h], es                         ; 8c 46 fa
-    add di, si                                ; 01 f7
-    jmp short 02832h                          ; eb 2c
+    cmp word [es:si+016h], strict byte 00000h ; 26 83 7c 16 00
+    je short 02a95h                           ; 74 1f
+    xor ah, ah                                ; 30 e4
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov [bp-00ah], es                         ; 8c 46 f6
+    mov di, si                                ; 89 f7
+    add di, ax                                ; 01 c7
+    mov word [es:di+028h], dx                 ; 26 89 55 28
+    mov bx, 000c4h                            ; bb c4 00
+    mov ax, si                                ; 89 f0
+    mov dx, es                                ; 8c c2
+    call 01e5ah                               ; e8 ca f3
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    jmp short 02afah                          ; eb 65
+    xor bx, bx                                ; 31 db
+    mov word [bp-00ah], bx                    ; 89 5e f6
+    mov word [bp-00ch], bx                    ; 89 5e f4
     mov di, word [es:si]                      ; 26 8b 3c
     add di, cx                                ; 01 cf
+    mov word [bp-008h], di                    ; 89 7e f8
+    mov di, word [es:si+002h]                 ; 26 8b 7c 02
+    adc di, bx                                ; 11 df
     mov word [bp-006h], di                    ; 89 7e fa
-    adc ax, word [es:si+002h]                 ; 26 13 44 02
-    cmp ax, 01000h                            ; 3d 00 10
-    jnbe short 02819h                         ; 77 02
-    jne short 02825h                          ; 75 0c
+    mov bx, word [es:si+004h]                 ; 26 8b 5c 04
+    adc bx, word [bp-00ah]                    ; 13 5e f6
+    mov di, word [es:si+006h]                 ; 26 8b 7c 06
+    adc di, word [bp-00ch]                    ; 13 7e f4
+    test di, di                               ; 85 ff
+    jnbe short 02ad1h                         ; 77 11
+    jne short 02addh                          ; 75 1b
+    test bx, bx                               ; 85 db
+    jnbe short 02ad1h                         ; 77 0b
+    jne short 02addh                          ; 75 15
+    cmp word [bp-006h], 01000h                ; 81 7e fa 00 10
+    jnbe short 02ad1h                         ; 77 02
+    jne short 02addh                          ; 75 0c
     mov bx, strict word 00024h                ; bb 24 00
     mov ax, si                                ; 89 f0
     mov dx, es                                ; 8c c2
-    call 01d4fh                               ; e8 2c f5
-    jmp short 02849h                          ; eb 24
-    movzx ax, bl                              ; 0f b6 c3
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    call 01e5ah                               ; e8 7f f3
+    jmp short 02b00h                          ; eb 23
+    xor ah, ah                                ; 30 e4
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov [bp-006h], es                         ; 8c 46 fa
     mov di, si                                ; 89 f7
     add di, ax                                ; 01 c7
-    mov word [es:di+024h], dx                 ; 26 89 55 24
+    mov word [es:di+028h], dx                 ; 26 89 55 28
     mov bx, 000c4h                            ; bb c4 00
     mov ax, si                                ; 89 f0
     mov dx, es                                ; 8c c2
-    call 01d4fh                               ; e8 0f f5
+    call 01e5ah                               ; e8 63 f3
     mov es, [bp-006h]                         ; 8e 46 fa
-    mov word [es:di+024h], 00200h             ; 26 c7 45 24 00 02
+    mov word [es:di+028h], 00200h             ; 26 c7 45 28 00 02
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00004h                               ; c2 04 00
- at ata_write_sectors:                          ; 0xf2852 LB 0x3d
+ at ata_write_sectors:                          ; 0xf2b09 LB 0x5b
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
+    push di                                   ; 57
+    push ax                                   ; 50
     les si, [bp+004h]                         ; c4 76 04
-    mov cx, word [es:si+00ah]                 ; 26 8b 4c 0a
-    cmp word [es:si+012h], strict byte 00000h ; 26 83 7c 12 00
-    je short 02870h                           ; 74 0c
+    mov cx, word [es:si+00eh]                 ; 26 8b 4c 0e
+    cmp word [es:si+016h], strict byte 00000h ; 26 83 7c 16 00
+    je short 02b29h                           ; 74 0c
     mov bx, strict word 00030h                ; bb 30 00
     mov ax, si                                ; 89 f0
     mov dx, es                                ; 8c c2
-    call 025beh                               ; e8 50 fd
-    jmp short 02887h                          ; eb 17
+    call 02798h                               ; e8 71 fc
+    jmp short 02b5bh                          ; eb 32
     xor ax, ax                                ; 31 c0
-    mov dx, word [es:si]                      ; 26 8b 14
-    add dx, cx                                ; 01 ca
+    xor bx, bx                                ; 31 db
+    xor dx, dx                                ; 31 d2
+    mov di, word [es:si]                      ; 26 8b 3c
+    add di, cx                                ; 01 cf
+    mov word [bp-006h], di                    ; 89 7e fa
     adc ax, word [es:si+002h]                 ; 26 13 44 02
+    adc bx, word [es:si+004h]                 ; 26 13 5c 04
+    adc dx, word [es:si+006h]                 ; 26 13 54 06
+    test dx, dx                               ; 85 d2
+    jnbe short 02b56h                         ; 77 0f
+    jne short 02b1dh                          ; 75 d4
+    test bx, bx                               ; 85 db
+    jnbe short 02b56h                         ; 77 09
+    jne short 02b1dh                          ; 75 ce
     cmp ax, 01000h                            ; 3d 00 10
-    jnbe short 02882h                         ; 77 02
-    jne short 02864h                          ; 75 e2
+    jnbe short 02b56h                         ; 77 02
+    jne short 02b1dh                          ; 75 c7
     mov bx, strict word 00034h                ; bb 34 00
-    jmp short 02867h                          ; eb e0
-    lea sp, [bp-002h]                         ; 8d 66 fe
+    jmp short 02b20h                          ; eb c5
+    lea sp, [bp-004h]                         ; 8d 66 fc
+    pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00004h                               ; c2 04 00
-ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
+ata_cmd_packet_:                             ; 0xf2b64 LB 0x2e8
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -3056,7 +3307,7 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     mov di, bx                                ; 89 df
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 c6 ed
+    call 0166ch                               ; e8 f1 ea
     mov word [bp-012h], 00122h                ; c7 46 ee 22 01
     mov word [bp-00eh], ax                    ; 89 46 f2
     mov ax, word [bp-01ah]                    ; 8b 46 e6
@@ -3065,56 +3316,56 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     and ah, 001h                              ; 80 e4 01
     mov byte [bp-006h], ah                    ; 88 66 fa
     cmp byte [bp+00ah], 002h                  ; 80 7e 0a 02
-    jne short 028e1h                          ; 75 1f
-    mov bx, 00da2h                            ; bb a2 0d
+    jne short 02bb6h                          ; 75 1f
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 64 f0
-    push 00201h                               ; 68 01 02
-    push 00210h                               ; 68 10 02
+    call 01931h                               ; e8 8f ed
+    push 00221h                               ; 68 21 02
+    push 00230h                               ; 68 30 02
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 9a f0
+    call 01972h                               ; e8 c5 ed
     add sp, strict byte 00006h                ; 83 c4 06
     mov dx, strict word 00001h                ; ba 01 00
-    jmp near 02b6ch                           ; e9 8b 02
+    jmp near 02e41h                           ; e9 8b 02
     test byte [bp+004h], 001h                 ; f6 46 04 01
-    jne short 028dbh                          ; 75 f4
+    jne short 02bb0h                          ; 75 f4
     xor ah, ah                                ; 30 e4
     imul ax, ax, strict byte 00006h           ; 6b c0 06
     mov es, [bp-00eh]                         ; 8e 46 f2
     mov si, word [bp-012h]                    ; 8b 76 ee
     add si, ax                                ; 01 c6
-    mov bx, word [es:si+001c2h]               ; 26 8b 9c c2 01
-    mov ax, word [es:si+001c4h]               ; 26 8b 84 c4 01
+    mov bx, word [es:si+00206h]               ; 26 8b 9c 06 02
+    mov ax, word [es:si+00208h]               ; 26 8b 84 08 02
     mov word [bp-010h], ax                    ; 89 46 f0
-    imul si, word [bp-01ah], strict byte 00018h ; 6b 76 e6 18
+    imul si, word [bp-01ah], strict byte 0001ch ; 6b 76 e6 1c
     add si, word [bp-012h]                    ; 03 76 ee
-    mov al, byte [es:si+022h]                 ; 26 8a 44 22
+    mov al, byte [es:si+026h]                 ; 26 8a 44 26
     mov byte [bp-00ah], al                    ; 88 46 f6
     xor ax, ax                                ; 31 c0
     mov word [bp-018h], ax                    ; 89 46 e8
     mov word [bp-016h], ax                    ; 89 46 ea
     mov al, byte [bp-008h]                    ; 8a 46 f8
     cmp AL, strict byte 00ch                  ; 3c 0c
-    jnc short 02924h                          ; 73 06
+    jnc short 02bf9h                          ; 73 06
     mov byte [bp-008h], 00ch                  ; c6 46 f8 0c
-    jmp short 0292ah                          ; eb 06
-    jbe short 0292ah                          ; 76 04
+    jmp short 02bffh                          ; eb 06
+    jbe short 02bffh                          ; 76 04
     mov byte [bp-008h], 010h                  ; c6 46 f8 10
     shr byte [bp-008h], 1                     ; d0 6e f8
     mov es, [bp-00eh]                         ; 8e 46 f2
     mov si, word [bp-012h]                    ; 8b 76 ee
-    db  066h, 026h, 0c7h, 044h, 014h, 000h, 000h, 000h, 000h
-    ; mov dword [es:si+014h], strict dword 000000000h ; 66 26 c7 44 14 00 00 00 00
-    mov word [es:si+018h], strict word 00000h ; 26 c7 44 18 00 00
+    db  066h, 026h, 0c7h, 044h, 018h, 000h, 000h, 000h, 000h
+    ; mov dword [es:si+018h], strict dword 000000000h ; 66 26 c7 44 18 00 00 00 00
+    mov word [es:si+01ch], strict word 00000h ; 26 c7 44 1c 00 00
     lea dx, [bx+007h]                         ; 8d 57 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 080h                 ; a8 80
-    je short 02952h                           ; 74 06
+    je short 02c27h                           ; 74 06
     mov dx, strict word 00002h                ; ba 02 00
-    jmp near 02b6ch                           ; e9 1a 02
+    jmp near 02e41h                           ; e9 1a 02
     mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 00ah                  ; b0 0a
@@ -3126,9 +3377,9 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     mov AL, strict byte 0ffh                  ; b0 ff
     out DX, AL                                ; ee
     cmp byte [bp-006h], 000h                  ; 80 7e fa 00
-    je short 02972h                           ; 74 05
+    je short 02c47h                           ; 74 05
     mov ax, 000b0h                            ; b8 b0 00
-    jmp short 02975h                          ; eb 03
+    jmp short 02c4ah                          ; eb 03
     mov ax, 000a0h                            ; b8 a0 00
     lea dx, [bx+006h]                         ; 8d 57 06
     out DX, AL                                ; ee
@@ -3141,23 +3392,23 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     ; sub ah, ah                                ; 2a e4
     mov dl, al                                ; 88 c2
     test AL, strict byte 080h                 ; a8 80
-    jne short 0297fh                          ; 75 f4
+    jne short 02c54h                          ; 75 f4
     test AL, strict byte 001h                 ; a8 01
-    je short 0299eh                           ; 74 0f
+    je short 02c73h                           ; 74 0f
     mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00003h                ; ba 03 00
-    jmp near 02b6ch                           ; e9 ce 01
+    jmp near 02e41h                           ; e9 ce 01
     test dl, 008h                             ; f6 c2 08
-    jne short 029b2h                          ; 75 0f
+    jne short 02c87h                          ; 75 0f
     mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov dx, strict word 00004h                ; ba 04 00
-    jmp near 02b6ch                           ; e9 ba 01
+    jmp near 02e41h                           ; e9 ba 01
     sti                                       ; fb
     mov ax, di                                ; 89 f8
     shr ax, 004h                              ; c1 e8 04
@@ -3170,38 +3421,38 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     db  0f3h, 026h, 06fh
     ; rep es outsw                              ; f3 26 6f
     cmp byte [bp+00ah], 000h                  ; 80 7e 0a 00
-    jne short 029dbh                          ; 75 0b
+    jne short 02cb0h                          ; 75 0b
     lea dx, [bx+007h]                         ; 8d 57 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov dl, al                                ; 88 c2
-    jmp near 02b4dh                           ; e9 72 01
+    jmp near 02e22h                           ; e9 72 01
     lea dx, [bx+007h]                         ; 8d 57 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov dl, al                                ; 88 c2
     test AL, strict byte 080h                 ; a8 80
-    jne short 029dbh                          ; 75 f4
+    jne short 02cb0h                          ; 75 f4
     test AL, strict byte 088h                 ; a8 88
-    je near 02b4dh                            ; 0f 84 60 01
+    je near 02e22h                            ; 0f 84 60 01
     test AL, strict byte 001h                 ; a8 01
-    je short 029fch                           ; 74 0b
+    je short 02cd1h                           ; 74 0b
     mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
-    jmp short 02998h                          ; eb 9c
+    jmp short 02c6dh                          ; eb 9c
     mov al, dl                                ; 88 d0
     and AL, strict byte 0c9h                  ; 24 c9
     cmp AL, strict byte 048h                  ; 3c 48
-    je short 02a0fh                           ; 74 0b
+    je short 02ce4h                           ; 74 0b
     mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
-    jmp short 029ach                          ; eb 9d
+    jmp short 02c81h                          ; eb 9d
     mov ax, word [bp+00ch]                    ; 8b 46 0c
     shr ax, 004h                              ; c1 e8 04
     mov dx, word [bp+00eh]                    ; 8b 56 0e
@@ -3224,21 +3475,21 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     mov word [bp-014h], cx                    ; 89 4e ec
     mov ax, word [bp+004h]                    ; 8b 46 04
     cmp ax, cx                                ; 39 c8
-    jbe short 02a4fh                          ; 76 0c
+    jbe short 02d24h                          ; 76 0c
     mov ax, cx                                ; 89 c8
     sub word [bp+004h], cx                    ; 29 4e 04
     xor ax, cx                                ; 31 c8
     mov word [bp-014h], ax                    ; 89 46 ec
-    jmp short 02a59h                          ; eb 0a
+    jmp short 02d2eh                          ; eb 0a
     mov cx, ax                                ; 89 c1
     mov word [bp+004h], strict word 00000h    ; c7 46 04 00 00
     sub word [bp-014h], ax                    ; 29 46 ec
     xor ax, ax                                ; 31 c0
     cmp word [bp+008h], strict byte 00000h    ; 83 7e 08 00
-    jne short 02a82h                          ; 75 21
+    jne short 02d57h                          ; 75 21
     mov dx, word [bp-014h]                    ; 8b 56 ec
     cmp dx, word [bp+006h]                    ; 3b 56 06
-    jbe short 02a82h                          ; 76 19
+    jbe short 02d57h                          ; 76 19
     mov ax, word [bp-014h]                    ; 8b 46 ec
     sub ax, word [bp+006h]                    ; 2b 46 06
     mov word [bp-00ch], ax                    ; 89 46 f4
@@ -3247,7 +3498,7 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     xor ax, ax                                ; 31 c0
     mov word [bp+006h], ax                    ; 89 46 06
     mov word [bp+008h], ax                    ; 89 46 08
-    jmp short 02a8eh                          ; eb 0c
+    jmp short 02d63h                          ; eb 0c
     mov word [bp-00ch], ax                    ; 89 46 f4
     mov dx, word [bp-014h]                    ; 8b 56 ec
     sub word [bp+006h], dx                    ; 29 56 06
@@ -3255,39 +3506,39 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     mov si, word [bp-014h]                    ; 8b 76 ec
     mov al, byte [bp-00ah]                    ; 8a 46 f6
     test cl, 003h                             ; f6 c1 03
-    je short 02a9bh                           ; 74 02
+    je short 02d70h                           ; 74 02
     xor al, al                                ; 30 c0
     test byte [bp-014h], 003h                 ; f6 46 ec 03
-    je short 02aa3h                           ; 74 02
+    je short 02d78h                           ; 74 02
     xor al, al                                ; 30 c0
     test byte [bp-00ch], 003h                 ; f6 46 f4 03
-    je short 02aabh                           ; 74 02
+    je short 02d80h                           ; 74 02
     xor al, al                                ; 30 c0
     test byte [bp-014h], 001h                 ; f6 46 ec 01
-    je short 02ac3h                           ; 74 12
+    je short 02d98h                           ; 74 12
     inc word [bp-014h]                        ; ff 46 ec
     cmp word [bp-00ch], strict byte 00000h    ; 83 7e f4 00
-    jbe short 02ac3h                          ; 76 09
+    jbe short 02d98h                          ; 76 09
     test byte [bp-00ch], 001h                 ; f6 46 f4 01
-    je short 02ac3h                           ; 74 03
+    je short 02d98h                           ; 74 03
     dec word [bp-00ch]                        ; ff 4e f4
     cmp AL, strict byte 001h                  ; 3c 01
-    jne short 02ad4h                          ; 75 0d
+    jne short 02da9h                          ; 75 0d
     shr word [bp-014h], 002h                  ; c1 6e ec 02
     shr cx, 002h                              ; c1 e9 02
     shr word [bp-00ch], 002h                  ; c1 6e f4 02
-    jmp short 02adch                          ; eb 08
+    jmp short 02db1h                          ; eb 08
     shr word [bp-014h], 1                     ; d1 6e ec
     shr cx, 1                                 ; d1 e9
     shr word [bp-00ch], 1                     ; d1 6e f4
     cmp AL, strict byte 001h                  ; 3c 01
-    jne short 02b0ch                          ; 75 2c
+    jne short 02de1h                          ; 75 2c
     test cx, cx                               ; 85 c9
-    je short 02aeeh                           ; 74 0a
+    je short 02dc3h                           ; 74 0a
     mov dx, bx                                ; 89 da
     push eax                                  ; 66 50
     in eax, DX                                ; 66 ed
-    loop 02ae8h                               ; e2 fc
+    loop 02dbdh                               ; e2 fc
     pop eax                                   ; 66 58
     mov dx, bx                                ; 89 da
     mov cx, word [bp-014h]                    ; 8b 4e ec
@@ -3296,28 +3547,28 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     ; rep insd                                  ; f3 66 6d
     mov ax, word [bp-00ch]                    ; 8b 46 f4
     test ax, ax                               ; 85 c0
-    je short 02b2bh                           ; 74 2b
+    je short 02e00h                           ; 74 2b
     mov cx, ax                                ; 89 c1
     push eax                                  ; 66 50
     in eax, DX                                ; 66 ed
-    loop 02b04h                               ; e2 fc
+    loop 02dd9h                               ; e2 fc
     pop eax                                   ; 66 58
-    jmp short 02b2bh                          ; eb 1f
+    jmp short 02e00h                          ; eb 1f
     test cx, cx                               ; 85 c9
-    je short 02b15h                           ; 74 05
+    je short 02deah                           ; 74 05
     mov dx, bx                                ; 89 da
     in ax, DX                                 ; ed
-    loop 02b12h                               ; e2 fd
+    loop 02de7h                               ; e2 fd
     mov dx, bx                                ; 89 da
     mov cx, word [bp-014h]                    ; 8b 4e ec
     les di, [bp+00ch]                         ; c4 7e 0c
     rep insw                                  ; f3 6d
     mov ax, word [bp-00ch]                    ; 8b 46 f4
     test ax, ax                               ; 85 c0
-    je short 02b2bh                           ; 74 05
+    je short 02e00h                           ; 74 05
     mov cx, ax                                ; 89 c1
     in ax, DX                                 ; ed
-    loop 02b28h                               ; e2 fd
+    loop 02dfdh                               ; e2 fd
     add word [bp+00ch], si                    ; 01 76 0c
     xor ax, ax                                ; 31 c0
     add word [bp-018h], si                    ; 01 76 e8
@@ -3325,19 +3576,19 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     mov ax, word [bp-018h]                    ; 8b 46 e8
     mov es, [bp-00eh]                         ; 8e 46 f2
     mov si, word [bp-012h]                    ; 8b 76 ee
-    mov word [es:si+016h], ax                 ; 26 89 44 16
+    mov word [es:si+01ah], ax                 ; 26 89 44 1a
     mov ax, word [bp-016h]                    ; 8b 46 ea
-    mov word [es:si+018h], ax                 ; 26 89 44 18
-    jmp near 029dbh                           ; e9 8e fe
+    mov word [es:si+01ch], ax                 ; 26 89 44 1c
+    jmp near 02cb0h                           ; e9 8e fe
     mov al, dl                                ; 88 d0
     and AL, strict byte 0e9h                  ; 24 e9
     cmp AL, strict byte 040h                  ; 3c 40
-    je short 02b61h                           ; 74 0c
+    je short 02e36h                           ; 74 0c
     mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
-    jmp near 029ach                           ; e9 4b fe
+    jmp near 02c81h                           ; e9 4b fe
     mov dx, word [bp-010h]                    ; 8b 56 f0
     add dx, strict byte 00006h                ; 83 c2 06
     mov AL, strict byte 008h                  ; b0 08
@@ -3349,7 +3600,7 @@ ata_cmd_packet_:                             ; 0xf288f LB 0x2e8
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 0000ch                               ; c2 0c 00
-ata_soft_reset_:                             ; 0xf2b77 LB 0x80
+ata_soft_reset_:                             ; 0xf2e4c LB 0x80
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3359,7 +3610,7 @@ ata_soft_reset_:                             ; 0xf2b77 LB 0x80
     mov bx, ax                                ; 89 c3
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 e3 ea
+    call 0166ch                               ; e8 0e e8
     mov dx, bx                                ; 89 da
     shr dx, 1                                 ; d1 ea
     and bl, 001h                              ; 80 e3 01
@@ -3368,15 +3619,15 @@ ata_soft_reset_:                             ; 0xf2b77 LB 0x80
     imul bx, dx, strict byte 00006h           ; 6b da 06
     mov es, ax                                ; 8e c0
     add bx, 00122h                            ; 81 c3 22 01
-    mov cx, word [es:bx+001c2h]               ; 26 8b 8f c2 01
-    mov bx, word [es:bx+001c4h]               ; 26 8b 9f c4 01
+    mov cx, word [es:bx+00206h]               ; 26 8b 8f 06 02
+    mov bx, word [es:bx+00208h]               ; 26 8b 9f 08 02
     lea dx, [bx+006h]                         ; 8d 57 06
     mov AL, strict byte 00ah                  ; b0 0a
     out DX, AL                                ; ee
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    je short 02bb9h                           ; 74 05
+    je short 02e8eh                           ; 74 05
     mov ax, 000b0h                            ; b8 b0 00
-    jmp short 02bbch                          ; eb 03
+    jmp short 02e91h                          ; eb 03
     mov ax, 000a0h                            ; b8 a0 00
     mov dx, cx                                ; 89 ca
     add dx, strict byte 00006h                ; 83 c2 06
@@ -3391,15 +3642,15 @@ ata_soft_reset_:                             ; 0xf2b77 LB 0x80
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 080h                 ; a8 80
-    jne short 02bcah                          ; 75 f4
+    jne short 02e9fh                          ; 75 f4
     and AL, strict byte 0e9h                  ; 24 e9
     cmp AL, strict byte 040h                  ; 3c 40
-    je short 02be7h                           ; 74 0b
+    je short 02ebch                           ; 74 0b
     lea dx, [bx+006h]                         ; 8d 57 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
     mov ax, strict word 00001h                ; b8 01 00
-    jmp short 02befh                          ; eb 08
+    jmp short 02ec4h                          ; eb 08
     lea dx, [bx+006h]                         ; 8d 57 06
     mov AL, strict byte 008h                  ; b0 08
     out DX, AL                                ; ee
@@ -3410,7 +3661,7 @@ ata_soft_reset_:                             ; 0xf2b77 LB 0x80
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-set_diskette_ret_status_:                    ; 0xf2bf7 LB 0x18
+set_diskette_ret_status_:                    ; 0xf2ecc LB 0x18
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3418,54 +3669,54 @@ set_diskette_ret_status_:                    ; 0xf2bf7 LB 0x18
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00041h                ; ba 41 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 56 ea
+    call 0165eh                               ; e8 81 e7
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop dx                                    ; 5a
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-set_diskette_current_cyl_:                   ; 0xf2c0f LB 0x2d
+set_diskette_current_cyl_:                   ; 0xf2ee4 LB 0x2d
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
     mov bl, al                                ; 88 c3
     cmp AL, strict byte 001h                  ; 3c 01
-    jbe short 02c24h                          ; 76 0b
-    push 00230h                               ; 68 30 02
+    jbe short 02ef9h                          ; 76 0b
+    push 00250h                               ; 68 50 02
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 51 ed
+    call 01972h                               ; e8 7c ea
     add sp, strict byte 00004h                ; 83 c4 04
     movzx ax, dl                              ; 0f b6 c2
     movzx dx, bl                              ; 0f b6 d3
     add dx, 00094h                            ; 81 c2 94 00
     mov bx, ax                                ; 89 c3
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 28 ea
+    call 0165eh                               ; e8 53 e7
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_wait_for_interrupt_:                  ; 0xf2c3c LB 0x21
+floppy_wait_for_interrupt_:                  ; 0xf2f11 LB 0x21
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push dx                                   ; 52
     cli                                       ; fa
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 06 ea
+    call 01650h                               ; e8 31 e7
     test AL, strict byte 080h                 ; a8 80
-    je short 02c52h                           ; 74 04
+    je short 02f27h                           ; 74 04
     and AL, strict byte 080h                  ; 24 80
-    jmp short 02c57h                          ; eb 05
+    jmp short 02f2ch                          ; eb 05
     sti                                       ; fb
     hlt                                       ; f4
     cli                                       ; fa
-    jmp short 02c41h                          ; eb ea
+    jmp short 02f16h                          ; eb ea
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop dx                                    ; 5a
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_wait_for_interrupt_or_timeout_:       ; 0xf2c5d LB 0x46
+floppy_wait_for_interrupt_or_timeout_:       ; 0xf2f32 LB 0x46
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3474,28 +3725,28 @@ floppy_wait_for_interrupt_or_timeout_:       ; 0xf2c5d LB 0x46
     cli                                       ; fa
     mov dx, strict word 00040h                ; ba 40 00
     mov ax, dx                                ; 89 d0
-    call 01650h                               ; e8 e4 e9
+    call 01650h                               ; e8 0f e7
     test al, al                               ; 84 c0
-    jne short 02c75h                          ; 75 05
+    jne short 02f4ah                          ; 75 05
     sti                                       ; fb
     xor cl, cl                                ; 30 c9
-    jmp short 02c99h                          ; eb 24
+    jmp short 02f6eh                          ; eb 24
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 d2 e9
+    call 01650h                               ; e8 fd e6
     mov cl, al                                ; 88 c1
     test AL, strict byte 080h                 ; a8 80
-    je short 02c94h                           ; 74 10
+    je short 02f69h                           ; 74 10
     and AL, strict byte 07fh                  ; 24 7f
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 cc e9
-    jmp short 02c99h                          ; eb 05
+    call 0165eh                               ; e8 f7 e6
+    jmp short 02f6eh                          ; eb 05
     sti                                       ; fb
     hlt                                       ; f4
     cli                                       ; fa
-    jmp short 02c64h                          ; eb cb
+    jmp short 02f39h                          ; eb cb
     mov al, cl                                ; 88 c8
     lea sp, [bp-006h]                         ; 8d 66 fa
     pop dx                                    ; 5a
@@ -3503,7 +3754,7 @@ floppy_wait_for_interrupt_or_timeout_:       ; 0xf2c5d LB 0x46
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_reset_controller_:                    ; 0xf2ca3 LB 0x2b
+floppy_reset_controller_:                    ; 0xf2f78 LB 0x2b
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3525,13 +3776,13 @@ floppy_reset_controller_:                    ; 0xf2ca3 LB 0x2b
     ; sub ah, ah                                ; 2a e4
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 080h                  ; 3c 80
-    jne short 02cbbh                          ; 75 f4
+    jne short 02f90h                          ; 75 f4
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop dx                                    ; 5a
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_prepare_controller_:                  ; 0xf2cce LB 0x81
+floppy_prepare_controller_:                  ; 0xf2fa3 LB 0x81
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3541,12 +3792,12 @@ floppy_prepare_controller_:                  ; 0xf2cce LB 0x81
     mov cx, ax                                ; 89 c1
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 70 e9
+    call 01650h                               ; e8 9b e6
     and AL, strict byte 07fh                  ; 24 7f
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 70 e9
+    call 0165eh                               ; e8 9b e6
     mov dx, 003f2h                            ; ba f2 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -3554,9 +3805,9 @@ floppy_prepare_controller_:                  ; 0xf2cce LB 0x81
     and AL, strict byte 004h                  ; 24 04
     mov byte [bp-008h], al                    ; 88 46 f8
     test cx, cx                               ; 85 c9
-    je short 02d01h                           ; 74 04
+    je short 02fd6h                           ; 74 04
     mov AL, strict byte 020h                  ; b0 20
-    jmp short 02d03h                          ; eb 02
+    jmp short 02fd8h                          ; eb 02
     mov AL, strict byte 010h                  ; b0 10
     or AL, strict byte 00ch                   ; 0c 0c
     or al, cl                                 ; 08 c8
@@ -3565,10 +3816,10 @@ floppy_prepare_controller_:                  ; 0xf2cce LB 0x81
     mov bx, strict word 00025h                ; bb 25 00
     mov dx, strict word 00040h                ; ba 40 00
     mov ax, dx                                ; 89 d0
-    call 0165eh                               ; e8 48 e9
+    call 0165eh                               ; e8 73 e6
     mov dx, 0008bh                            ; ba 8b 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 31 e9
+    call 01650h                               ; e8 5c e6
     shr al, 006h                              ; c0 e8 06
     mov dx, 003f7h                            ; ba f7 03
     out DX, AL                                ; ee
@@ -3578,21 +3829,21 @@ floppy_prepare_controller_:                  ; 0xf2cce LB 0x81
     ; sub ah, ah                                ; 2a e4
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 080h                  ; 3c 80
-    jne short 02d26h                          ; 75 f4
+    jne short 02ffbh                          ; 75 f4
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    jne short 02d47h                          ; 75 0f
-    call 02c3ch                               ; e8 01 ff
+    jne short 0301ch                          ; 75 0f
+    call 02f11h                               ; e8 01 ff
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 17 e9
+    call 0165eh                               ; e8 42 e6
     lea sp, [bp-006h]                         ; 8d 66 fa
     pop dx                                    ; 5a
     pop cx                                    ; 59
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_media_known_:                         ; 0xf2d4f LB 0x43
+floppy_media_known_:                         ; 0xf3024 LB 0x43
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3600,32 +3851,32 @@ floppy_media_known_:                         ; 0xf2d4f LB 0x43
     mov bx, ax                                ; 89 c3
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 f1 e8
+    call 01650h                               ; e8 1c e6
     mov ah, al                                ; 88 c4
     test bx, bx                               ; 85 db
-    je short 02d67h                           ; 74 02
+    je short 0303ch                           ; 74 02
     shr al, 1                                 ; d0 e8
     and AL, strict byte 001h                  ; 24 01
-    jne short 02d6fh                          ; 75 04
+    jne short 03044h                          ; 75 04
     xor ah, ah                                ; 30 e4
-    jmp short 02d8bh                          ; eb 1c
+    jmp short 03060h                          ; eb 1c
     mov dx, 00090h                            ; ba 90 00
     test bx, bx                               ; 85 db
-    je short 02d79h                           ; 74 03
+    je short 0304eh                           ; 74 03
     mov dx, 00091h                            ; ba 91 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 d1 e8
+    call 01650h                               ; e8 fc e5
     xor ah, ah                                ; 30 e4
     sar ax, 004h                              ; c1 f8 04
     and AL, strict byte 001h                  ; 24 01
-    je short 02d6bh                           ; 74 e3
+    je short 03040h                           ; 74 e3
     mov ax, strict word 00001h                ; b8 01 00
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop dx                                    ; 5a
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_read_id_:                             ; 0xf2d92 LB 0x40
+floppy_read_id_:                             ; 0xf3067 LB 0x40
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3633,24 +3884,24 @@ floppy_read_id_:                             ; 0xf2d92 LB 0x40
     push si                                   ; 56
     sub sp, strict byte 00008h                ; 83 ec 08
     mov bx, ax                                ; 89 c3
-    call 02cceh                               ; e8 2e ff
+    call 02fa3h                               ; e8 2e ff
     mov AL, strict byte 04ah                  ; b0 4a
     mov dx, 003f5h                            ; ba f5 03
     out DX, AL                                ; ee
     mov al, bl                                ; 88 d8
     out DX, AL                                ; ee
-    call 02c3ch                               ; e8 90 fe
+    call 02f11h                               ; e8 90 fe
     xor si, si                                ; 31 f6
-    jmp short 02db5h                          ; eb 05
+    jmp short 0308ah                          ; eb 05
     cmp si, strict byte 00007h                ; 83 fe 07
-    jnl short 02dc1h                          ; 7d 0c
+    jnl short 03096h                          ; 7d 0c
     mov dx, 003f5h                            ; ba f5 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov byte [bp+si-00eh], al                 ; 88 42 f2
     inc si                                    ; 46
-    jmp short 02db0h                          ; eb ef
+    jmp short 03085h                          ; eb ef
     test byte [bp-00eh], 0c0h                 ; f6 46 f2 c0
     db  00fh, 094h, 0c0h
     ; sete al                                   ; 0f 94 c0
@@ -3661,35 +3912,35 @@ floppy_read_id_:                             ; 0xf2d92 LB 0x40
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_drive_recal_:                         ; 0xf2dd2 LB 0x48
+floppy_drive_recal_:                         ; 0xf30a7 LB 0x48
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
     push cx                                   ; 51
     push dx                                   ; 52
     mov bx, ax                                ; 89 c3
-    call 02cceh                               ; e8 f1 fe
+    call 02fa3h                               ; e8 f1 fe
     mov AL, strict byte 007h                  ; b0 07
     mov dx, 003f5h                            ; ba f5 03
     out DX, AL                                ; ee
     mov al, bl                                ; 88 d8
     out DX, AL                                ; ee
-    call 02c3ch                               ; e8 53 fe
+    call 02f11h                               ; e8 53 fe
     test bx, bx                               ; 85 db
-    je short 02df4h                           ; 74 07
+    je short 030c9h                           ; 74 07
     or AL, strict byte 002h                   ; 0c 02
     mov cx, 00095h                            ; b9 95 00
-    jmp short 02df9h                          ; eb 05
+    jmp short 030ceh                          ; eb 05
     or AL, strict byte 001h                   ; 0c 01
     mov cx, 00094h                            ; b9 94 00
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 59 e8
+    call 0165eh                               ; e8 84 e5
     xor bx, bx                                ; 31 db
     mov dx, cx                                ; 89 ca
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 4f e8
+    call 0165eh                               ; e8 7a e5
     mov ax, strict word 00001h                ; b8 01 00
     lea sp, [bp-006h]                         ; 8d 66 fa
     pop dx                                    ; 5a
@@ -3697,7 +3948,7 @@ floppy_drive_recal_:                         ; 0xf2dd2 LB 0x48
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_media_sense_:                         ; 0xf2e1a LB 0xf0
+floppy_media_sense_:                         ; 0xf30ef LB 0xf0
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -3706,85 +3957,85 @@ floppy_media_sense_:                         ; 0xf2e1a LB 0xf0
     push si                                   ; 56
     push di                                   ; 57
     mov di, ax                                ; 89 c7
-    call 02dd2h                               ; e8 ab ff
+    call 030a7h                               ; e8 ab ff
     test ax, ax                               ; 85 c0
-    jne short 02e30h                          ; 75 05
+    jne short 03105h                          ; 75 05
     xor cx, cx                                ; 31 c9
-    jmp near 02efeh                           ; e9 ce 00
+    jmp near 031d3h                           ; e9 ce 00
     mov ax, strict word 00010h                ; b8 10 00
-    call 016ach                               ; e8 76 e8
+    call 016ach                               ; e8 a1 e5
     test di, di                               ; 85 ff
-    jne short 02e41h                          ; 75 07
+    jne short 03116h                          ; 75 07
     mov cl, al                                ; 88 c1
     shr cl, 004h                              ; c0 e9 04
-    jmp short 02e46h                          ; eb 05
+    jmp short 0311bh                          ; eb 05
     mov cl, al                                ; 88 c1
     and cl, 00fh                              ; 80 e1 0f
     cmp cl, 001h                              ; 80 f9 01
-    jne short 02e54h                          ; 75 09
+    jne short 03129h                          ; 75 09
     xor cl, cl                                ; 30 c9
     mov CH, strict byte 015h                  ; b5 15
     mov si, strict word 00001h                ; be 01 00
-    jmp short 02e92h                          ; eb 3e
+    jmp short 03167h                          ; eb 3e
     cmp cl, 002h                              ; 80 f9 02
-    jne short 02e5fh                          ; 75 06
+    jne short 03134h                          ; 75 06
     xor cl, cl                                ; 30 c9
     mov CH, strict byte 035h                  ; b5 35
-    jmp short 02e4fh                          ; eb f0
+    jmp short 03124h                          ; eb f0
     cmp cl, 003h                              ; 80 f9 03
-    jne short 02e6ah                          ; 75 06
+    jne short 0313fh                          ; 75 06
     xor cl, cl                                ; 30 c9
     mov CH, strict byte 017h                  ; b5 17
-    jmp short 02e4fh                          ; eb e5
+    jmp short 03124h                          ; eb e5
     cmp cl, 004h                              ; 80 f9 04
-    jne short 02e75h                          ; 75 06
+    jne short 0314ah                          ; 75 06
     xor cl, cl                                ; 30 c9
     mov CH, strict byte 017h                  ; b5 17
-    jmp short 02e4fh                          ; eb da
+    jmp short 03124h                          ; eb da
     cmp cl, 005h                              ; 80 f9 05
-    jne short 02e80h                          ; 75 06
+    jne short 03155h                          ; 75 06
     mov CL, strict byte 0cch                  ; b1 cc
     mov CH, strict byte 0d7h                  ; b5 d7
-    jmp short 02e4fh                          ; eb cf
+    jmp short 03124h                          ; eb cf
     cmp cl, 00eh                              ; 80 f9 0e
-    je short 02e8ah                           ; 74 05
+    je short 0315fh                           ; 74 05
     cmp cl, 00fh                              ; 80 f9 0f
-    jne short 02e8ch                          ; 75 02
-    jmp short 02e7ah                          ; eb ee
+    jne short 03161h                          ; 75 02
+    jmp short 0314fh                          ; eb ee
     xor cl, cl                                ; 30 c9
     xor ch, ch                                ; 30 ed
     xor si, si                                ; 31 f6
     movzx bx, cl                              ; 0f b6 d9
     mov dx, 0008bh                            ; ba 8b 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 c0 e7
+    call 0165eh                               ; e8 eb e4
     mov ax, di                                ; 89 f8
-    call 02d92h                               ; e8 ef fe
+    call 03067h                               ; e8 ef fe
     test ax, ax                               ; 85 c0
-    jne short 02ed9h                          ; 75 32
+    jne short 031aeh                          ; 75 32
     mov al, cl                                ; 88 c8
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 080h                  ; 3c 80
-    je short 02ed9h                           ; 74 2a
+    je short 031aeh                           ; 74 2a
     mov al, cl                                ; 88 c8
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 0c0h                  ; 3c c0
-    je short 02ec6h                           ; 74 0f
+    je short 0319bh                           ; 74 0f
     mov ah, cl                                ; 88 cc
     and ah, 03fh                              ; 80 e4 3f
     cmp AL, strict byte 040h                  ; 3c 40
-    je short 02ed2h                           ; 74 12
+    je short 031a7h                           ; 74 12
     test al, al                               ; 84 c0
-    je short 02ecbh                           ; 74 07
-    jmp short 02e92h                          ; eb cc
+    je short 031a0h                           ; 74 07
+    jmp short 03167h                          ; eb cc
     and cl, 03fh                              ; 80 e1 3f
-    jmp short 02e92h                          ; eb c7
+    jmp short 03167h                          ; eb c7
     mov cl, ah                                ; 88 e1
     or cl, 040h                               ; 80 c9 40
-    jmp short 02e92h                          ; eb c0
+    jmp short 03167h                          ; eb c0
     mov cl, ah                                ; 88 e1
     or cl, 080h                               ; 80 c9 80
-    jmp short 02e92h                          ; eb b9
+    jmp short 03167h                          ; eb b9
     test di, di                               ; 85 ff
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
@@ -3793,11 +4044,11 @@ floppy_media_sense_:                         ; 0xf2e1a LB 0xf0
     movzx bx, cl                              ; 0f b6 d9
     mov dx, 0008bh                            ; ba 8b 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 6d e7
+    call 0165eh                               ; e8 98 e4
     movzx bx, ch                              ; 0f b6 dd
     mov dx, di                                ; 89 fa
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 62 e7
+    call 0165eh                               ; e8 8d e4
     mov cx, si                                ; 89 f1
     mov ax, cx                                ; 89 c8
     lea sp, [bp-00ah]                         ; 8d 66 f6
@@ -3808,17 +4059,17 @@ floppy_media_sense_:                         ; 0xf2e1a LB 0xf0
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-floppy_drive_exists_:                        ; 0xf2f0a LB 0x24
+floppy_drive_exists_:                        ; 0xf31df LB 0x24
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push dx                                   ; 52
     mov dx, ax                                ; 89 c2
     mov ax, strict word 00010h                ; b8 10 00
-    call 016ach                               ; e8 96 e7
+    call 016ach                               ; e8 c1 e4
     test dx, dx                               ; 85 d2
-    jne short 02f1fh                          ; 75 05
+    jne short 031f4h                          ; 75 05
     shr al, 004h                              ; c0 e8 04
-    jmp short 02f21h                          ; eb 02
+    jmp short 031f6h                          ; eb 02
     and AL, strict byte 00fh                  ; 24 0f
     test al, al                               ; 84 c0
     db  00fh, 095h, 0c0h
@@ -3828,7 +4079,7 @@ floppy_drive_exists_:                        ; 0xf2f0a LB 0x24
     pop dx                                    ; 5a
     pop bp                                    ; 5d
     retn                                      ; c3
-_int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
+_int13_diskette_function:                    ; 0xf3203 LB 0x8f7
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -3846,74 +4097,74 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     shr dx, 008h                              ; c1 ea 08
     mov word [bp-010h], dx                    ; 89 56 f0
     cmp bl, 008h                              ; 80 fb 08
-    jc short 02f95h                           ; 72 38
+    jc short 0326ah                           ; 72 38
     mov dx, word [bp+01ch]                    ; 8b 56 1c
     or dl, 001h                               ; 80 ca 01
     cmp bl, 008h                              ; 80 fb 08
-    jbe near 034ebh                           ; 0f 86 81 05
+    jbe near 037c0h                           ; 0f 86 81 05
     cmp bl, 016h                              ; 80 fb 16
-    jc short 02f8bh                           ; 72 1c
+    jc short 03260h                           ; 72 1c
     or si, 00100h                             ; 81 ce 00 01
     cmp bl, 016h                              ; 80 fb 16
-    jbe near 0361fh                           ; 0f 86 a5 06
+    jbe near 038f4h                           ; 0f 86 a5 06
     cmp bl, 018h                              ; 80 fb 18
-    je near 036b5h                            ; 0f 84 34 07
+    je near 0398ah                            ; 0f 84 34 07
     cmp bl, 017h                              ; 80 fb 17
-    je near 03643h                            ; 0f 84 bb 06
-    jmp near 03802h                           ; e9 77 08
+    je near 03918h                            ; 0f 84 bb 06
+    jmp near 03ad7h                           ; e9 77 08
     cmp bl, 015h                              ; 80 fb 15
-    je near 035dbh                            ; 0f 84 49 06
-    jmp near 03802h                           ; e9 6d 08
+    je near 038b0h                            ; 0f 84 49 06
+    jmp near 03ad7h                           ; e9 6d 08
     cmp bl, 001h                              ; 80 fb 01
-    jc short 02fafh                           ; 72 15
-    jbe near 03028h                           ; 0f 86 8a 00
+    jc short 03284h                           ; 72 15
+    jbe near 032fdh                           ; 0f 86 8a 00
     cmp bl, 005h                              ; 80 fb 05
-    je near 03365h                            ; 0f 84 c0 03
+    je near 0363ah                            ; 0f 84 c0 03
     cmp bl, 004h                              ; 80 fb 04
-    jbe near 03046h                           ; 0f 86 9a 00
-    jmp near 03802h                           ; e9 53 08
+    jbe near 0331bh                           ; 0f 86 9a 00
+    jmp near 03ad7h                           ; e9 53 08
     test bl, bl                               ; 84 db
-    jne near 03802h                           ; 0f 85 4d 08
+    jne near 03ad7h                           ; 0f 85 4d 08
     mov al, byte [bp+00eh]                    ; 8a 46 0e
     mov byte [bp-008h], al                    ; 88 46 f8
     cmp AL, strict byte 001h                  ; 3c 01
-    jbe short 02fd3h                          ; 76 14
+    jbe short 032a8h                          ; 76 14
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 001h                               ; 80 cc 01
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 00001h                ; b8 01 00
-    call 02bf7h                               ; e8 27 fc
-    jmp near 03341h                           ; e9 6e 03
+    call 02ecch                               ; e8 27 fc
+    jmp near 03616h                           ; e9 6e 03
     mov ax, strict word 00010h                ; b8 10 00
-    call 016ach                               ; e8 d3 e6
+    call 016ach                               ; e8 fe e3
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    jne short 02fe6h                          ; 75 07
+    jne short 032bbh                          ; 75 07
     mov cl, al                                ; 88 c1
     shr cl, 004h                              ; c0 e9 04
-    jmp short 02febh                          ; eb 05
+    jmp short 032c0h                          ; eb 05
     mov cl, al                                ; 88 c1
     and cl, 00fh                              ; 80 e1 0f
     test cl, cl                               ; 84 c9
-    jne short 02fffh                          ; 75 10
+    jne short 032d4h                          ; 75 10
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 080h                               ; 80 cc 80
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, 00080h                            ; b8 80 00
-    jmp short 02fcdh                          ; eb ce
+    jmp short 032a2h                          ; eb ce
     xor bx, bx                                ; 31 db
     mov dx, strict word 0003eh                ; ba 3e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 54 e6
+    call 0165eh                               ; e8 7f e3
     xor al, al                                ; 30 c0
     mov byte [bp+017h], al                    ; 88 46 17
     xor ah, ah                                ; 30 e4
-    call 02bf7h                               ; e8 e3 fb
+    call 02ecch                               ; e8 e3 fb
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     xor dx, dx                                ; 31 d2
-    call 02c0fh                               ; e8 ee fb
+    call 02ee4h                               ; e8 ee fb
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
@@ -3922,14 +4173,14 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     mov dx, 00441h                            ; ba 41 04
     xor ax, ax                                ; 31 c0
-    call 01650h                               ; e8 1c e6
+    call 01650h                               ; e8 47 e3
     movzx dx, al                              ; 0f b6 d0
     sal dx, 008h                              ; c1 e2 08
     or si, dx                                 ; 09 d6
     mov word [bp+016h], si                    ; 89 76 16
     test al, al                               ; 84 c0
-    je short 03021h                           ; 74 de
-    jmp near 03341h                           ; e9 fb 02
+    je short 032f6h                           ; 74 de
+    jmp near 03616h                           ; e9 fb 02
     mov ch, cl                                ; 88 cd
     mov dl, byte [bp-010h]                    ; 8a 56 f0
     mov byte [bp-00ch], dl                    ; 88 56 f4
@@ -3939,49 +4190,49 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov byte [bp-00eh], dl                    ; 88 56 f2
     mov byte [bp-008h], al                    ; 88 46 f8
     cmp AL, strict byte 001h                  ; 3c 01
-    jnbe short 0306fh                         ; 77 0e
+    jnbe short 03344h                         ; 77 0e
     cmp dl, 001h                              ; 80 fa 01
-    jnbe short 0306fh                         ; 77 09
+    jnbe short 03344h                         ; 77 09
     test cl, cl                               ; 84 c9
-    je short 0306fh                           ; 74 05
+    je short 03344h                           ; 74 05
     cmp cl, 048h                              ; 80 f9 48
-    jbe short 03099h                          ; 76 2a
-    mov bx, 00da2h                            ; bb a2 0d
+    jbe short 0336eh                          ; 76 2a
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 b7 e8
-    push 00255h                               ; 68 55 02
-    push 0026dh                               ; 68 6d 02
+    call 01931h                               ; e8 e2 e5
+    push 00275h                               ; 68 75 02
+    push 0028dh                               ; 68 8d 02
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 ed e8
+    call 01972h                               ; e8 18 e6
     add sp, strict byte 00006h                ; 83 c4 06
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 001h                               ; 80 cc 01
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 00001h                ; b8 01 00
-    jmp near 0310fh                           ; e9 76 00
+    jmp near 033e4h                           ; e9 76 00
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02f0ah                               ; e8 6a fe
+    call 031dfh                               ; e8 6a fe
     test ax, ax                               ; 85 c0
-    je near 031a2h                            ; 0f 84 fc 00
+    je near 03477h                            ; 0f 84 fc 00
     movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
     mov ax, dx                                ; 89 d0
-    call 02d4fh                               ; e8 a0 fc
+    call 03024h                               ; e8 a0 fc
     test ax, ax                               ; 85 c0
-    jne short 030cch                          ; 75 19
+    jne short 033a1h                          ; 75 19
     mov ax, dx                                ; 89 d0
-    call 02e1ah                               ; e8 62 fd
+    call 030efh                               ; e8 62 fd
     test ax, ax                               ; 85 c0
-    jne short 030cch                          ; 75 10
+    jne short 033a1h                          ; 75 10
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 00ch                               ; 80 cc 0c
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 0000ch                ; b8 0c 00
-    jmp short 0310fh                          ; eb 43
+    jmp short 033e4h                          ; eb 43
     cmp byte [bp-006h], 002h                  ; 80 7e fa 02
-    jne near 03234h                           ; 0f 85 60 01
+    jne near 03509h                           ; 0f 85 60 01
     mov ax, word [bp+006h]                    ; 8b 46 06
     shr ax, 00ch                              ; c1 e8 0c
     mov cl, al                                ; 88 c1
@@ -3991,7 +4242,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     add bx, dx                                ; 01 d3
     mov word [bp-012h], bx                    ; 89 5e ee
     cmp dx, bx                                ; 39 da
-    jbe short 030f0h                          ; 76 02
+    jbe short 033c5h                          ; 76 02
     db  0feh, 0c1h
     ; inc cl                                    ; fe c1
     movzx bx, ch                              ; 0f b6 dd
@@ -4000,15 +4251,15 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov ax, word [bp-012h]                    ; 8b 46 ee
     add ax, bx                                ; 01 d8
     cmp ax, word [bp-012h]                    ; 3b 46 ee
-    jnc short 03119h                          ; 73 18
+    jnc short 033eeh                          ; 73 18
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 009h                               ; 80 cc 09
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 00009h                ; b8 09 00
-    call 02bf7h                               ; e8 e5 fa
+    call 02ecch                               ; e8 e5 fa
     mov byte [bp+016h], 000h                  ; c6 46 16 00
-    jmp near 03341h                           ; e9 28 02
+    jmp near 03616h                           ; e9 28 02
     mov AL, strict byte 006h                  ; b0 06
     mov dx, strict word 0000ah                ; ba 0a 00
     out DX, AL                                ; ee
@@ -4040,7 +4291,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov dx, strict word 0000ah                ; ba 0a 00
     out DX, AL                                ; ee
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02cceh                               ; e8 70 fb
+    call 02fa3h                               ; e8 70 fb
     mov AL, strict byte 0e6h                  ; b0 e6
     mov dx, 003f5h                            ; ba f5 03
     out DX, AL                                ; ee
@@ -4068,32 +4319,32 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     out DX, AL                                ; ee
     mov AL, strict byte 0ffh                  ; b0 ff
     out DX, AL                                ; ee
-    call 02c5dh                               ; e8 c2 fa
+    call 02f32h                               ; e8 c2 fa
     test al, al                               ; 84 c0
-    jne short 031b3h                          ; 75 14
-    call 02ca3h                               ; e8 01 fb
+    jne short 03488h                          ; 75 14
+    call 02f78h                               ; e8 01 fb
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 080h                               ; 80 cc 80
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, 00080h                            ; b8 80 00
-    jmp near 0310fh                           ; e9 5c ff
+    jmp near 033e4h                           ; e9 5c ff
     mov dx, 003f4h                            ; ba f4 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 0c0h                  ; 3c c0
-    je short 031cdh                           ; 74 0e
-    push 00255h                               ; 68 55 02
-    push 00288h                               ; 68 88 02
+    je short 034a2h                           ; 74 0e
+    push 00275h                               ; 68 75 02
+    push 002a8h                               ; 68 a8 02
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 a8 e7
+    call 01972h                               ; e8 d3 e4
     add sp, strict byte 00006h                ; 83 c4 06
     xor si, si                                ; 31 f6
-    jmp short 031d6h                          ; eb 05
+    jmp short 034abh                          ; eb 05
     cmp si, strict byte 00007h                ; 83 fe 07
-    jnl short 031eeh                          ; 7d 18
+    jnl short 034c3h                          ; 7d 18
     mov dx, 003f5h                            ; ba f5 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -4102,17 +4353,17 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     movzx bx, al                              ; 0f b6 d8
     lea dx, [si+042h]                         ; 8d 54 42
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 73 e4
+    call 0165eh                               ; e8 9e e1
     inc si                                    ; 46
-    jmp short 031d1h                          ; eb e3
+    jmp short 034a6h                          ; eb e3
     test byte [bp-01ah], 0c0h                 ; f6 46 e6 c0
-    je short 03205h                           ; 74 11
+    je short 034dah                           ; 74 11
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 020h                               ; 80 cc 20
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 00020h                ; b8 20 00
-    jmp near 0310fh                           ; e9 0a ff
+    jmp near 033e4h                           ; e9 0a ff
     movzx ax, ch                              ; 0f b6 c5
     sal ax, 009h                              ; c1 e0 09
     cwd                                       ; 99
@@ -4130,11 +4381,11 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     pop DS                                    ; 1f
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02c0fh                               ; e8 e2 f9
+    call 02ee4h                               ; e8 e2 f9
     mov byte [bp+017h], 000h                  ; c6 46 17 00
-    jmp near 036aeh                           ; e9 7a 04
+    jmp near 03983h                           ; e9 7a 04
     cmp byte [bp-006h], 003h                  ; 80 7e fa 03
-    jne near 0334fh                           ; 0f 85 13 01
+    jne near 03624h                           ; 0f 85 13 01
     mov ax, word [bp+006h]                    ; 8b 46 06
     shr ax, 00ch                              ; c1 e8 0c
     mov cl, al                                ; 88 c1
@@ -4144,7 +4395,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     add bx, dx                                ; 01 d3
     mov word [bp-012h], bx                    ; 89 5e ee
     cmp dx, bx                                ; 39 da
-    jbe short 03258h                          ; 76 02
+    jbe short 0352dh                          ; 76 02
     db  0feh, 0c1h
     ; inc cl                                    ; fe c1
     movzx bx, ch                              ; 0f b6 dd
@@ -4153,7 +4404,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov ax, word [bp-012h]                    ; 8b 46 ee
     add ax, bx                                ; 01 d8
     cmp ax, word [bp-012h]                    ; 3b 46 ee
-    jc near 03101h                            ; 0f 82 96 fe
+    jc near 033d6h                            ; 0f 82 96 fe
     mov AL, strict byte 006h                  ; b0 06
     mov dx, strict word 0000ah                ; ba 0a 00
     out DX, AL                                ; ee
@@ -4185,7 +4436,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov dx, strict word 0000ah                ; ba 0a 00
     out DX, AL                                ; ee
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02cceh                               ; e8 1e fa
+    call 02fa3h                               ; e8 1e fa
     mov AL, strict byte 0c5h                  ; b0 c5
     mov dx, 003f5h                            ; ba f5 03
     out DX, AL                                ; ee
@@ -4213,25 +4464,25 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     out DX, AL                                ; ee
     mov AL, strict byte 0ffh                  ; b0 ff
     out DX, AL                                ; ee
-    call 02c5dh                               ; e8 70 f9
+    call 02f32h                               ; e8 70 f9
     test al, al                               ; 84 c0
-    je near 0319fh                            ; 0f 84 ac fe
+    je near 03474h                            ; 0f 84 ac fe
     mov dx, 003f4h                            ; ba f4 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 0c0h                  ; 3c c0
-    je short 0330dh                           ; 74 0e
-    push 00255h                               ; 68 55 02
-    push 00288h                               ; 68 88 02
+    je short 035e2h                           ; 74 0e
+    push 00275h                               ; 68 75 02
+    push 002a8h                               ; 68 a8 02
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 68 e6
+    call 01972h                               ; e8 93 e3
     add sp, strict byte 00006h                ; 83 c4 06
     xor si, si                                ; 31 f6
-    jmp short 03316h                          ; eb 05
+    jmp short 035ebh                          ; eb 05
     cmp si, strict byte 00007h                ; 83 fe 07
-    jnl short 0332eh                          ; 7d 18
+    jnl short 03603h                          ; 7d 18
     mov dx, 003f5h                            ; ba f5 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -4240,24 +4491,24 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     movzx bx, al                              ; 0f b6 d8
     lea dx, [si+042h]                         ; 8d 54 42
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 33 e3
+    call 0165eh                               ; e8 5e e0
     inc si                                    ; 46
-    jmp short 03311h                          ; eb e3
+    jmp short 035e6h                          ; eb e3
     test byte [bp-01ah], 0c0h                 ; f6 46 e6 c0
-    je near 03222h                            ; 0f 84 ec fe
+    je near 034f7h                            ; 0f 84 ec fe
     test byte [bp-019h], 002h                 ; f6 46 e7 02
-    je short 03348h                           ; 74 0c
+    je short 0361dh                           ; 74 0c
     mov word [bp+016h], 00300h                ; c7 46 16 00 03
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
-    jmp near 03021h                           ; e9 d9 fc
+    jmp near 032f6h                           ; e9 d9 fc
     mov word [bp+016h], 00100h                ; c7 46 16 00 01
-    jmp short 03341h                          ; eb f2
+    jmp short 03616h                          ; eb f2
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02c0fh                               ; e8 b5 f8
+    call 02ee4h                               ; e8 b5 f8
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     mov byte [bp+017h], 000h                  ; c6 46 17 00
-    jmp near 03021h                           ; e9 bc fc
+    jmp near 032f6h                           ; e9 bc fc
     mov ch, byte [bp+016h]                    ; 8a 6e 16
     mov ax, word [bp+014h]                    ; 8b 46 14
     shr ax, 008h                              ; c1 e8 08
@@ -4268,35 +4519,35 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov bl, byte [bp+00eh]                    ; 8a 5e 0e
     mov byte [bp-008h], bl                    ; 88 5e f8
     cmp bl, 001h                              ; 80 fb 01
-    jnbe short 03397h                         ; 77 12
+    jnbe short 0366ch                         ; 77 12
     cmp dl, 001h                              ; 80 fa 01
-    jnbe short 03397h                         ; 77 0d
+    jnbe short 0366ch                         ; 77 0d
     cmp AL, strict byte 04fh                  ; 3c 4f
-    jnbe short 03397h                         ; 77 09
+    jnbe short 0366ch                         ; 77 09
     test ch, ch                               ; 84 ed
-    je short 03397h                           ; 74 05
+    je short 0366ch                           ; 74 05
     cmp ch, 012h                              ; 80 fd 12
-    jbe short 033ach                          ; 76 15
+    jbe short 03681h                          ; 76 15
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 001h                               ; 80 cc 01
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 00001h                ; b8 01 00
-    call 02bf7h                               ; e8 4f f8
+    call 02ecch                               ; e8 4f f8
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02f0ah                               ; e8 57 fb
+    call 031dfh                               ; e8 57 fb
     test ax, ax                               ; 85 c0
-    je near 02fefh                            ; 0f 84 36 fc
+    je near 032c4h                            ; 0f 84 36 fc
     movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
     mov ax, dx                                ; 89 d0
-    call 02d4fh                               ; e8 8d f9
+    call 03024h                               ; e8 8d f9
     test ax, ax                               ; 85 c0
-    jne short 033d1h                          ; 75 0b
+    jne short 036a6h                          ; 75 0b
     mov ax, dx                                ; 89 d0
-    call 02e1ah                               ; e8 4f fa
+    call 030efh                               ; e8 4f fa
     test ax, ax                               ; 85 c0
-    je near 030bch                            ; 0f 84 eb fc
+    je near 03391h                            ; 0f 84 eb fc
     mov ax, word [bp+006h]                    ; 8b 46 06
     shr ax, 00ch                              ; c1 e8 0c
     mov cl, al                                ; 88 c1
@@ -4306,7 +4557,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     add bx, dx                                ; 01 d3
     mov word [bp-012h], bx                    ; 89 5e ee
     cmp dx, bx                                ; 39 da
-    jbe short 033edh                          ; 76 02
+    jbe short 036c2h                          ; 76 02
     db  0feh, 0c1h
     ; inc cl                                    ; fe c1
     movzx bx, ch                              ; 0f b6 dd
@@ -4315,7 +4566,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov ax, word [bp-012h]                    ; 8b 46 ee
     add ax, bx                                ; 01 d8
     cmp ax, word [bp-012h]                    ; 3b 46 ee
-    jc near 03101h                            ; 0f 82 01 fd
+    jc near 033d6h                            ; 0f 82 01 fd
     mov AL, strict byte 006h                  ; b0 06
     mov dx, strict word 0000ah                ; ba 0a 00
     out DX, AL                                ; ee
@@ -4347,7 +4598,7 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov dx, strict word 0000ah                ; ba 0a 00
     out DX, AL                                ; ee
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02cceh                               ; e8 89 f8
+    call 02fa3h                               ; e8 89 f8
     mov AL, strict byte 00fh                  ; b0 0f
     mov dx, 003f5h                            ; ba f5 03
     out DX, AL                                ; ee
@@ -4371,27 +4622,27 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     out DX, AL                                ; ee
     mov AL, strict byte 0f6h                  ; b0 f6
     out DX, AL                                ; ee
-    call 02c5dh                               ; e8 e9 f7
+    call 02f32h                               ; e8 e9 f7
     test al, al                               ; 84 c0
-    jne short 0347eh                          ; 75 06
-    call 02ca3h                               ; e8 28 f8
-    jmp near 02fefh                           ; e9 71 fb
+    jne short 03753h                          ; 75 06
+    call 02f78h                               ; e8 28 f8
+    jmp near 032c4h                           ; e9 71 fb
     mov dx, 003f4h                            ; ba f4 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 0c0h                  ; 3c c0
-    je short 03498h                           ; 74 0e
-    push 00255h                               ; 68 55 02
-    push 00288h                               ; 68 88 02
+    je short 0376dh                           ; 74 0e
+    push 00275h                               ; 68 75 02
+    push 002a8h                               ; 68 a8 02
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 dd e4
+    call 01972h                               ; e8 08 e2
     add sp, strict byte 00006h                ; 83 c4 06
     xor si, si                                ; 31 f6
-    jmp short 034a1h                          ; eb 05
+    jmp short 03776h                          ; eb 05
     cmp si, strict byte 00007h                ; 83 fe 07
-    jnl short 034b9h                          ; 7d 18
+    jnl short 0378eh                          ; 7d 18
     mov dx, 003f5h                            ; ba f5 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -4400,29 +4651,29 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     movzx bx, al                              ; 0f b6 d8
     lea dx, [si+042h]                         ; 8d 54 42
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 a8 e1
+    call 0165eh                               ; e8 d3 de
     inc si                                    ; 46
-    jmp short 0349ch                          ; eb e3
+    jmp short 03771h                          ; eb e3
     test byte [bp-01ah], 0c0h                 ; f6 46 e6 c0
-    je short 034d5h                           ; 74 16
+    je short 037aah                           ; 74 16
     test byte [bp-019h], 002h                 ; f6 46 e7 02
-    jne near 0333ch                           ; 0f 85 75 fe
-    push 00255h                               ; 68 55 02
-    push 0029ch                               ; 68 9c 02
+    jne near 03611h                           ; 0f 85 75 fe
+    push 00275h                               ; 68 75 02
+    push 002bch                               ; 68 bc 02
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 a0 e4
+    call 01972h                               ; e8 cb e1
     add sp, strict byte 00006h                ; 83 c4 06
     xor al, al                                ; 30 c0
     mov byte [bp+017h], al                    ; 88 46 17
     xor ah, ah                                ; 30 e4
-    call 02bf7h                               ; e8 18 f7
+    call 02ecch                               ; e8 18 f7
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     xor dx, dx                                ; 31 d2
-    call 02c0fh                               ; e8 27 f7
-    jmp near 036aeh                           ; e9 c3 01
+    call 02ee4h                               ; e8 27 f7
+    jmp near 03983h                           ; e9 c3 01
     mov byte [bp-008h], al                    ; 88 46 f8
     cmp AL, strict byte 001h                  ; 3c 01
-    jbe short 0350fh                          ; 76 1d
+    jbe short 037e4h                          ; 76 1d
     xor ax, ax                                ; 31 c0
     mov word [bp+016h], ax                    ; 89 46 16
     mov word [bp+010h], ax                    ; 89 46 10
@@ -4432,22 +4683,22 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     mov word [bp+008h], ax                    ; 89 46 08
     movzx ax, ch                              ; 0f b6 c5
     mov word [bp+012h], ax                    ; 89 46 12
-    jmp near 0362ch                           ; e9 1d 01
+    jmp near 03901h                           ; e9 1d 01
     mov ax, strict word 00010h                ; b8 10 00
-    call 016ach                               ; e8 97 e1
+    call 016ach                               ; e8 c2 de
     mov cl, al                                ; 88 c1
     xor ch, ch                                ; 30 ed
     test AL, strict byte 0f0h                 ; a8 f0
-    je short 0351fh                           ; 74 02
+    je short 037f4h                           ; 74 02
     mov CH, strict byte 001h                  ; b5 01
     test cl, 00fh                             ; f6 c1 0f
-    je short 03526h                           ; 74 02
+    je short 037fbh                           ; 74 02
     db  0feh, 0c5h
     ; inc ch                                    ; fe c5
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    jne short 03531h                          ; 75 05
+    jne short 03806h                          ; 75 05
     shr cl, 004h                              ; c0 e9 04
-    jmp short 03534h                          ; eb 03
+    jmp short 03809h                          ; eb 03
     and cl, 00fh                              ; 80 e1 0f
     mov byte [bp+011h], 000h                  ; c6 46 11 00
     movzx ax, cl                              ; 0f b6 c1
@@ -4462,96 +4713,96 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     or ah, 001h                               ; 80 cc 01
     mov word [bp+012h], ax                    ; 89 46 12
     cmp cl, 003h                              ; 80 f9 03
-    jc short 03572h                           ; 72 15
-    jbe short 03599h                          ; 76 3a
+    jc short 03847h                           ; 72 15
+    jbe short 0386eh                          ; 76 3a
     cmp cl, 005h                              ; 80 f9 05
-    jc short 035a0h                           ; 72 3c
-    jbe short 035a7h                          ; 76 41
+    jc short 03875h                           ; 72 3c
+    jbe short 0387ch                          ; 76 41
     cmp cl, 00fh                              ; 80 f9 0f
-    je short 035b5h                           ; 74 4a
+    je short 0388ah                           ; 74 4a
     cmp cl, 00eh                              ; 80 f9 0e
-    je short 035aeh                           ; 74 3e
-    jmp short 035bch                          ; eb 4a
+    je short 03883h                           ; 74 3e
+    jmp short 03891h                          ; eb 4a
     cmp cl, 002h                              ; 80 f9 02
-    je short 03592h                           ; 74 1b
+    je short 03867h                           ; 74 1b
     cmp cl, 001h                              ; 80 f9 01
-    je short 0358bh                           ; 74 0f
+    je short 03860h                           ; 74 0f
     test cl, cl                               ; 84 c9
-    jne short 035bch                          ; 75 3c
+    jne short 03891h                          ; 75 3c
     mov word [bp+014h], strict word 00000h    ; c7 46 14 00 00
     mov byte [bp+013h], 000h                  ; c6 46 13 00
-    jmp short 035cah                          ; eb 3f
+    jmp short 0389fh                          ; eb 3f
     mov word [bp+014h], 02709h                ; c7 46 14 09 27
-    jmp short 035cah                          ; eb 38
+    jmp short 0389fh                          ; eb 38
     mov word [bp+014h], 04f0fh                ; c7 46 14 0f 4f
-    jmp short 035cah                          ; eb 31
+    jmp short 0389fh                          ; eb 31
     mov word [bp+014h], 04f09h                ; c7 46 14 09 4f
-    jmp short 035cah                          ; eb 2a
+    jmp short 0389fh                          ; eb 2a
     mov word [bp+014h], 04f12h                ; c7 46 14 12 4f
-    jmp short 035cah                          ; eb 23
+    jmp short 0389fh                          ; eb 23
     mov word [bp+014h], 04f24h                ; c7 46 14 24 4f
-    jmp short 035cah                          ; eb 1c
+    jmp short 0389fh                          ; eb 1c
     mov word [bp+014h], 0fe3fh                ; c7 46 14 3f fe
-    jmp short 035cah                          ; eb 15
+    jmp short 0389fh                          ; eb 15
     mov word [bp+014h], 0feffh                ; c7 46 14 ff fe
-    jmp short 035cah                          ; eb 0e
-    push 00255h                               ; 68 55 02
-    push 002adh                               ; 68 ad 02
+    jmp short 0389fh                          ; eb 0e
+    push 00275h                               ; 68 75 02
+    push 002cdh                               ; 68 cd 02
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 ab e3
+    call 01972h                               ; e8 d6 e0
     add sp, strict byte 00006h                ; 83 c4 06
     mov word [bp+006h], 0f000h                ; c7 46 06 00 f0
     movzx ax, cl                              ; 0f b6 c1
-    call 03825h                               ; e8 50 02
+    call 03afah                               ; e8 50 02
     mov word [bp+008h], ax                    ; 89 46 08
-    jmp near 036aeh                           ; e9 d3 00
+    jmp near 03983h                           ; e9 d3 00
     mov byte [bp-008h], al                    ; 88 46 f8
     cmp AL, strict byte 001h                  ; 3c 01
-    jbe short 035e7h                          ; 76 05
+    jbe short 038bch                          ; 76 05
     mov word [bp+016h], si                    ; 89 76 16
-    jmp short 0362ch                          ; eb 45
+    jmp short 03901h                          ; eb 45
     mov ax, strict word 00010h                ; b8 10 00
-    call 016ach                               ; e8 bf e0
+    call 016ach                               ; e8 ea dd
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    jne short 035fah                          ; 75 07
+    jne short 038cfh                          ; 75 07
     mov cl, al                                ; 88 c1
     shr cl, 004h                              ; c0 e9 04
-    jmp short 035ffh                          ; eb 05
+    jmp short 038d4h                          ; eb 05
     mov cl, al                                ; 88 c1
     and cl, 00fh                              ; 80 e1 0f
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     mov dx, word [bp+016h]                    ; 8b 56 16
     xor dh, dh                                ; 30 f6
     test cl, cl                               ; 84 c9
-    je short 03619h                           ; 74 0d
+    je short 038eeh                           ; 74 0d
     cmp cl, 001h                              ; 80 f9 01
-    jbe short 03616h                          ; 76 05
+    jbe short 038ebh                          ; 76 05
     or dh, 002h                               ; 80 ce 02
-    jmp short 03619h                          ; eb 03
+    jmp short 038eeh                          ; eb 03
     or dh, 001h                               ; 80 ce 01
     mov word [bp+016h], dx                    ; 89 56 16
-    jmp near 03021h                           ; e9 02 fa
+    jmp near 032f6h                           ; e9 02 fa
     cmp AL, strict byte 001h                  ; 3c 01
-    jbe short 03632h                          ; 76 0f
+    jbe short 03907h                          ; 76 0f
     mov word [bp+016h], si                    ; 89 76 16
     mov ax, strict word 00001h                ; b8 01 00
-    call 02bf7h                               ; e8 cb f5
+    call 02ecch                               ; e8 cb f5
     mov word [bp+01ch], dx                    ; 89 56 1c
-    jmp near 03021h                           ; e9 ef f9
+    jmp near 032f6h                           ; e9 ef f9
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 006h                               ; 80 cc 06
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 00006h                ; b8 06 00
-    jmp near 02fcdh                           ; e9 8a f9
+    jmp near 032a2h                           ; e9 8a f9
     mov byte [bp-008h], al                    ; 88 46 f8
     mov bl, cl                                ; 88 cb
     cmp AL, strict byte 001h                  ; 3c 01
-    jnbe short 03623h                         ; 77 d7
+    jnbe short 038f8h                         ; 77 d7
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02f0ah                               ; e8 b7 f8
+    call 031dfh                               ; e8 b7 f8
     test ax, ax                               ; 85 c0
-    je near 02fefh                            ; 0f 84 96 f9
+    je near 032c4h                            ; 0f 84 96 f9
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
@@ -4559,34 +4810,34 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     add dx, 00090h                            ; 81 c2 90 00
     mov word [bp-012h], dx                    ; 89 56 ee
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 e0 df
+    call 01650h                               ; e8 0b dd
     and AL, strict byte 00fh                  ; 24 0f
     cmp bl, 002h                              ; 80 fb 02
-    jc short 03686h                           ; 72 0f
-    jbe short 03692h                          ; 76 19
+    jc short 0395bh                           ; 72 0f
+    jbe short 03967h                          ; 76 19
     cmp bl, 004h                              ; 80 fb 04
-    je short 0368eh                           ; 74 10
+    je short 03963h                           ; 74 10
     cmp bl, 003h                              ; 80 fb 03
-    je short 03696h                           ; 74 13
-    jmp near 02fbfh                           ; e9 39 f9
+    je short 0396bh                           ; 74 13
+    jmp near 03294h                           ; e9 39 f9
     cmp bl, 001h                              ; 80 fb 01
-    je short 0368eh                           ; 74 03
-    jmp near 02fbfh                           ; e9 31 f9
+    je short 03963h                           ; 74 03
+    jmp near 03294h                           ; e9 31 f9
     or AL, strict byte 090h                   ; 0c 90
-    jmp short 03698h                          ; eb 06
+    jmp short 0396dh                          ; eb 06
     or AL, strict byte 070h                   ; 0c 70
-    jmp short 03698h                          ; eb 02
+    jmp short 0396dh                          ; eb 02
     or AL, strict byte 010h                   ; 0c 10
     movzx bx, al                              ; 0f b6 d8
     mov dx, word [bp-012h]                    ; 8b 56 ee
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 ba df
+    call 0165eh                               ; e8 e5 dc
     xor al, al                                ; 30 c0
     mov byte [bp+017h], al                    ; 88 46 17
     xor ah, ah                                ; 30 e4
-    call 02bf7h                               ; e8 49 f5
+    call 02ecch                               ; e8 49 f5
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
-    jmp near 03021h                           ; e9 6c f9
+    jmp near 032f6h                           ; e9 6c f9
     mov byte [bp-008h], al                    ; 88 46 f8
     mov ch, ah                                ; 88 e5
     and ch, 03fh                              ; 80 e5 3f
@@ -4596,33 +4847,33 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     add bx, word [bp-010h]                    ; 03 5e f0
     mov byte [bp-00ch], bl                    ; 88 5e f4
     cmp AL, strict byte 001h                  ; 3c 01
-    jnbe near 03623h                          ; 0f 87 51 ff
+    jnbe near 038f8h                          ; 0f 87 51 ff
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 02f0ah                               ; e8 31 f8
+    call 031dfh                               ; e8 31 f8
     test ax, ax                               ; 85 c0
-    je near 02fefh                            ; 0f 84 10 f9
+    je near 032c4h                            ; 0f 84 10 f9
     movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
     mov ax, dx                                ; 89 d0
-    call 02d4fh                               ; e8 67 f6
+    call 03024h                               ; e8 67 f6
     test ax, ax                               ; 85 c0
-    jne short 03706h                          ; 75 1a
+    jne short 039dbh                          ; 75 1a
     mov ax, dx                                ; 89 d0
-    call 02e1ah                               ; e8 29 f7
+    call 030efh                               ; e8 29 f7
     test ax, ax                               ; 85 c0
-    jne short 03706h                          ; 75 11
+    jne short 039dbh                          ; 75 11
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 00ch                               ; 80 cc 0c
     mov word [bp+016h], ax                    ; 89 46 16
     mov ax, strict word 0000ch                ; b8 0c 00
-    jmp near 02fcdh                           ; e9 c7 f8
+    jmp near 032a2h                           ; e9 c7 f8
     mov ax, strict word 00010h                ; b8 10 00
-    call 016ach                               ; e8 a0 df
+    call 016ach                               ; e8 cb dc
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    jne short 03719h                          ; 75 07
+    jne short 039eeh                          ; 75 07
     mov cl, al                                ; 88 c1
     shr cl, 004h                              ; c0 e9 04
-    jmp short 0371eh                          ; eb 05
+    jmp short 039f3h                          ; eb 05
     mov cl, al                                ; 88 c1
     and cl, 00fh                              ; 80 e1 0f
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
@@ -4632,287 +4883,287 @@ _int13_diskette_function:                    ; 0xf2f2e LB 0x8f7
     add dx, 00090h                            ; 81 c2 90 00
     mov word [bp-012h], dx                    ; 89 56 ee
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 1b df
+    call 01650h                               ; e8 46 dc
     and AL, strict byte 00fh                  ; 24 0f
     cmp cl, 003h                              ; 80 f9 03
-    jc short 0375ah                           ; 72 1e
+    jc short 03a2fh                           ; 72 1e
     mov dl, al                                ; 88 c2
     or dl, 090h                               ; 80 ca 90
     cmp cl, 003h                              ; 80 f9 03
-    jbe short 03798h                          ; 76 52
+    jbe short 03a6dh                          ; 76 52
     mov ah, al                                ; 88 c4
     or ah, 010h                               ; 80 cc 10
     cmp cl, 005h                              ; 80 f9 05
-    je near 037bdh                            ; 0f 84 6b 00
+    je near 03a92h                            ; 0f 84 6b 00
     cmp cl, 004h                              ; 80 f9 04
-    je short 037a7h                           ; 74 50
-    jmp near 037d8h                           ; e9 7e 00
+    je short 03a7ch                           ; 74 50
+    jmp near 03aadh                           ; e9 7e 00
     cmp cl, 002h                              ; 80 f9 02
-    je short 0377ah                           ; 74 1b
+    je short 03a4fh                           ; 74 1b
     cmp cl, 001h                              ; 80 f9 01
-    jne near 037d8h                           ; 0f 85 72 00
+    jne near 03aadh                           ; 0f 85 72 00
     cmp byte [bp-00ch], 027h                  ; 80 7e f4 27
-    jne near 037d8h                           ; 0f 85 6a 00
+    jne near 03aadh                           ; 0f 85 6a 00
     cmp ch, 009h                              ; 80 fd 09
-    jne near 037d8h                           ; 0f 85 63 00
+    jne near 03aadh                           ; 0f 85 63 00
     or AL, strict byte 090h                   ; 0c 90
-    jmp near 037d8h                           ; e9 5e 00
+    jmp near 03aadh                           ; e9 5e 00
     cmp byte [bp-00ch], 027h                  ; 80 7e f4 27
-    jne short 03789h                          ; 75 09
+    jne short 03a5eh                          ; 75 09
     cmp ch, 009h                              ; 80 fd 09
-    jne short 03789h                          ; 75 04
+    jne short 03a5eh                          ; 75 04
     or AL, strict byte 070h                   ; 0c 70
-    jmp short 037d8h                          ; eb 4f
+    jmp short 03aadh                          ; eb 4f
     cmp byte [bp-00ch], 04fh                  ; 80 7e f4 4f
-    jne short 037d8h                          ; 75 49
+    jne short 03aadh                          ; 75 49
     cmp ch, 00fh                              ; 80 fd 0f
-    jne short 037d8h                          ; 75 44
+    jne short 03aadh                          ; 75 44
     or AL, strict byte 010h                   ; 0c 10
-    jmp short 037d8h                          ; eb 40
+    jmp short 03aadh                          ; eb 40
     cmp byte [bp-00ch], 04fh                  ; 80 7e f4 4f
-    jne short 037d8h                          ; 75 3a
+    jne short 03aadh                          ; 75 3a
     cmp ch, 009h                              ; 80 fd 09
-    jne short 037d8h                          ; 75 35
+    jne short 03aadh                          ; 75 35
     mov al, dl                                ; 88 d0
-    jmp short 037d8h                          ; eb 31
+    jmp short 03aadh                          ; eb 31
     cmp byte [bp-00ch], 04fh                  ; 80 7e f4 4f
-    jne short 037d8h                          ; 75 2b
+    jne short 03aadh                          ; 75 2b
     cmp ch, 009h                              ; 80 fd 09
-    jne short 037b4h                          ; 75 02
-    jmp short 037a3h                          ; eb ef
+    jne short 03a89h                          ; 75 02
+    jmp short 03a78h                          ; eb ef
     cmp ch, 012h                              ; 80 fd 12
-    jne short 037d8h                          ; 75 1f
+    jne short 03aadh                          ; 75 1f
     mov al, ah                                ; 88 e0
-    jmp short 037d8h                          ; eb 1b
+    jmp short 03aadh                          ; eb 1b
     cmp byte [bp-00ch], 04fh                  ; 80 7e f4 4f
-    jne short 037d8h                          ; 75 15
+    jne short 03aadh                          ; 75 15
     cmp ch, 009h                              ; 80 fd 09
-    jne short 037cah                          ; 75 02
-    jmp short 037a3h                          ; eb d9
+    jne short 03a9fh                          ; 75 02
+    jmp short 03a78h                          ; eb d9
     cmp ch, 012h                              ; 80 fd 12
-    jne short 037d1h                          ; 75 02
-    jmp short 037b9h                          ; eb e8
+    jne short 03aa6h                          ; 75 02
+    jmp short 03a8eh                          ; eb e8
     cmp ch, 024h                              ; 80 fd 24
-    jne short 037d8h                          ; 75 02
+    jne short 03aadh                          ; 75 02
     or AL, strict byte 0d0h                   ; 0c d0
     movzx dx, al                              ; 0f b6 d0
     sar dx, 004h                              ; c1 fa 04
     test dl, 001h                             ; f6 c2 01
-    je near 036f5h                            ; 0f 84 10 ff
+    je near 039cah                            ; 0f 84 10 ff
     movzx bx, al                              ; 0f b6 d8
     mov dx, word [bp-012h]                    ; 8b 56 ee
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 6d de
+    call 0165eh                               ; e8 98 db
     mov word [bp+006h], 0f000h                ; c7 46 06 00 f0
     movzx ax, cl                              ; 0f b6 c1
-    call 03825h                               ; e8 29 00
+    call 03afah                               ; e8 29 00
     mov word [bp+008h], ax                    ; 89 46 08
-    jmp near 036a4h                           ; e9 a2 fe
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 03979h                           ; e9 a2 fe
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 24 e1
+    call 01931h                               ; e8 4f de
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 00255h                               ; 68 55 02
-    push 002c2h                               ; 68 c2 02
+    push 00275h                               ; 68 75 02
+    push 002e2h                               ; 68 e2 02
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 53 e1
+    call 01972h                               ; e8 7e de
     add sp, strict byte 00008h                ; 83 c4 08
-    jmp near 02fbfh                           ; e9 9a f7
-get_floppy_dpt_:                             ; 0xf3825 LB 0x2f
+    jmp near 03294h                           ; e9 9a f7
+get_floppy_dpt_:                             ; 0xf3afa LB 0x2f
     push bx                                   ; 53
     push dx                                   ; 52
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     mov dl, al                                ; 88 c2
     xor ax, ax                                ; 31 c0
-    jmp short 03836h                          ; eb 06
+    jmp short 03b0bh                          ; eb 06
     inc ax                                    ; 40
     cmp ax, strict word 00007h                ; 3d 07 00
-    jnc short 0384dh                          ; 73 17
+    jnc short 03b22h                          ; 73 17
     mov bx, ax                                ; 89 c3
     add bx, ax                                ; 01 c3
     cmp dl, byte [word bx+0005bh]             ; 3a 97 5b 00
-    jne short 03830h                          ; 75 f0
+    jne short 03b05h                          ; 75 f0
     movzx ax, byte [word bx+0005ch]           ; 0f b6 87 5c 00
     imul ax, ax, strict byte 0000dh           ; 6b c0 0d
     add ax, strict word 00000h                ; 05 00 00
-    jmp short 03850h                          ; eb 03
+    jmp short 03b25h                          ; eb 03
     mov ax, strict word 00041h                ; b8 41 00
     pop bp                                    ; 5d
     pop dx                                    ; 5a
     pop bx                                    ; 5b
     retn                                      ; c3
-dummy_soft_reset_:                           ; 0xf3854 LB 0x7
+dummy_soft_reset_:                           ; 0xf3b29 LB 0x7
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     xor ax, ax                                ; 31 c0
     pop bp                                    ; 5d
     retn                                      ; c3
-_cdemu_init:                                 ; 0xf385b LB 0x18
+_cdemu_init:                                 ; 0xf3b30 LB 0x18
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 05 de
+    call 0166ch                               ; e8 30 db
     xor bx, bx                                ; 31 db
-    mov dx, 00322h                            ; ba 22 03
-    call 0165eh                               ; e8 ef dd
+    mov dx, 00366h                            ; ba 66 03
+    call 0165eh                               ; e8 1a db
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
-_cdemu_isactive:                             ; 0xf3873 LB 0x16
+_cdemu_isactive:                             ; 0xf3b48 LB 0x16
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 ed dd
-    mov dx, 00322h                            ; ba 22 03
-    call 01650h                               ; e8 cb dd
+    call 0166ch                               ; e8 18 db
+    mov dx, 00366h                            ; ba 66 03
+    call 01650h                               ; e8 f6 da
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
-_cdemu_emulated_drive:                       ; 0xf3889 LB 0x16
+_cdemu_emulated_drive:                       ; 0xf3b5e LB 0x16
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 d7 dd
-    mov dx, 00324h                            ; ba 24 03
-    call 01650h                               ; e8 b5 dd
+    call 0166ch                               ; e8 02 db
+    mov dx, 00368h                            ; ba 68 03
+    call 01650h                               ; e8 e0 da
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
-_int13_eltorito:                             ; 0xf389f LB 0x189
+_int13_eltorito:                             ; 0xf3b74 LB 0x189
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 bf dd
-    mov si, 00322h                            ; be 22 03
+    call 0166ch                               ; e8 ea da
+    mov si, 00366h                            ; be 66 03
     mov di, ax                                ; 89 c7
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     cmp ax, strict word 0004bh                ; 3d 4b 00
-    jc short 038c7h                           ; 72 0a
-    jbe short 038edh                          ; 76 2e
+    jc short 03b9ch                           ; 72 0a
+    jbe short 03bc2h                          ; 76 2e
     cmp ax, strict word 0004dh                ; 3d 4d 00
-    jbe short 038ceh                          ; 76 0a
-    jmp near 039ech                           ; e9 25 01
+    jbe short 03ba3h                          ; 76 0a
+    jmp near 03cc1h                           ; e9 25 01
     cmp ax, strict word 0004ah                ; 3d 4a 00
-    jne near 039ech                           ; 0f 85 1e 01
-    mov bx, 00da2h                            ; bb a2 0d
+    jne near 03cc1h                           ; 0f 85 1e 01
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 58 e0
+    call 01931h                               ; e8 83 dd
     push word [bp+016h]                       ; ff 76 16
-    push 002dch                               ; 68 dc 02
-    push 002ebh                               ; 68 eb 02
+    push 002fch                               ; 68 fc 02
+    push 0030bh                               ; 68 0b 03
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 8b e0
+    call 01972h                               ; e8 b6 dd
     add sp, strict byte 00008h                ; 83 c4 08
-    jmp near 03a07h                           ; e9 1a 01
+    jmp near 03cdch                           ; e9 1a 01
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     mov ax, word [bp+004h]                    ; 8b 46 04
     mov bx, strict word 00013h                ; bb 13 00
-    call 0165eh                               ; e8 65 dd
+    call 0165eh                               ; e8 90 da
     mov es, di                                ; 8e c7
     movzx bx, byte [es:si+001h]               ; 26 0f b6 5c 01
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     inc dx                                    ; 42
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0165eh                               ; e8 54 dd
+    call 0165eh                               ; e8 7f da
     mov es, di                                ; 8e c7
     movzx bx, byte [es:si+002h]               ; 26 0f b6 5c 02
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     inc dx                                    ; 42
     inc dx                                    ; 42
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0165eh                               ; e8 42 dd
+    call 0165eh                               ; e8 6d da
     mov es, di                                ; 8e c7
     movzx bx, byte [es:si+003h]               ; 26 0f b6 5c 03
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 00003h                ; 83 c2 03
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0165eh                               ; e8 2f dd
+    call 0165eh                               ; e8 5a da
     mov es, di                                ; 8e c7
     mov bx, word [es:si+008h]                 ; 26 8b 5c 08
     mov cx, word [es:si+00ah]                 ; 26 8b 4c 0a
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 00004h                ; 83 c2 04
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0169ah                               ; e8 55 dd
+    call 0169ah                               ; e8 80 da
     mov es, di                                ; 8e c7
     mov bx, word [es:si+004h]                 ; 26 8b 5c 04
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 00008h                ; 83 c2 08
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0167ah                               ; e8 23 dd
+    call 0167ah                               ; e8 4e da
     mov es, di                                ; 8e c7
     mov bx, word [es:si+006h]                 ; 26 8b 5c 06
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 0000ah                ; 83 c2 0a
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0167ah                               ; e8 11 dd
+    call 0167ah                               ; e8 3c da
     mov es, di                                ; 8e c7
     mov bx, word [es:si+00ch]                 ; 26 8b 5c 0c
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 0000ch                ; 83 c2 0c
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0167ah                               ; e8 ff dc
+    call 0167ah                               ; e8 2a da
     mov es, di                                ; 8e c7
     mov bx, word [es:si+00eh]                 ; 26 8b 5c 0e
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 0000eh                ; 83 c2 0e
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0167ah                               ; e8 ed dc
+    call 0167ah                               ; e8 18 da
     mov es, di                                ; 8e c7
     movzx bx, byte [es:si+012h]               ; 26 0f b6 5c 12
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 00010h                ; 83 c2 10
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0165eh                               ; e8 be dc
+    call 0165eh                               ; e8 e9 d9
     mov es, di                                ; 8e c7
     movzx bx, byte [es:si+014h]               ; 26 0f b6 5c 14
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 00011h                ; 83 c2 11
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0165eh                               ; e8 ab dc
+    call 0165eh                               ; e8 d6 d9
     mov es, di                                ; 8e c7
     movzx bx, byte [es:si+010h]               ; 26 0f b6 5c 10
     mov dx, word [bp+00ah]                    ; 8b 56 0a
     add dx, strict byte 00012h                ; 83 c2 12
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 0165eh                               ; e8 98 dc
+    call 0165eh                               ; e8 c3 d9
     test byte [bp+016h], 0ffh                 ; f6 46 16 ff
-    jne short 039d2h                          ; 75 06
+    jne short 03ca7h                          ; 75 06
     mov es, di                                ; 8e c7
     mov byte [es:si], 000h                    ; 26 c6 04 00
     mov byte [bp+017h], 000h                  ; c6 46 17 00
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 7d dc
+    call 0165eh                               ; e8 a8 d9
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-    mov bx, 00da2h                            ; bb a2 0d
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 3a df
+    call 01931h                               ; e8 65 dc
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 002dch                               ; 68 dc 02
-    push 00313h                               ; 68 13 03
-    jmp near 038e2h                           ; e9 db fe
+    push 002fch                               ; 68 fc 02
+    push 00333h                               ; 68 33 03
+    jmp near 03bb7h                           ; e9 db fe
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 001h                               ; 80 cc 01
@@ -4922,10 +5173,10 @@ _int13_eltorito:                             ; 0xf389f LB 0x189
     xor bh, bh                                ; 30 ff
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 3c dc
+    call 0165eh                               ; e8 67 d9
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
-    jmp short 039e5h                          ; eb bd
-device_is_cdrom_:                            ; 0xf3a28 LB 0x35
+    jmp short 03cbah                          ; eb bd
+device_is_cdrom_:                            ; 0xf3cfd LB 0x35
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -4933,24 +5184,24 @@ device_is_cdrom_:                            ; 0xf3a28 LB 0x35
     mov bl, al                                ; 88 c3
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 34 dc
+    call 0166ch                               ; e8 5f d9
     cmp bl, 010h                              ; 80 fb 10
-    jc short 03a41h                           ; 72 04
+    jc short 03d16h                           ; 72 04
     xor ax, ax                                ; 31 c0
-    jmp short 03a56h                          ; eb 15
+    jmp short 03d2bh                          ; eb 15
     xor bh, bh                                ; 30 ff
-    imul bx, bx, strict byte 00018h           ; 6b db 18
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
     mov es, ax                                ; 8e c0
     add bx, 00122h                            ; 81 c3 22 01
-    cmp byte [es:bx+01fh], 005h               ; 26 80 7f 1f 05
-    jne short 03a3dh                          ; 75 ea
+    cmp byte [es:bx+023h], 005h               ; 26 80 7f 23 05
+    jne short 03d12h                          ; 75 ea
     mov ax, strict word 00001h                ; b8 01 00
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop dx                                    ; 5a
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-cdrom_boot_:                                 ; 0xf3a5d LB 0x416
+cdrom_boot_:                                 ; 0xf3d32 LB 0x416
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -4961,30 +5212,30 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     sub sp, 0081ch                            ; 81 ec 1c 08
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 fa db
+    call 0166ch                               ; e8 25 d9
     mov word [bp-018h], ax                    ; 89 46 e8
-    mov si, 00322h                            ; be 22 03
+    mov si, 00366h                            ; be 66 03
     mov word [bp-010h], ax                    ; 89 46 f0
     mov word [bp-014h], 00122h                ; c7 46 ec 22 01
     mov word [bp-012h], ax                    ; 89 46 ee
     mov byte [bp-00ch], 000h                  ; c6 46 f4 00
-    jmp short 03a92h                          ; eb 09
+    jmp short 03d67h                          ; eb 09
     inc byte [bp-00ch]                        ; fe 46 f4
     cmp byte [bp-00ch], 010h                  ; 80 7e f4 10
-    jnc short 03a9dh                          ; 73 0b
+    jnc short 03d72h                          ; 73 0b
     movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
-    call 03a28h                               ; e8 8f ff
+    call 03cfdh                               ; e8 8f ff
     test ax, ax                               ; 85 c0
-    je short 03a89h                           ; 74 ec
+    je short 03d5eh                           ; 74 ec
     cmp byte [bp-00ch], 010h                  ; 80 7e f4 10
-    jc short 03aa9h                           ; 72 06
+    jc short 03d7eh                           ; 72 06
     mov ax, strict word 00002h                ; b8 02 00
-    jmp near 03e10h                           ; e9 67 03
+    jmp near 040e5h                           ; e9 67 03
     mov cx, strict word 0000ch                ; b9 0c 00
     xor bx, bx                                ; 31 db
     mov dx, ss                                ; 8c d2
     lea ax, [bp-026h]                         ; 8d 46 da
-    call 097aah                               ; e8 f4 5c
+    call 09d5ah                               ; e8 cf 5f
     mov word [bp-026h], strict word 00028h    ; c7 46 da 28 00
     mov ax, strict word 00011h                ; b8 11 00
     xor dx, dx                                ; 31 d2
@@ -4997,18 +5248,18 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     xchg ah, al                               ; 86 c4
     mov word [bp-01fh], ax                    ; 89 46 e1
     les bx, [bp-014h]                         ; c4 5e ec
-    db  066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 008h
-    ; mov dword [es:bx+00ah], strict dword 008000001h ; 66 26 c7 47 0a 01 00 00 08
+    db  066h, 026h, 0c7h, 047h, 00eh, 001h, 000h, 000h, 008h
+    ; mov dword [es:bx+00eh], strict dword 008000001h ; 66 26 c7 47 0e 01 00 00 08
     mov byte [bp-00eh], 000h                  ; c6 46 f2 00
-    jmp short 03aeeh                          ; eb 09
+    jmp short 03dc3h                          ; eb 09
     inc byte [bp-00eh]                        ; fe 46 f2
     cmp byte [bp-00eh], 004h                  ; 80 7e f2 04
-    jnbe short 03b25h                         ; 77 37
+    jnbe short 03dfah                         ; 77 37
     movzx di, byte [bp-00ch]                  ; 0f b6 7e f4
-    imul di, di, strict byte 00018h           ; 6b ff 18
+    imul di, di, strict byte 0001ch           ; 6b ff 1c
     mov es, [bp-012h]                         ; 8e 46 ee
     add di, word [bp-014h]                    ; 03 7e ec
-    movzx di, byte [es:di+01eh]               ; 26 0f b6 7d 1e
+    movzx di, byte [es:di+022h]               ; 26 0f b6 7d 22
     add di, di                                ; 01 ff
     lea dx, [bp-00826h]                       ; 8d 96 da f7
     push SS                                   ; 16
@@ -5023,35 +5274,35 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     mov dx, strict word 0000ch                ; ba 0c 00
     call word [word di+0006ah]                ; ff 95 6a 00
     test ax, ax                               ; 85 c0
-    jne short 03ae5h                          ; 75 c0
+    jne short 03dbah                          ; 75 c0
     test ax, ax                               ; 85 c0
-    je short 03b2fh                           ; 74 06
+    je short 03e04h                           ; 74 06
     mov ax, strict word 00003h                ; b8 03 00
-    jmp near 03e10h                           ; e9 e1 02
+    jmp near 040e5h                           ; e9 e1 02
     cmp byte [bp-00826h], 000h                ; 80 be da f7 00
-    je short 03b3ch                           ; 74 06
+    je short 03e11h                           ; 74 06
     mov ax, strict word 00004h                ; b8 04 00
-    jmp near 03e10h                           ; e9 d4 02
+    jmp near 040e5h                           ; e9 d4 02
     xor di, di                                ; 31 ff
-    jmp short 03b46h                          ; eb 06
+    jmp short 03e1bh                          ; eb 06
     inc di                                    ; 47
     cmp di, strict byte 00005h                ; 83 ff 05
-    jnc short 03b56h                          ; 73 10
+    jnc short 03e2bh                          ; 73 10
     mov al, byte [bp+di-00825h]               ; 8a 83 db f7
-    cmp al, byte [di+00daah]                  ; 3a 85 aa 0d
-    je short 03b40h                           ; 74 f0
+    cmp al, byte [di+00da8h]                  ; 3a 85 a8 0d
+    je short 03e15h                           ; 74 f0
     mov ax, strict word 00005h                ; b8 05 00
-    jmp near 03e10h                           ; e9 ba 02
+    jmp near 040e5h                           ; e9 ba 02
     xor di, di                                ; 31 ff
-    jmp short 03b60h                          ; eb 06
+    jmp short 03e35h                          ; eb 06
     inc di                                    ; 47
     cmp di, strict byte 00017h                ; 83 ff 17
-    jnc short 03b70h                          ; 73 10
+    jnc short 03e45h                          ; 73 10
     mov al, byte [bp+di-0081fh]               ; 8a 83 e1 f7
-    cmp al, byte [di+00db0h]                  ; 3a 85 b0 0d
-    je short 03b5ah                           ; 74 f0
+    cmp al, byte [di+00daeh]                  ; 3a 85 ae 0d
+    je short 03e2fh                           ; 74 f0
     mov ax, strict word 00006h                ; b8 06 00
-    jmp near 03e10h                           ; e9 a0 02
+    jmp near 040e5h                           ; e9 a0 02
     mov ax, word [bp-007dfh]                  ; 8b 86 21 f8
     mov dx, word [bp-007ddh]                  ; 8b 96 23 f8
     mov word [bp-026h], strict word 00028h    ; c7 46 da 28 00
@@ -5064,10 +5315,10 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     xchg ah, al                               ; 86 c4
     mov word [bp-01fh], ax                    ; 89 46 e1
     movzx di, byte [bp-00ch]                  ; 0f b6 7e f4
-    imul di, di, strict byte 00018h           ; 6b ff 18
+    imul di, di, strict byte 0001ch           ; 6b ff 1c
     mov es, [bp-012h]                         ; 8e 46 ee
     add di, word [bp-014h]                    ; 03 7e ec
-    movzx di, byte [es:di+01eh]               ; 26 0f b6 7d 1e
+    movzx di, byte [es:di+022h]               ; 26 0f b6 7d 22
     add di, di                                ; 01 ff
     lea dx, [bp-00826h]                       ; 8d 96 da f7
     push SS                                   ; 16
@@ -5082,38 +5333,38 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     mov dx, strict word 0000ch                ; ba 0c 00
     call word [word di+0006ah]                ; ff 95 6a 00
     test ax, ax                               ; 85 c0
-    je short 03bcdh                           ; 74 06
+    je short 03ea2h                           ; 74 06
     mov ax, strict word 00007h                ; b8 07 00
-    jmp near 03e10h                           ; e9 43 02
+    jmp near 040e5h                           ; e9 43 02
     cmp byte [bp-00826h], 001h                ; 80 be da f7 01
-    je short 03bdah                           ; 74 06
+    je short 03eafh                           ; 74 06
     mov ax, strict word 00008h                ; b8 08 00
-    jmp near 03e10h                           ; e9 36 02
+    jmp near 040e5h                           ; e9 36 02
     cmp byte [bp-00825h], 000h                ; 80 be db f7 00
-    je short 03be7h                           ; 74 06
+    je short 03ebch                           ; 74 06
     mov ax, strict word 00009h                ; b8 09 00
-    jmp near 03e10h                           ; e9 29 02
+    jmp near 040e5h                           ; e9 29 02
     cmp byte [bp-00808h], 055h                ; 80 be f8 f7 55
-    je short 03bf4h                           ; 74 06
+    je short 03ec9h                           ; 74 06
     mov ax, strict word 0000ah                ; b8 0a 00
-    jmp near 03e10h                           ; e9 1c 02
+    jmp near 040e5h                           ; e9 1c 02
     cmp byte [bp-00807h], 0aah                ; 80 be f9 f7 aa
-    jne short 03beeh                          ; 75 f3
+    jne short 03ec3h                          ; 75 f3
     cmp byte [bp-00806h], 088h                ; 80 be fa f7 88
-    je short 03c08h                           ; 74 06
+    je short 03eddh                           ; 74 06
     mov ax, strict word 0000bh                ; b8 0b 00
-    jmp near 03e10h                           ; e9 08 02
+    jmp near 040e5h                           ; e9 08 02
     mov al, byte [bp-00805h]                  ; 8a 86 fb f7
     mov es, [bp-010h]                         ; 8e 46 f0
     mov byte [es:si+001h], al                 ; 26 88 44 01
     cmp byte [bp-00805h], 000h                ; 80 be fb f7 00
-    jne short 03c21h                          ; 75 07
+    jne short 03ef6h                          ; 75 07
     mov byte [es:si+002h], 0e0h               ; 26 c6 44 02 e0
-    jmp short 03c34h                          ; eb 13
+    jmp short 03f09h                          ; eb 13
     cmp byte [bp-00805h], 004h                ; 80 be fb f7 04
-    jnc short 03c2fh                          ; 73 07
+    jnc short 03f04h                          ; 73 07
     mov byte [es:si+002h], 000h               ; 26 c6 44 02 00
-    jmp short 03c34h                          ; eb 05
+    jmp short 03f09h                          ; eb 05
     mov byte [es:si+002h], 080h               ; 26 c6 44 02 80
     movzx di, byte [bp-00ch]                  ; 0f b6 7e f4
     mov ax, di                                ; 89 f8
@@ -5131,7 +5382,7 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     mov ax, word [bp-00804h]                  ; 8b 86 fc f7
     mov word [bp-016h], ax                    ; 89 46 ea
     test ax, ax                               ; 85 c0
-    jne short 03c62h                          ; 75 05
+    jne short 03f37h                          ; 75 05
     mov word [bp-016h], 007c0h                ; c7 46 ea c0 07
     mov ax, word [bp-016h]                    ; 8b 46 ea
     mov es, [bp-010h]                         ; 8e 46 f0
@@ -5140,11 +5391,11 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     mov di, word [bp-00800h]                  ; 8b be 00 f8
     mov word [es:si+00eh], di                 ; 26 89 7c 0e
     test di, di                               ; 85 ff
-    je short 03c84h                           ; 74 06
+    je short 03f59h                           ; 74 06
     cmp di, 00400h                            ; 81 ff 00 04
-    jbe short 03c8ah                          ; 76 06
+    jbe short 03f5fh                          ; 76 06
     mov ax, strict word 0000ch                ; b8 0c 00
-    jmp near 03e10h                           ; e9 86 01
+    jmp near 040e5h                           ; e9 86 01
     mov ax, word [bp-007feh]                  ; 8b 86 02 f8
     mov dx, word [bp-007fch]                  ; 8b 96 04 f8
     mov word [es:si+008h], ax                 ; 26 89 44 08
@@ -5162,19 +5413,19 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     xchg ah, al                               ; 86 c4
     mov word [bp-01fh], ax                    ; 89 46 e1
     les bx, [bp-014h]                         ; c4 5e ec
-    mov word [es:bx+00ah], dx                 ; 26 89 57 0a
-    mov word [es:bx+00ch], 00200h             ; 26 c7 47 0c 00 02
+    mov word [es:bx+00eh], dx                 ; 26 89 57 0e
+    mov word [es:bx+010h], 00200h             ; 26 c7 47 10 00 02
     mov ax, di                                ; 89 f8
     sal ax, 009h                              ; c1 e0 09
     mov dx, 00800h                            ; ba 00 08
     sub dx, ax                                ; 29 c2
     mov ax, dx                                ; 89 d0
     and ah, 007h                              ; 80 e4 07
-    mov word [es:bx+01ch], ax                 ; 26 89 47 1c
+    mov word [es:bx+020h], ax                 ; 26 89 47 20
     movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     add bx, ax                                ; 01 c3
-    movzx ax, byte [es:bx+01eh]               ; 26 0f b6 47 1e
+    movzx ax, byte [es:bx+022h]               ; 26 0f b6 47 22
     add ax, ax                                ; 01 c0
     mov word [bp-01ah], ax                    ; 89 46 e6
     push word [bp-016h]                       ; ff 76 ea
@@ -5184,7 +5435,7 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     mov cx, strict word 00009h                ; b9 09 00
     sal ax, 1                                 ; d1 e0
     rcl di, 1                                 ; d1 d7
-    loop 03cf8h                               ; e2 fa
+    loop 03fcdh                               ; e2 fa
     push di                                   ; 57
     push ax                                   ; 50
     push strict byte 00000h                   ; 6a 00
@@ -5195,49 +5446,49 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     mov di, word [bp-01ah]                    ; 8b 7e e6
     call word [word di+0006ah]                ; ff 95 6a 00
     les bx, [bp-014h]                         ; c4 5e ec
-    mov word [es:bx+01ch], strict word 00000h ; 26 c7 47 1c 00 00
+    mov word [es:bx+020h], strict word 00000h ; 26 c7 47 20 00 00
     test ax, ax                               ; 85 c0
-    je short 03d28h                           ; 74 06
+    je short 03ffdh                           ; 74 06
     mov ax, strict word 0000dh                ; b8 0d 00
-    jmp near 03e10h                           ; e9 e8 00
+    jmp near 040e5h                           ; e9 e8 00
     mov es, [bp-010h]                         ; 8e 46 f0
     mov al, byte [es:si+001h]                 ; 26 8a 44 01
     cmp AL, strict byte 002h                  ; 3c 02
-    jc short 03d40h                           ; 72 0d
-    jbe short 03d58h                          ; 76 23
+    jc short 04015h                           ; 72 0d
+    jbe short 0402dh                          ; 76 23
     cmp AL, strict byte 004h                  ; 3c 04
-    je short 03d6eh                           ; 74 35
+    je short 04043h                           ; 74 35
     cmp AL, strict byte 003h                  ; 3c 03
-    je short 03d63h                           ; 74 26
-    jmp near 03db9h                           ; e9 79 00
+    je short 04038h                           ; 74 26
+    jmp near 0408eh                           ; e9 79 00
     cmp AL, strict byte 001h                  ; 3c 01
-    jne short 03db9h                          ; 75 75
+    jne short 0408eh                          ; 75 75
     mov es, [bp-010h]                         ; 8e 46 f0
     db  066h, 026h, 0c7h, 044h, 012h, 050h, 000h, 00fh, 000h
     ; mov dword [es:si+012h], strict dword 0000f0050h ; 66 26 c7 44 12 50 00 0f 00
     mov word [es:si+010h], strict word 00002h ; 26 c7 44 10 02 00
-    jmp short 03db9h                          ; eb 61
+    jmp short 0408eh                          ; eb 61
     db  066h, 026h, 0c7h, 044h, 012h, 050h, 000h, 012h, 000h
     ; mov dword [es:si+012h], strict dword 000120050h ; 66 26 c7 44 12 50 00 12 00
-    jmp short 03d50h                          ; eb ed
+    jmp short 04025h                          ; eb ed
     db  066h, 026h, 0c7h, 044h, 012h, 050h, 000h, 024h, 000h
     ; mov dword [es:si+012h], strict dword 000240050h ; 66 26 c7 44 12 50 00 24 00
-    jmp short 03d50h                          ; eb e2
+    jmp short 04025h                          ; eb e2
     mov dx, 001c4h                            ; ba c4 01
     mov ax, word [bp-016h]                    ; 8b 46 ea
-    call 01650h                               ; e8 d9 d8
+    call 01650h                               ; e8 04 d6
     and AL, strict byte 03fh                  ; 24 3f
     xor ah, ah                                ; 30 e4
     mov es, [bp-010h]                         ; 8e 46 f0
     mov word [es:si+014h], ax                 ; 26 89 44 14
     mov dx, 001c4h                            ; ba c4 01
     mov ax, word [bp-016h]                    ; 8b 46 ea
-    call 01650h                               ; e8 c5 d8
+    call 01650h                               ; e8 f0 d5
     movzx bx, al                              ; 0f b6 d8
     sal bx, 002h                              ; c1 e3 02
     mov dx, 001c5h                            ; ba c5 01
     mov ax, word [bp-016h]                    ; 8b 46 ea
-    call 01650h                               ; e8 b6 d8
+    call 01650h                               ; e8 e1 d5
     xor ah, ah                                ; 30 e4
     add ax, bx                                ; 01 d8
     inc ax                                    ; 40
@@ -5245,36 +5496,36 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     mov word [es:si+012h], ax                 ; 26 89 44 12
     mov dx, 001c3h                            ; ba c3 01
     mov ax, word [bp-016h]                    ; 8b 46 ea
-    call 01650h                               ; e8 a1 d8
+    call 01650h                               ; e8 cc d5
     xor ah, ah                                ; 30 e4
     inc ax                                    ; 40
     mov es, [bp-010h]                         ; 8e 46 f0
     mov word [es:si+010h], ax                 ; 26 89 44 10
     mov es, [bp-010h]                         ; 8e 46 f0
     cmp byte [es:si+001h], 000h               ; 26 80 7c 01 00
-    je short 03df7h                           ; 74 34
+    je short 040cch                           ; 74 34
     cmp byte [es:si+002h], 000h               ; 26 80 7c 02 00
-    jne short 03de0h                          ; 75 16
+    jne short 040b5h                          ; 75 16
     mov dx, strict word 00010h                ; ba 10 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 7d d8
+    call 01650h                               ; e8 a8 d5
     or AL, strict byte 041h                   ; 0c 41
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00010h                ; ba 10 00
     mov ax, strict word 00040h                ; b8 40 00
-    jmp short 03df4h                          ; eb 14
-    mov dx, 002c0h                            ; ba c0 02
+    jmp short 040c9h                          ; eb 14
+    mov dx, 00304h                            ; ba 04 03
     mov ax, word [bp-018h]                    ; 8b 46 e8
-    call 01650h                               ; e8 67 d8
+    call 01650h                               ; e8 92 d5
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     movzx bx, al                              ; 0f b6 d8
-    mov dx, 002c0h                            ; ba c0 02
+    mov dx, 00304h                            ; ba 04 03
     mov ax, word [bp-018h]                    ; 8b 46 e8
-    call 0165eh                               ; e8 67 d8
+    call 0165eh                               ; e8 92 d5
     mov es, [bp-010h]                         ; 8e 46 f0
     cmp byte [es:si+001h], 000h               ; 26 80 7c 01 00
-    je short 03e05h                           ; 74 04
+    je short 040dah                           ; 74 04
     mov byte [es:si], 001h                    ; 26 c6 04 01
     mov es, [bp-010h]                         ; 8e 46 f0
     movzx ax, byte [es:si+002h]               ; 26 0f b6 44 02
@@ -5288,12 +5539,12 @@ cdrom_boot_:                                 ; 0xf3a5d LB 0x416
     pop bp                                    ; 5d
     retn                                      ; c3
     db  050h, 04eh, 049h, 048h, 047h, 046h, 045h, 044h, 043h, 042h, 041h, 018h, 016h, 015h, 014h, 011h
-    db  010h, 00dh, 00ch, 00bh, 00ah, 009h, 008h, 005h, 004h, 003h, 002h, 001h, 000h, 00bh, 042h, 019h
-    db  03fh, 063h, 03fh, 08bh, 03fh, 058h, 03fh, 08bh, 03fh, 058h, 03fh, 061h, 041h, 03eh, 03fh, 00bh
-    db  042h, 00bh, 042h, 03eh, 03fh, 03eh, 03fh, 03eh, 03fh, 03eh, 03fh, 03eh, 03fh, 002h, 042h, 03eh
-    db  03fh, 00bh, 042h, 00bh, 042h, 00bh, 042h, 00bh, 042h, 00bh, 042h, 00bh, 042h, 00bh, 042h, 00bh
-    db  042h, 00bh, 042h, 00bh, 042h, 00bh, 042h, 00bh, 042h
-_int13_cdemu:                                ; 0xf3e73 LB 0x434
+    db  010h, 00dh, 00ch, 00bh, 00ah, 009h, 008h, 005h, 004h, 003h, 002h, 001h, 000h, 0e0h, 044h, 0eeh
+    db  041h, 038h, 042h, 060h, 042h, 02dh, 042h, 060h, 042h, 02dh, 042h, 036h, 044h, 013h, 042h, 0e0h
+    db  044h, 0e0h, 044h, 013h, 042h, 013h, 042h, 013h, 042h, 013h, 042h, 013h, 042h, 0d7h, 044h, 013h
+    db  042h, 0e0h, 044h, 0e0h, 044h, 0e0h, 044h, 0e0h, 044h, 0e0h, 044h, 0e0h, 044h, 0e0h, 044h, 0e0h
+    db  044h, 0e0h, 044h, 0e0h, 044h, 0e0h, 044h, 0e0h, 044h
+_int13_cdemu:                                ; 0xf4148 LB 0x434
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -5301,8 +5552,8 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     sub sp, strict byte 0002ah                ; 83 ec 2a
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 e8 d7
-    mov di, 00322h                            ; bf 22 03
+    call 0166ch                               ; e8 13 d5
+    mov di, 00366h                            ; bf 66 03
     mov cx, ax                                ; 89 c1
     mov si, di                                ; 89 fe
     mov word [bp-008h], ax                    ; 89 46 f8
@@ -5317,61 +5568,61 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 ab d7
+    call 0165eh                               ; e8 d6 d4
     mov es, cx                                ; 8e c1
     cmp byte [es:di], 000h                    ; 26 80 3d 00
-    je short 03ec9h                           ; 74 0e
+    je short 0419eh                           ; 74 0e
     movzx dx, byte [es:di+002h]               ; 26 0f b6 55 02
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     cmp dx, ax                                ; 39 c2
-    je short 03ef2h                           ; 74 29
-    mov bx, 00da2h                            ; bb a2 0d
+    je short 041c7h                           ; 74 29
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 5d da
+    call 01931h                               ; e8 88 d7
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     push ax                                   ; 50
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0032ch                               ; 68 2c 03
-    push 00338h                               ; 68 38 03
+    push 0034ch                               ; 68 4c 03
+    push 00358h                               ; 68 58 03
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 86 da
+    call 01972h                               ; e8 b1 d7
     add sp, strict byte 0000ah                ; 83 c4 0a
-    jmp near 0422bh                           ; e9 39 03
+    jmp near 04500h                           ; e9 39 03
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     cmp ax, strict word 00050h                ; 3d 50 00
-    jnbe near 0420bh                          ; 0f 87 0c 03
+    jnbe near 044e0h                          ; 0f 87 0c 03
     push CS                                   ; 0e
     pop ES                                    ; 07
     mov cx, strict word 0001eh                ; b9 1e 00
-    mov di, 03e1ah                            ; bf 1a 3e
+    mov di, 040efh                            ; bf ef 40
     repne scasb                               ; f2 ae
     sal cx, 1                                 ; d1 e1
     mov di, cx                                ; 89 cf
-    mov ax, word [cs:di+03e37h]               ; 2e 8b 85 37 3e
+    mov ax, word [cs:di+0410ch]               ; 2e 8b 85 0c 41
     mov bx, word [bp+016h]                    ; 8b 5e 16
     xor bh, bh                                ; 30 ff
     jmp ax                                    ; ff e0
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
-    imul bx, bx, strict byte 00018h           ; 6b db 18
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
     mov es, [bp-00ch]                         ; 8e 46 f4
     add bx, word [bp-00eh]                    ; 03 5e f2
-    movzx bx, byte [es:bx+01eh]               ; 26 0f b6 5f 1e
+    movzx bx, byte [es:bx+022h]               ; 26 0f b6 5f 22
     add bx, bx                                ; 01 db
     cmp word [word bx+0006ah], strict byte 00000h ; 83 bf 6a 00 00
-    je near 03f3eh                            ; 0f 84 08 00
+    je near 04213h                            ; 0f 84 08 00
     movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
     call word [word bx+00076h]                ; ff 97 76 00
     mov byte [bp+017h], 000h                  ; c6 46 17 00
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 11 d7
+    call 0165eh                               ; e8 3c d4
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
@@ -5381,10 +5632,10 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 003h                               ; 80 cc 03
-    jmp near 04233h                           ; e9 d0 02
+    jmp near 04508h                           ; e9 d0 02
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 e4 d6
+    call 01650h                               ; e8 0f d4
     mov cl, al                                ; 88 c1
     movzx ax, cl                              ; 0f b6 c1
     sal ax, 008h                              ; c1 e0 08
@@ -5393,10 +5644,10 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 da d6
+    call 0165eh                               ; e8 05 d4
     test cl, cl                               ; 84 c9
-    je short 03f42h                           ; 74 ba
-    jmp near 04247h                           ; e9 bc 02
+    je short 04217h                           ; 74 ba
+    jmp near 0451ch                           ; e9 bc 02
     mov es, [bp-008h]                         ; 8e 46 f8
     mov di, word [es:si+014h]                 ; 26 8b 7c 14
     mov dx, word [es:si+012h]                 ; 26 8b 54 12
@@ -5420,19 +5671,19 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     xor ch, ch                                ; 30 ed
     mov word [bp-00ah], cx                    ; 89 4e f6
     test cx, cx                               ; 85 c9
-    jne short 03fd8h                          ; 75 03
-    jmp near 03f3eh                           ; e9 66 ff
+    jne short 042adh                          ; 75 03
+    jmp near 04213h                           ; e9 66 ff
     cmp di, word [bp-010h]                    ; 3b 7e f0
-    jc near 0422bh                            ; 0f 82 4c 02
+    jc near 04500h                            ; 0f 82 4c 02
     cmp ax, dx                                ; 39 d0
-    jnc near 0422bh                           ; 0f 83 46 02
+    jnc near 04500h                           ; 0f 83 46 02
     cmp si, bx                                ; 39 de
-    jnc near 0422bh                           ; 0f 83 40 02
+    jnc near 04500h                           ; 0f 83 40 02
     mov dx, word [bp+016h]                    ; 8b 56 16
     shr dx, 008h                              ; c1 ea 08
     cmp dx, strict byte 00004h                ; 83 fa 04
-    jne short 03ff9h                          ; 75 03
-    jmp near 03f3eh                           ; e9 45 ff
+    jne short 042ceh                          ; 75 03
+    jmp near 04213h                           ; e9 45 ff
     mov dx, word [bp+010h]                    ; 8b 56 10
     shr dx, 004h                              ; c1 ea 04
     mov cx, word [bp+006h]                    ; 8b 4e 06
@@ -5443,13 +5694,13 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     mov word [bp-01ch], dx                    ; 89 56 e4
     xor dl, dl                                ; 30 d2
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 62 57
+    call 09d09h                               ; e8 1d 5a
     xor bx, bx                                ; 31 db
     add ax, si                                ; 01 f0
     adc dx, bx                                ; 11 da
     mov bx, di                                ; 89 fb
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 55 57
+    call 09d09h                               ; e8 10 5a
     mov bx, ax                                ; 89 c3
     mov ax, word [bp-010h]                    ; 8b 46 f0
     dec ax                                    ; 48
@@ -5484,7 +5735,7 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     mov cx, strict word 0000ch                ; b9 0c 00
     mov dx, ss                                ; 8c d2
     lea ax, [bp-02eh]                         ; 8d 46 d2
-    call 097aah                               ; e8 2f 57
+    call 09d5ah                               ; e8 0a 5a
     mov word [bp-02eh], strict word 00028h    ; c7 46 d2 28 00
     mov ax, word [bp-014h]                    ; 8b 46 ec
     add ax, si                                ; 01 f0
@@ -5502,11 +5753,11 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     mov word [bp-027h], ax                    ; 89 46 d9
     mov ax, word [bp-00ah]                    ; 8b 46 f6
     les bx, [bp-00eh]                         ; c4 5e f2
-    mov word [es:bx+00ah], ax                 ; 26 89 47 0a
-    mov word [es:bx+00ch], 00200h             ; 26 c7 47 0c 00 02
+    mov word [es:bx+00eh], ax                 ; 26 89 47 0e
+    mov word [es:bx+010h], 00200h             ; 26 c7 47 10 00 02
     mov ax, di                                ; 89 f8
     sal ax, 009h                              ; c1 e0 09
-    mov word [es:bx+01ah], ax                 ; 26 89 47 1a
+    mov word [es:bx+01eh], ax                 ; 26 89 47 1e
     mov dx, word [bp-00ah]                    ; 8b 56 f6
     xor dh, dh                                ; 30 f6
     and dl, 003h                              ; 80 e2 03
@@ -5517,11 +5768,11 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     sal dx, 009h                              ; c1 e2 09
     and dh, 007h                              ; 80 e6 07
     mov bx, word [bp-00eh]                    ; 8b 5e f2
-    mov word [es:bx+01ch], dx                 ; 26 89 57 1c
+    mov word [es:bx+020h], dx                 ; 26 89 57 20
     movzx dx, byte [bp-006h]                  ; 0f b6 56 fa
-    imul dx, dx, strict byte 00018h           ; 6b d2 18
+    imul dx, dx, strict byte 0001ch           ; 6b d2 1c
     add bx, dx                                ; 01 d3
-    movzx dx, byte [es:bx+01eh]               ; 26 0f b6 57 1e
+    movzx dx, byte [es:bx+022h]               ; 26 0f b6 57 22
     add dx, dx                                ; 01 d2
     mov word [bp-01ah], dx                    ; 89 56 e6
     push word [bp-016h]                       ; ff 76 ea
@@ -5532,7 +5783,7 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     mov cx, strict word 00009h                ; b9 09 00
     sal si, 1                                 ; d1 e6
     rcl di, 1                                 ; d1 d7
-    loop 040fbh                               ; e2 fa
+    loop 043d0h                               ; e2 fa
     push di                                   ; 57
     push si                                   ; 56
     push ax                                   ; 50
@@ -5544,30 +5795,30 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     call word [word si+0006ah]                ; ff 94 6a 00
     mov dx, ax                                ; 89 c2
     les bx, [bp-00eh]                         ; c4 5e f2
-    db  066h, 026h, 0c7h, 047h, 01ah, 000h, 000h, 000h, 000h
-    ; mov dword [es:bx+01ah], strict dword 000000000h ; 66 26 c7 47 1a 00 00 00 00
+    db  066h, 026h, 0c7h, 047h, 01eh, 000h, 000h, 000h, 000h
+    ; mov dword [es:bx+01eh], strict dword 000000000h ; 66 26 c7 47 1e 00 00 00 00
     test al, al                               ; 84 c0
-    je near 03f3eh                            ; 0f 84 13 fe
-    mov bx, 00da2h                            ; bb a2 0d
+    je near 04213h                            ; 0f 84 13 fe
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 fb d7
+    call 01931h                               ; e8 26 d5
     movzx ax, dl                              ; 0f b6 c2
     push ax                                   ; 50
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0032ch                               ; 68 2c 03
-    push 0036eh                               ; 68 6e 03
+    push 0034ch                               ; 68 4c 03
+    push 0038eh                               ; 68 8e 03
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 26 d8
+    call 01972h                               ; e8 51 d5
     add sp, strict byte 0000ah                ; 83 c4 0a
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 002h                               ; 80 cc 02
     mov word [bp+016h], ax                    ; 89 46 16
     mov byte [bp+016h], 000h                  ; c6 46 16 00
-    jmp near 04236h                           ; e9 d5 00
+    jmp near 0450bh                           ; e9 d5 00
     mov es, [bp-008h]                         ; 8e 46 f8
     mov di, word [es:si+014h]                 ; 26 8b 7c 14
     mov dx, word [es:si+012h]                 ; 26 8b 54 12
@@ -5606,40 +5857,40 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     mov dl, byte [es:si+001h]                 ; 26 8a 54 01
     mov word [bp+010h], ax                    ; 89 46 10
     cmp dl, 003h                              ; 80 fa 03
-    je short 041e5h                           ; 74 1a
+    je short 044bah                           ; 74 1a
     cmp dl, 002h                              ; 80 fa 02
-    je short 041e1h                           ; 74 11
+    je short 044b6h                           ; 74 11
     cmp dl, 001h                              ; 80 fa 01
-    jne short 041e9h                          ; 75 14
+    jne short 044beh                          ; 75 14
     mov ax, word [bp+010h]                    ; 8b 46 10
     xor al, al                                ; 30 c0
     or AL, strict byte 002h                   ; 0c 02
     mov word [bp+010h], ax                    ; 89 46 10
-    jmp short 041e9h                          ; eb 08
+    jmp short 044beh                          ; eb 08
     or AL, strict byte 004h                   ; 0c 04
-    jmp short 041dch                          ; eb f7
+    jmp short 044b1h                          ; eb f7
     or AL, strict byte 005h                   ; 0c 05
-    jmp short 041dch                          ; eb f3
+    jmp short 044b1h                          ; eb f3
     mov es, [bp-008h]                         ; 8e 46 f8
     cmp byte [es:si+001h], 004h               ; 26 80 7c 01 04
-    jnc near 03f3eh                           ; 0f 83 49 fd
+    jnc near 04213h                           ; 0f 83 49 fd
     mov word [bp+008h], 0efc7h                ; c7 46 08 c7 ef
     mov word [bp+006h], 0f000h                ; c7 46 06 00 f0
-    jmp near 03f3eh                           ; e9 3c fd
+    jmp near 04213h                           ; e9 3c fd
     or bh, 003h                               ; 80 cf 03
     mov word [bp+016h], bx                    ; 89 5e 16
-    jmp near 03f42h                           ; e9 37 fd
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 04217h                           ; e9 37 fd
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 1b d7
+    call 01931h                               ; e8 46 d4
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0032ch                               ; 68 2c 03
-    push 0038fh                               ; 68 8f 03
+    push 0034ch                               ; 68 4c 03
+    push 003afh                               ; 68 af 03
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 4a d7
+    call 01972h                               ; e8 75 d4
     add sp, strict byte 00008h                ; 83 c4 08
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
@@ -5650,16 +5901,16 @@ _int13_cdemu:                                ; 0xf3e73 LB 0x434
     xor bh, bh                                ; 30 ff
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 17 d4
+    call 0165eh                               ; e8 42 d1
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
-    jmp near 03f51h                           ; e9 03 fd
+    jmp near 04226h                           ; e9 03 fd
     db  050h, 04eh, 049h, 048h, 047h, 046h, 045h, 044h, 043h, 042h, 041h, 018h, 016h, 015h, 014h, 011h
-    db  010h, 00dh, 00ch, 00bh, 00ah, 009h, 008h, 005h, 004h, 003h, 002h, 001h, 000h, 0ech, 047h, 068h
-    db  045h, 054h, 043h, 0ech, 047h, 049h, 043h, 0ech, 047h, 049h, 043h, 0ech, 047h, 068h, 045h, 0ech
-    db  047h, 0ech, 047h, 068h, 045h, 068h, 045h, 068h, 045h, 068h, 045h, 068h, 045h, 07eh, 043h, 068h
-    db  045h, 0ech, 047h, 087h, 043h, 09ah, 043h, 049h, 043h, 09ah, 043h, 0c8h, 044h, 082h, 045h, 09ah
-    db  043h, 0a9h, 045h, 0a5h, 047h, 0adh, 047h, 0ech, 047h
-_int13_cdrom:                                ; 0xf42a7 LB 0x562
+    db  010h, 00dh, 00ch, 00bh, 00ah, 009h, 008h, 005h, 004h, 003h, 002h, 001h, 000h, 0c1h, 04ah, 03dh
+    db  048h, 029h, 046h, 0c1h, 04ah, 01eh, 046h, 0c1h, 04ah, 01eh, 046h, 0c1h, 04ah, 03dh, 048h, 0c1h
+    db  04ah, 0c1h, 04ah, 03dh, 048h, 03dh, 048h, 03dh, 048h, 03dh, 048h, 03dh, 048h, 053h, 046h, 03dh
+    db  048h, 0c1h, 04ah, 05ch, 046h, 06fh, 046h, 01eh, 046h, 06fh, 046h, 09dh, 047h, 057h, 048h, 06fh
+    db  046h, 07eh, 048h, 07ah, 04ah, 082h, 04ah, 0c1h, 04ah
+_int13_cdrom:                                ; 0xf457c LB 0x562
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -5667,70 +5918,70 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     sub sp, strict byte 00028h                ; 83 ec 28
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 b4 d3
+    call 0166ch                               ; e8 df d0
     mov word [bp-01ah], ax                    ; 89 46 e6
     mov si, 00122h                            ; be 22 01
     mov word [bp-00ch], ax                    ; 89 46 f4
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 92 d3
+    call 0165eh                               ; e8 bd d0
     mov ax, word [bp+010h]                    ; 8b 46 10
     xor ah, ah                                ; 30 e4
     cmp ax, 000e0h                            ; 3d e0 00
-    jc short 042dbh                           ; 72 05
+    jc short 045b0h                           ; 72 05
     cmp ax, 000f0h                            ; 3d f0 00
-    jc short 042f9h                           ; 72 1e
+    jc short 045ceh                           ; 72 1e
     mov ax, word [bp+010h]                    ; 8b 46 10
     xor ah, ah                                ; 30 e4
     push ax                                   ; 50
     mov ax, word [bp+018h]                    ; 8b 46 18
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 003bfh                               ; 68 bf 03
-    push 003cbh                               ; 68 cb 03
+    push 003dfh                               ; 68 df 03
+    push 003ebh                               ; 68 eb 03
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 7f d6
+    call 01972h                               ; e8 aa d3
     add sp, strict byte 0000ah                ; 83 c4 0a
-    jmp near 047c9h                           ; e9 d0 04
+    jmp near 04a9eh                           ; e9 d0 04
     mov ax, word [bp+010h]                    ; 8b 46 10
     xor ah, ah                                ; 30 e4
     mov es, [bp-00ch]                         ; 8e 46 f4
     mov bx, si                                ; 89 f3
     add bx, ax                                ; 01 c3
-    mov dl, byte [es:bx+000d0h]               ; 26 8a 97 d0 00
+    mov dl, byte [es:bx+00114h]               ; 26 8a 97 14 01
     mov byte [bp-008h], dl                    ; 88 56 f8
     cmp dl, 010h                              ; 80 fa 10
-    jc short 04322h                           ; 72 10
+    jc short 045f7h                           ; 72 10
     push ax                                   ; 50
     mov ax, word [bp+018h]                    ; 8b 46 18
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 003bfh                               ; 68 bf 03
-    push 003f6h                               ; 68 f6 03
-    jmp short 042eeh                          ; eb cc
+    push 003dfh                               ; 68 df 03
+    push 00416h                               ; 68 16 04
+    jmp short 045c3h                          ; eb cc
     mov ax, word [bp+018h]                    ; 8b 46 18
     shr ax, 008h                              ; c1 e8 08
     cmp ax, strict word 00050h                ; 3d 50 00
-    jnbe near 047ech                          ; 0f 87 bd 04
+    jnbe near 04ac1h                          ; 0f 87 bd 04
     push CS                                   ; 0e
     pop ES                                    ; 07
     mov cx, strict word 0001eh                ; b9 1e 00
-    mov di, 0424eh                            ; bf 4e 42
+    mov di, 04523h                            ; bf 23 45
     repne scasb                               ; f2 ae
     sal cx, 1                                 ; d1 e1
     mov di, cx                                ; 89 cf
-    mov ax, word [cs:di+0426bh]               ; 2e 8b 85 6b 42
+    mov ax, word [cs:di+04540h]               ; 2e 8b 85 40 45
     mov bx, word [bp+018h]                    ; 8b 5e 18
     xor bh, bh                                ; 30 ff
     jmp ax                                    ; ff e0
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor ah, ah                                ; 30 e4
     or ah, 003h                               ; 80 cc 03
-    jmp near 047d1h                           ; e9 7d 04
+    jmp near 04aa6h                           ; e9 7d 04
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 f3 d2
+    call 01650h                               ; e8 1e d0
     mov cl, al                                ; 88 c1
     movzx ax, cl                              ; 0f b6 c1
     sal ax, 008h                              ; c1 e0 08
@@ -5739,18 +5990,18 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 e9 d2
+    call 0165eh                               ; e8 14 d0
     test cl, cl                               ; 84 c9
-    je near 0456ch                            ; 0f 84 f1 01
-    jmp near 047e5h                           ; e9 67 04
+    je near 04841h                            ; 0f 84 f1 01
+    jmp near 04abah                           ; e9 67 04
     or bh, 002h                               ; 80 cf 02
     mov word [bp+018h], bx                    ; 89 5e 18
-    jmp near 047d4h                           ; e9 4d 04
+    jmp near 04aa9h                           ; e9 4d 04
     mov word [bp+012h], 0aa55h                ; c7 46 12 55 aa
     or bh, 030h                               ; 80 cf 30
     mov word [bp+018h], bx                    ; 89 5e 18
     mov word [bp+016h], strict word 00007h    ; c7 46 16 07 00
-    jmp near 0456ch                           ; e9 d2 01
+    jmp near 04841h                           ; e9 d2 01
     mov bx, word [bp+00ch]                    ; 8b 5e 0c
     mov es, [bp+006h]                         ; 8e 46 06
     mov word [bp-014h], bx                    ; 89 5e ec
@@ -5765,16 +6016,16 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     mov word [bp-018h], ax                    ; 89 46 e8
     mov di, word [es:bx+00eh]                 ; 26 8b 7f 0e
     or di, ax                                 ; 09 c7
-    je short 043e2h                           ; 74 18
+    je short 046b7h                           ; 74 18
     mov ax, word [bp+018h]                    ; 8b 46 18
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 003bfh                               ; 68 bf 03
-    push 00428h                               ; 68 28 04
+    push 003dfh                               ; 68 df 03
+    push 00448h                               ; 68 48 04
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 96 d5
+    call 01972h                               ; e8 c1 d2
     add sp, strict byte 00008h                ; 83 c4 08
-    jmp near 047c9h                           ; e9 e7 03
+    jmp near 04a9eh                           ; e9 e7 03
     les bx, [bp-014h]                         ; c4 5e ec
     mov ax, word [es:bx+008h]                 ; 26 8b 47 08
     mov word [bp-018h], ax                    ; 89 46 e8
@@ -5784,14 +6035,14 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     shr ax, 008h                              ; c1 e8 08
     mov word [bp-016h], ax                    ; 89 46 ea
     cmp ax, strict word 00044h                ; 3d 44 00
-    je near 04568h                            ; 0f 84 66 01
+    je near 0483dh                            ; 0f 84 66 01
     cmp ax, strict word 00047h                ; 3d 47 00
-    je near 04568h                            ; 0f 84 5f 01
+    je near 0483dh                            ; 0f 84 5f 01
     mov cx, strict word 0000ch                ; b9 0c 00
     xor bx, bx                                ; 31 db
     mov dx, ss                                ; 8c d2
     lea ax, [bp-02ch]                         ; 8d 46 d4
-    call 097aah                               ; e8 94 53
+    call 09d5ah                               ; e8 6f 56
     mov word [bp-02ch], strict word 00028h    ; c7 46 d4 28 00
     mov ax, word [bp-018h]                    ; 8b 46 e8
     mov dx, di                                ; 89 fa
@@ -5805,12 +6056,12 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     mov word [bp-025h], ax                    ; 89 46 db
     mov ax, word [bp-010h]                    ; 8b 46 f0
     mov es, [bp-00ch]                         ; 8e 46 f4
-    mov word [es:si+00ah], ax                 ; 26 89 44 0a
-    mov word [es:si+00ch], 00800h             ; 26 c7 44 0c 00 08
+    mov word [es:si+00eh], ax                 ; 26 89 44 0e
+    mov word [es:si+010h], 00800h             ; 26 c7 44 10 00 08
     movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
-    imul bx, bx, strict byte 00018h           ; 6b db 18
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
     add bx, si                                ; 01 f3
-    movzx di, byte [es:bx+01eh]               ; 26 0f b6 7f 1e
+    movzx di, byte [es:bx+022h]               ; 26 0f b6 7f 22
     add di, di                                ; 01 ff
     push word [bp-01ch]                       ; ff 76 e4
     push word [bp-020h]                       ; ff 76 e0
@@ -5819,7 +6070,7 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     mov cx, strict word 0000bh                ; b9 0b 00
     sal ax, 1                                 ; d1 e0
     rcl bx, 1                                 ; d1 d3
-    loop 04460h                               ; e2 fa
+    loop 04735h                               ; e2 fa
     push bx                                   ; 53
     push ax                                   ; 50
     push strict byte 00000h                   ; 6a 00
@@ -5830,80 +6081,80 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     call word [word di+0006ah]                ; ff 95 6a 00
     mov dx, ax                                ; 89 c2
     mov es, [bp-00ch]                         ; 8e 46 f4
-    mov ax, word [es:si+016h]                 ; 26 8b 44 16
-    mov di, word [es:si+018h]                 ; 26 8b 7c 18
+    mov ax, word [es:si+01ah]                 ; 26 8b 44 1a
+    mov di, word [es:si+01ch]                 ; 26 8b 7c 1c
     mov cx, strict word 0000bh                ; b9 0b 00
     shr di, 1                                 ; d1 ef
     rcr ax, 1                                 ; d1 d8
-    loop 0448ah                               ; e2 fa
+    loop 0475fh                               ; e2 fa
     les bx, [bp-014h]                         ; c4 5e ec
     mov word [es:bx+002h], ax                 ; 26 89 47 02
     test dl, dl                               ; 84 d2
-    je near 04568h                            ; 0f 84 cb 00
-    mov bx, 00da2h                            ; bb a2 0d
+    je near 0483dh                            ; 0f 84 cb 00
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 89 d4
+    call 01931h                               ; e8 b4 d1
     movzx ax, dl                              ; 0f b6 c2
     push ax                                   ; 50
     push word [bp-016h]                       ; ff 76 ea
-    push 003bfh                               ; 68 bf 03
-    push 00451h                               ; 68 51 04
+    push 003dfh                               ; 68 df 03
+    push 00471h                               ; 68 71 04
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 b8 d4
+    call 01972h                               ; e8 e3 d1
     add sp, strict byte 0000ah                ; 83 c4 0a
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor ah, ah                                ; 30 e4
     or ah, 00ch                               ; 80 cc 0c
-    jmp near 047d1h                           ; e9 09 03
+    jmp near 04aa6h                           ; e9 09 03
     cmp bx, strict byte 00002h                ; 83 fb 02
-    jnbe near 047c9h                          ; 0f 87 fa 02
+    jnbe near 04a9eh                          ; 0f 87 fa 02
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov es, [bp-00ch]                         ; 8e 46 f4
     mov di, si                                ; 89 f7
     add di, ax                                ; 01 c7
-    mov al, byte [es:di+021h]                 ; 26 8a 45 21
+    mov al, byte [es:di+025h]                 ; 26 8a 45 25
     cmp bx, strict byte 00002h                ; 83 fb 02
-    je short 04559h                           ; 74 73
+    je short 0482eh                           ; 74 73
     cmp bx, strict byte 00001h                ; 83 fb 01
-    je short 04526h                           ; 74 3b
+    je short 047fbh                           ; 74 3b
     test bx, bx                               ; 85 db
-    jne near 04568h                           ; 0f 85 77 00
+    jne near 0483dh                           ; 0f 85 77 00
     cmp AL, strict byte 0ffh                  ; 3c ff
-    jne short 04507h                          ; 75 12
+    jne short 047dch                          ; 75 12
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor ah, ah                                ; 30 e4
     or ah, 0b4h                               ; 80 cc b4
     mov word [bp+018h], ax                    ; 89 46 18
     xor al, al                                ; 30 c0
     or AL, strict byte 001h                   ; 0c 01
-    jmp near 047d1h                           ; e9 ca 02
+    jmp near 04aa6h                           ; e9 ca 02
     movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
-    imul dx, dx, strict byte 00018h           ; 6b d2 18
+    imul dx, dx, strict byte 0001ch           ; 6b d2 1c
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     mov es, [bp-00ch]                         ; 8e 46 f4
     add si, dx                                ; 01 d6
-    mov byte [es:si+021h], al                 ; 26 88 44 21
+    mov byte [es:si+025h], al                 ; 26 88 44 25
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor al, al                                ; 30 c0
     or AL, strict byte 001h                   ; 0c 01
     mov word [bp+018h], ax                    ; 89 46 18
-    jmp near 04568h                           ; e9 42 00
+    jmp near 0483dh                           ; e9 42 00
     test al, al                               ; 84 c0
-    jne short 04536h                          ; 75 0c
+    jne short 0480bh                          ; 75 0c
     or bh, 0b0h                               ; 80 cf b0
     mov word [bp+018h], bx                    ; 89 5e 18
     mov byte [bp+018h], al                    ; 88 46 18
-    jmp near 047d4h                           ; e9 9e 02
+    jmp near 04aa9h                           ; e9 9e 02
     movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
-    imul dx, dx, strict byte 00018h           ; 6b d2 18
+    imul dx, dx, strict byte 0001ch           ; 6b d2 1c
     db  0feh, 0c8h
     ; dec al                                    ; fe c8
     mov es, [bp-00ch]                         ; 8e 46 f4
     add si, dx                                ; 01 d6
-    mov byte [es:si+021h], al                 ; 26 88 44 21
+    mov byte [es:si+025h], al                 ; 26 88 44 25
     test al, al                               ; 84 c0
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
@@ -5911,7 +6162,7 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor al, al                                ; 30 c0
     or ax, dx                                 ; 09 d0
-    jmp short 04520h                          ; eb c7
+    jmp short 047f5h                          ; eb c7
     test al, al                               ; 84 c0
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
@@ -5923,7 +6174,7 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 e7 d0
+    call 0165eh                               ; e8 12 ce
     and byte [bp+01eh], 0feh                  ; 80 66 1e fe
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
@@ -5931,19 +6182,19 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     pop bp                                    ; 5d
     retn                                      ; c3
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov es, [bp-00ch]                         ; 8e 46 f4
     add si, ax                                ; 01 c6
-    mov al, byte [es:si+021h]                 ; 26 8a 44 21
+    mov al, byte [es:si+025h]                 ; 26 8a 44 25
     test al, al                               ; 84 c0
-    je short 0459ch                           ; 74 06
+    je short 04871h                           ; 74 06
     or bh, 0b1h                               ; 80 cf b1
-    jmp near 04381h                           ; e9 e5 fd
-    je short 04568h                           ; 74 ca
+    jmp near 04656h                           ; e9 e5 fd
+    je short 0483dh                           ; 74 ca
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor ah, ah                                ; 30 e4
     or ah, 0b1h                               ; 80 cc b1
-    jmp near 047d1h                           ; e9 28 02
+    jmp near 04aa6h                           ; e9 28 02
     mov dx, word [bp+00ch]                    ; 8b 56 0c
     mov cx, word [bp+006h]                    ; 8b 4e 06
     mov bx, dx                                ; 89 d3
@@ -5953,14 +6204,14 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     mov ax, word [es:di]                      ; 26 8b 05
     mov word [bp-00eh], ax                    ; 89 46 f2
     cmp ax, strict word 0001ah                ; 3d 1a 00
-    jc near 047c9h                            ; 0f 82 04 02
-    jc short 04616h                           ; 72 4f
+    jc near 04a9eh                            ; 0f 82 04 02
+    jc short 048ebh                           ; 72 4f
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov es, [bp-00ch]                         ; 8e 46 f4
     mov di, si                                ; 89 f7
     add di, ax                                ; 01 c7
-    mov ax, word [es:di+024h]                 ; 26 8b 45 24
+    mov ax, word [es:di+028h]                 ; 26 8b 45 28
     mov es, cx                                ; 8e c1
     mov di, dx                                ; 89 d7
     db  066h, 026h, 0c7h, 005h, 01ah, 000h, 074h, 000h
@@ -5977,12 +6228,12 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     db  066h, 026h, 0c7h, 045h, 014h, 0ffh, 0ffh, 0ffh, 0ffh
     ; mov dword [es:di+014h], strict dword 0ffffffffh ; 66 26 c7 45 14 ff ff ff ff
     cmp word [bp-00eh], strict byte 0001eh    ; 83 7e f2 1e
-    jc near 046edh                            ; 0f 82 cf 00
+    jc near 049c2h                            ; 0f 82 cf 00
     mov es, [bp-00ah]                         ; 8e 46 f6
     mov word [es:bx], strict word 0001eh      ; 26 c7 07 1e 00
     mov ax, word [bp-01ah]                    ; 8b 46 e6
     mov word [es:bx+01ch], ax                 ; 26 89 47 1c
-    mov word [es:bx+01ah], 00312h             ; 26 c7 47 1a 12 03
+    mov word [es:bx+01ah], 00356h             ; 26 c7 47 1a 56 03
     movzx cx, byte [bp-008h]                  ; 0f b6 4e f8
     mov ax, cx                                ; 89 c8
     cwd                                       ; 99
@@ -5993,15 +6244,15 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     imul di, di, strict byte 00006h           ; 6b ff 06
     mov es, [bp-00ch]                         ; 8e 46 f4
     add di, si                                ; 01 f7
-    mov ax, word [es:di+001c2h]               ; 26 8b 85 c2 01
+    mov ax, word [es:di+00206h]               ; 26 8b 85 06 02
     mov word [bp-01eh], ax                    ; 89 46 e2
-    mov dx, word [es:di+001c4h]               ; 26 8b 95 c4 01
-    mov al, byte [es:di+001c1h]               ; 26 8a 85 c1 01
+    mov dx, word [es:di+00208h]               ; 26 8b 95 08 02
+    mov al, byte [es:di+00205h]               ; 26 8a 85 05 02
     mov byte [bp-006h], al                    ; 88 46 fa
-    imul cx, cx, strict byte 00018h           ; 6b c9 18
+    imul cx, cx, strict byte 0001ch           ; 6b c9 1c
     mov di, si                                ; 89 f7
     add di, cx                                ; 01 cf
-    mov al, byte [es:di+022h]                 ; 26 8a 45 22
+    mov al, byte [es:di+026h]                 ; 26 8a 45 26
     cmp AL, strict byte 001h                  ; 3c 01
     db  00fh, 094h, 0c0h
     ; sete al                                   ; 0f 94 c0
@@ -6009,8 +6260,8 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     or AL, strict byte 070h                   ; 0c 70
     mov di, ax                                ; 89 c7
     mov ax, word [bp-01eh]                    ; 8b 46 e2
-    mov word [es:si+001f0h], ax               ; 26 89 84 f0 01
-    mov word [es:si+001f2h], dx               ; 26 89 94 f2 01
+    mov word [es:si+00234h], ax               ; 26 89 84 34 02
+    mov word [es:si+00236h], dx               ; 26 89 94 36 02
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     cwd                                       ; 99
     mov cx, strict word 00002h                ; b9 02 00
@@ -6018,33 +6269,33 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     or dl, 00eh                               ; 80 ca 0e
     mov ax, dx                                ; 89 d0
     sal ax, 004h                              ; c1 e0 04
-    mov byte [es:si+001f4h], al               ; 26 88 84 f4 01
-    mov byte [es:si+001f5h], 0cbh             ; 26 c6 84 f5 01 cb
+    mov byte [es:si+00238h], al               ; 26 88 84 38 02
+    mov byte [es:si+00239h], 0cbh             ; 26 c6 84 39 02 cb
     mov al, byte [bp-006h]                    ; 8a 46 fa
-    mov byte [es:si+001f6h], al               ; 26 88 84 f6 01
-    mov word [es:si+001f7h], strict word 00001h ; 26 c7 84 f7 01 01 00
-    mov byte [es:si+001f9h], 000h             ; 26 c6 84 f9 01 00
-    mov word [es:si+001fah], di               ; 26 89 bc fa 01
-    mov word [es:si+001fch], strict word 00000h ; 26 c7 84 fc 01 00 00
-    mov byte [es:si+001feh], 011h             ; 26 c6 84 fe 01 11
+    mov byte [es:si+0023ah], al               ; 26 88 84 3a 02
+    mov word [es:si+0023bh], strict word 00001h ; 26 c7 84 3b 02 01 00
+    mov byte [es:si+0023dh], 000h             ; 26 c6 84 3d 02 00
+    mov word [es:si+0023eh], di               ; 26 89 bc 3e 02
+    mov word [es:si+00240h], strict word 00000h ; 26 c7 84 40 02 00 00
+    mov byte [es:si+00242h], 011h             ; 26 c6 84 42 02 11
     xor cl, cl                                ; 30 c9
     xor ch, ch                                ; 30 ed
-    jmp short 046d0h                          ; eb 05
+    jmp short 049a5h                          ; eb 05
     cmp ch, 00fh                              ; 80 fd 0f
-    jnc short 046e3h                          ; 73 13
+    jnc short 049b8h                          ; 73 13
     movzx dx, ch                              ; 0f b6 d5
-    add dx, 00312h                            ; 81 c2 12 03
+    add dx, 00356h                            ; 81 c2 56 03
     mov ax, word [bp-01ah]                    ; 8b 46 e6
-    call 01650h                               ; e8 73 cf
+    call 01650h                               ; e8 9e cc
     add cl, al                                ; 00 c1
     db  0feh, 0c5h
     ; inc ch                                    ; fe c5
-    jmp short 046cbh                          ; eb e8
+    jmp short 049a0h                          ; eb e8
     neg cl                                    ; f6 d9
     mov es, [bp-00ch]                         ; 8e 46 f4
-    mov byte [es:si+001ffh], cl               ; 26 88 8c ff 01
+    mov byte [es:si+00243h], cl               ; 26 88 8c 43 02
     cmp word [bp-00eh], strict byte 00042h    ; 83 7e f2 42
-    jc near 04568h                            ; 0f 82 73 fe
+    jc near 0483dh                            ; 0f 82 73 fe
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     cwd                                       ; 99
     db  02bh, 0c2h
@@ -6054,15 +6305,15 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     imul ax, ax, strict byte 00006h           ; 6b c0 06
     mov es, [bp-00ch]                         ; 8e 46 f4
     add si, ax                                ; 01 c6
-    mov al, byte [es:si+001c0h]               ; 26 8a 84 c0 01
-    mov dx, word [es:si+001c2h]               ; 26 8b 94 c2 01
+    mov al, byte [es:si+00204h]               ; 26 8a 84 04 02
+    mov dx, word [es:si+00206h]               ; 26 8b 94 06 02
     mov es, [bp-00ah]                         ; 8e 46 f6
     mov word [es:bx], strict word 00042h      ; 26 c7 07 42 00
     db  066h, 026h, 0c7h, 047h, 01eh, 0ddh, 0beh, 024h, 000h
     ; mov dword [es:bx+01eh], strict dword 00024beddh ; 66 26 c7 47 1e dd be 24 00
     mov word [es:bx+022h], strict word 00000h ; 26 c7 47 22 00 00
     test al, al                               ; 84 c0
-    jne short 04736h                          ; 75 09
+    jne short 04a0bh                          ; 75 09
     db  066h, 026h, 0c7h, 047h, 024h, 049h, 053h, 041h, 020h
     ; mov dword [es:bx+024h], strict dword 020415349h ; 66 26 c7 47 24 49 53 41 20
     mov es, [bp-00ah]                         ; 8e 46 f6
@@ -6071,7 +6322,7 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     db  066h, 026h, 0c7h, 047h, 02ch, 020h, 020h, 020h, 020h
     ; mov dword [es:bx+02ch], strict dword 020202020h ; 66 26 c7 47 2c 20 20 20 20
     test al, al                               ; 84 c0
-    jne short 04762h                          ; 75 13
+    jne short 04a37h                          ; 75 13
     mov word [es:bx+030h], dx                 ; 26 89 57 30
     db  066h, 026h, 0c7h, 047h, 032h, 000h, 000h, 000h, 000h
     ; mov dword [es:bx+032h], strict dword 000000000h ; 66 26 c7 47 32 00 00 00 00
@@ -6086,32 +6337,32 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     mov word [es:bx+03eh], strict word 00000h ; 26 c7 47 3e 00 00
     xor al, al                                ; 30 c0
     mov AH, strict byte 01eh                  ; b4 1e
-    jmp short 0478ah                          ; eb 05
+    jmp short 04a5fh                          ; eb 05
     cmp ah, 040h                              ; 80 fc 40
-    jnc short 04799h                          ; 73 0f
+    jnc short 04a6eh                          ; 73 0f
     movzx si, ah                              ; 0f b6 f4
     mov es, [bp-00ah]                         ; 8e 46 f6
     add si, bx                                ; 01 de
     add al, byte [es:si]                      ; 26 02 04
     db  0feh, 0c4h
     ; inc ah                                    ; fe c4
-    jmp short 04785h                          ; eb ec
+    jmp short 04a5ah                          ; eb ec
     neg al                                    ; f6 d8
     mov es, [bp-00ah]                         ; 8e 46 f6
     mov byte [es:bx+041h], al                 ; 26 88 47 41
-    jmp near 04568h                           ; e9 c3 fd
+    jmp near 0483dh                           ; e9 c3 fd
     or bh, 006h                               ; 80 cf 06
     mov word [bp+018h], bx                    ; 89 5e 18
-    jmp short 047e5h                          ; eb 38
+    jmp short 04abah                          ; eb 38
     cmp bx, strict byte 00006h                ; 83 fb 06
-    je near 04568h                            ; 0f 84 b4 fd
+    je near 0483dh                            ; 0f 84 b4 fd
     cmp bx, strict byte 00001h                ; 83 fb 01
-    jc short 047c9h                           ; 72 10
-    jbe near 04568h                           ; 0f 86 ab fd
+    jc short 04a9eh                           ; 72 10
+    jbe near 0483dh                           ; 0f 86 ab fd
     cmp bx, strict byte 00003h                ; 83 fb 03
-    jc short 047c9h                           ; 72 07
+    jc short 04a9eh                           ; 72 07
     cmp bx, strict byte 00004h                ; 83 fb 04
-    jbe near 04568h                           ; 0f 86 9f fd
+    jbe near 0483dh                           ; 0f 86 9f fd
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor ah, ah                                ; 30 e4
     or ah, 001h                               ; 80 cc 01
@@ -6121,55 +6372,55 @@ _int13_cdrom:                                ; 0xf42a7 LB 0x562
     xor bh, bh                                ; 30 ff
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 79 ce
+    call 0165eh                               ; e8 a4 cb
     or byte [bp+01eh], 001h                   ; 80 4e 1e 01
-    jmp near 0457bh                           ; e9 8f fd
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 04850h                           ; e9 8f fd
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 3a d1
+    call 01931h                               ; e8 65 ce
     mov ax, word [bp+018h]                    ; 8b 46 18
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 003bfh                               ; 68 bf 03
-    push 00313h                               ; 68 13 03
+    push 003dfh                               ; 68 df 03
+    push 00333h                               ; 68 33 03
     push strict byte 00004h                   ; 6a 04
-    jmp near 043d9h                           ; e9 d0 fb
-print_boot_device_:                          ; 0xf4809 LB 0x4b
+    jmp near 046aeh                           ; e9 d0 fb
+print_boot_device_:                          ; 0xf4ade LB 0x4b
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push cx                                   ; 51
     test al, al                               ; 84 c0
-    je short 04816h                           ; 74 05
+    je short 04aebh                           ; 74 05
     mov dx, strict word 00002h                ; ba 02 00
-    jmp short 04830h                          ; eb 1a
+    jmp short 04b05h                          ; eb 1a
     test dl, dl                               ; 84 d2
-    je short 0481fh                           ; 74 05
+    je short 04af4h                           ; 74 05
     mov dx, strict word 00003h                ; ba 03 00
-    jmp short 04830h                          ; eb 11
+    jmp short 04b05h                          ; eb 11
     test bl, 080h                             ; f6 c3 80
-    jne short 04828h                          ; 75 04
+    jne short 04afdh                          ; 75 04
     xor dh, dh                                ; 30 f6
-    jmp short 04830h                          ; eb 08
+    jmp short 04b05h                          ; eb 08
     test bl, 080h                             ; f6 c3 80
-    je short 0484eh                           ; 74 21
+    je short 04b23h                           ; 74 21
     mov dx, strict word 00001h                ; ba 01 00
-    mov bx, 00da2h                            ; bb a2 0d
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 f6 d0
+    call 01931h                               ; e8 21 ce
     imul dx, dx, strict byte 0000ah           ; 6b d2 0a
-    add dx, 00dc8h                            ; 81 c2 c8 0d
+    add dx, 00dc6h                            ; 81 c2 c6 0d
     push dx                                   ; 52
-    push 00474h                               ; 68 74 04
+    push 00494h                               ; 68 94 04
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 27 d1
+    call 01972h                               ; e8 52 ce
     add sp, strict byte 00006h                ; 83 c4 06
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
-print_boot_failure_:                         ; 0xf4854 LB 0x93
+print_boot_failure_:                         ; 0xf4b29 LB 0x93
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -6178,73 +6429,73 @@ print_boot_failure_:                         ; 0xf4854 LB 0x93
     and ah, 07fh                              ; 80 e4 7f
     movzx si, ah                              ; 0f b6 f4
     test al, al                               ; 84 c0
-    je short 04881h                           ; 74 1b
-    mov bx, 00da2h                            ; bb a2 0d
+    je short 04b56h                           ; 74 1b
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 c0 d0
-    push 00ddch                               ; 68 dc 0d
-    push 00488h                               ; 68 88 04
+    call 01931h                               ; e8 eb cd
+    push 00ddah                               ; 68 da 0d
+    push 004a8h                               ; 68 a8 04
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 f6 d0
+    call 01972h                               ; e8 21 ce
     add sp, strict byte 00006h                ; 83 c4 06
-    jmp short 048c5h                          ; eb 44
+    jmp short 04b9ah                          ; eb 44
     test dl, dl                               ; 84 d2
-    je short 04895h                           ; 74 10
-    mov bx, 00da2h                            ; bb a2 0d
+    je short 04b6ah                           ; 74 10
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 a1 d0
-    push 00de6h                               ; 68 e6 0d
-    jmp short 04874h                          ; eb df
+    call 01931h                               ; e8 cc cd
+    push 00de4h                               ; 68 e4 0d
+    jmp short 04b49h                          ; eb df
     test bl, 080h                             ; f6 c3 80
-    je short 048abh                           ; 74 11
-    mov bx, 00da2h                            ; bb a2 0d
+    je short 04b80h                           ; 74 11
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 8c d0
+    call 01931h                               ; e8 b7 cd
     push si                                   ; 56
-    push 00dd2h                               ; 68 d2 0d
-    jmp short 048bah                          ; eb 0f
-    mov bx, 00da2h                            ; bb a2 0d
+    push 00dd0h                               ; 68 d0 0d
+    jmp short 04b8fh                          ; eb 0f
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 7b d0
+    call 01931h                               ; e8 a6 cd
     push si                                   ; 56
-    push 00dc8h                               ; 68 c8 0d
-    push 0049dh                               ; 68 9d 04
+    push 00dc6h                               ; 68 c6 0d
+    push 004bdh                               ; 68 bd 04
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 b0 d0
+    call 01972h                               ; e8 db cd
     add sp, strict byte 00008h                ; 83 c4 08
     cmp byte [bp+004h], 001h                  ; 80 7e 04 01
-    jne short 048dfh                          ; 75 14
+    jne short 04bb4h                          ; 75 14
     test dh, dh                               ; 84 f6
-    jne short 048d4h                          ; 75 05
-    push 004b5h                               ; 68 b5 04
-    jmp short 048d7h                          ; eb 03
-    push 004dfh                               ; 68 df 04
+    jne short 04ba9h                          ; 75 05
+    push 004d5h                               ; 68 d5 04
+    jmp short 04bach                          ; eb 03
+    push 004ffh                               ; 68 ff 04
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 96 d0
+    call 01972h                               ; e8 c1 cd
     add sp, strict byte 00004h                ; 83 c4 04
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00002h                               ; c2 02 00
-print_cdromboot_failure_:                    ; 0xf48e7 LB 0x27
+print_cdromboot_failure_:                    ; 0xf4bbc LB 0x27
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
     push cx                                   ; 51
     push dx                                   ; 52
     mov dx, ax                                ; 89 c2
-    mov bx, 00da2h                            ; bb a2 0d
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 37 d0
+    call 01931h                               ; e8 62 cd
     push dx                                   ; 52
-    push 00514h                               ; 68 14 05
+    push 00534h                               ; 68 34 05
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 6f d0
+    call 01972h                               ; e8 9a cd
     add sp, strict byte 00006h                ; 83 c4 06
     lea sp, [bp-006h]                         ; 8d 66 fa
     pop dx                                    ; 5a
@@ -6252,7 +6503,7 @@ print_cdromboot_failure_:                    ; 0xf48e7 LB 0x27
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-_int19_function:                             ; 0xf490e LB 0x256
+_int19_function:                             ; 0xf4be3 LB 0x256
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -6260,160 +6511,160 @@ _int19_function:                             ; 0xf490e LB 0x256
     sub sp, strict byte 0000eh                ; 83 ec 0e
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 4d cd
+    call 0166ch                               ; e8 78 ca
     mov bx, ax                                ; 89 c3
     mov word [bp-00eh], ax                    ; 89 46 f2
     mov byte [bp-008h], 000h                  ; c6 46 f8 00
     mov ax, strict word 0003dh                ; b8 3d 00
-    call 016ach                               ; e8 7e cd
+    call 016ach                               ; e8 a9 ca
     movzx si, al                              ; 0f b6 f0
     mov ax, strict word 00038h                ; b8 38 00
-    call 016ach                               ; e8 75 cd
+    call 016ach                               ; e8 a0 ca
     and AL, strict byte 0f0h                  ; 24 f0
     xor ah, ah                                ; 30 e4
     sal ax, 004h                              ; c1 e0 04
     or si, ax                                 ; 09 c6
     mov ax, strict word 0003ch                ; b8 3c 00
-    call 016ach                               ; e8 66 cd
+    call 016ach                               ; e8 91 ca
     and AL, strict byte 00fh                  ; 24 0f
     xor ah, ah                                ; 30 e4
     sal ax, 00ch                              ; c1 e0 0c
     or si, ax                                 ; 09 c6
-    mov dx, 00339h                            ; ba 39 03
+    mov dx, 0037dh                            ; ba 7d 03
     mov ax, bx                                ; 89 d8
-    call 01650h                               ; e8 f9 cc
+    call 01650h                               ; e8 24 ca
     test al, al                               ; 84 c0
-    je short 04966h                           ; 74 0b
-    mov dx, 00339h                            ; ba 39 03
+    je short 04c3bh                           ; 74 0b
+    mov dx, 0037dh                            ; ba 7d 03
     mov ax, bx                                ; 89 d8
-    call 01650h                               ; e8 ed cc
+    call 01650h                               ; e8 18 ca
     movzx si, al                              ; 0f b6 f0
     cmp byte [bp+004h], 001h                  ; 80 7e 04 01
-    jne short 0497ch                          ; 75 10
+    jne short 04c51h                          ; 75 10
     mov ax, strict word 0003ch                ; b8 3c 00
-    call 016ach                               ; e8 3a cd
+    call 016ach                               ; e8 65 ca
     and AL, strict byte 0f0h                  ; 24 f0
     xor ah, ah                                ; 30 e4
     sar ax, 004h                              ; c1 f8 04
-    call 0781eh                               ; e8 a2 2e
+    call 07b6bh                               ; e8 1a 2f
     cmp byte [bp+004h], 002h                  ; 80 7e 04 02
-    jne short 04985h                          ; 75 03
+    jne short 04c5ah                          ; 75 03
     shr si, 004h                              ; c1 ee 04
     cmp byte [bp+004h], 003h                  ; 80 7e 04 03
-    jne short 0498eh                          ; 75 03
+    jne short 04c63h                          ; 75 03
     shr si, 008h                              ; c1 ee 08
     cmp byte [bp+004h], 004h                  ; 80 7e 04 04
-    jne short 04997h                          ; 75 03
+    jne short 04c6ch                          ; 75 03
     shr si, 00ch                              ; c1 ee 0c
     cmp si, strict byte 00010h                ; 83 fe 10
-    jnc short 049a0h                          ; 73 04
+    jnc short 04c75h                          ; 73 04
     mov byte [bp-008h], 001h                  ; c6 46 f8 01
     xor al, al                                ; 30 c0
     mov byte [bp-006h], al                    ; 88 46 fa
     mov byte [bp-00ah], al                    ; 88 46 f6
     mov byte [bp-00ch], al                    ; 88 46 f4
-    mov bx, 00da2h                            ; bb a2 0d
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 7b cf
+    call 01931h                               ; e8 a6 cc
     push si                                   ; 56
     movzx ax, byte [bp+004h]                  ; 0f b6 46 04
     push ax                                   ; 50
-    push 00534h                               ; 68 34 05
+    push 00554h                               ; 68 54 05
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 ae cf
+    call 01972h                               ; e8 d9 cc
     add sp, strict byte 00008h                ; 83 c4 08
     and si, strict byte 0000fh                ; 83 e6 0f
     cmp si, strict byte 00002h                ; 83 fe 02
-    jc short 049ddh                           ; 72 0e
-    jbe short 049ech                          ; 76 1b
+    jc short 04cb2h                           ; 72 0e
+    jbe short 04cc1h                          ; 76 1b
     cmp si, strict byte 00004h                ; 83 fe 04
-    je short 04a0ah                           ; 74 34
+    je short 04cdfh                           ; 74 34
     cmp si, strict byte 00003h                ; 83 fe 03
-    je short 04a00h                           ; 74 25
-    jmp short 04a37h                          ; eb 5a
+    je short 04cd5h                           ; 74 25
+    jmp short 04d0ch                          ; eb 5a
     cmp si, strict byte 00001h                ; 83 fe 01
-    jne short 04a37h                          ; 75 55
+    jne short 04d0ch                          ; 75 55
     xor al, al                                ; 30 c0
     mov byte [bp-006h], al                    ; 88 46 fa
     mov byte [bp-00ah], al                    ; 88 46 f6
-    jmp short 04a4fh                          ; eb 63
-    mov dx, 00338h                            ; ba 38 03
+    jmp short 04d24h                          ; eb 63
+    mov dx, 0037ch                            ; ba 7c 03
     mov ax, word [bp-00eh]                    ; 8b 46 f2
-    call 01650h                               ; e8 5b cc
+    call 01650h                               ; e8 86 c9
     add AL, strict byte 080h                  ; 04 80
     mov byte [bp-006h], al                    ; 88 46 fa
     mov byte [bp-00ah], 000h                  ; c6 46 f6 00
-    jmp short 04a4fh                          ; eb 4f
+    jmp short 04d24h                          ; eb 4f
     mov byte [bp-006h], 000h                  ; c6 46 fa 00
     mov byte [bp-00ah], 001h                  ; c6 46 f6 01
-    jmp short 04a14h                          ; eb 0a
+    jmp short 04ce9h                          ; eb 0a
     mov byte [bp-00ch], 001h                  ; c6 46 f4 01
     cmp byte [bp-00ah], 000h                  ; 80 7e f6 00
-    je short 04a4fh                           ; 74 3b
-    call 03a5dh                               ; e8 46 f0
+    je short 04d24h                           ; 74 3b
+    call 03d32h                               ; e8 46 f0
     mov bx, ax                                ; 89 c3
     test AL, strict byte 0ffh                 ; a8 ff
-    je short 04a3eh                           ; 74 21
-    call 048e7h                               ; e8 c7 fe
+    je short 04d13h                           ; 74 21
+    call 04bbch                               ; e8 c7 fe
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
     mov cx, strict word 00001h                ; b9 01 00
-    call 04854h                               ; e8 1d fe
+    call 04b29h                               ; e8 1d fe
     xor ax, ax                                ; 31 c0
     xor dx, dx                                ; 31 d2
-    jmp near 04b5dh                           ; e9 1f 01
-    mov dx, 0032eh                            ; ba 2e 03
+    jmp near 04e32h                           ; e9 1f 01
+    mov dx, 00372h                            ; ba 72 03
     mov ax, word [bp-00eh]                    ; 8b 46 f2
-    call 0166ch                               ; e8 25 cc
+    call 0166ch                               ; e8 50 c9
     mov di, ax                                ; 89 c7
     shr bx, 008h                              ; c1 eb 08
     mov byte [bp-006h], bl                    ; 88 5e fa
     cmp byte [bp-00ch], 001h                  ; 80 7e f4 01
-    jne near 04acbh                           ; 0f 85 74 00
+    jne near 04da0h                           ; 0f 85 74 00
     xor si, si                                ; 31 f6
     mov ax, 0e200h                            ; b8 00 e2
     mov es, ax                                ; 8e c0
     cmp word [es:si], 0aa55h                  ; 26 81 3c 55 aa
-    jne short 04a20h                          ; 75 bb
+    jne short 04cf5h                          ; 75 bb
     mov cx, ax                                ; 89 c1
     mov si, word [es:si+01ah]                 ; 26 8b 74 1a
     cmp word [es:si+002h], 0506eh             ; 26 81 7c 02 6e 50
-    jne short 04a20h                          ; 75 ad
+    jne short 04cf5h                          ; 75 ad
     cmp word [es:si], 05024h                  ; 26 81 3c 24 50
-    jne short 04a20h                          ; 75 a6
+    jne short 04cf5h                          ; 75 a6
     mov di, word [es:si+00eh]                 ; 26 8b 7c 0e
     mov dx, word [es:di]                      ; 26 8b 15
     mov ax, word [es:di+002h]                 ; 26 8b 45 02
     cmp ax, 06568h                            ; 3d 68 65
-    jne short 04aa9h                          ; 75 1f
+    jne short 04d7eh                          ; 75 1f
     cmp dx, 07445h                            ; 81 fa 45 74
-    jne short 04aa9h                          ; 75 19
+    jne short 04d7eh                          ; 75 19
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
-    call 04809h                               ; e8 6a fd
+    call 04adeh                               ; e8 6a fd
     mov word [bp-012h], strict word 00006h    ; c7 46 ee 06 00
     mov word [bp-010h], cx                    ; 89 4e f0
-    jmp short 04ac5h                          ; eb 1c
+    jmp short 04d9ah                          ; eb 1c
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
-    call 04809h                               ; e8 51 fd
+    call 04adeh                               ; e8 51 fd
     sti                                       ; fb
     mov word [bp-010h], cx                    ; 89 4e f0
     mov es, cx                                ; 8e c1
     mov ax, word [es:si+01ah]                 ; 26 8b 44 1a
     mov word [bp-012h], ax                    ; 89 46 ee
     call far [bp-012h]                        ; ff 5e ee
-    jmp near 04a20h                           ; e9 55 ff
+    jmp near 04cf5h                           ; e9 55 ff
     cmp byte [bp-00ah], 000h                  ; 80 7e f6 00
-    jne short 04af7h                          ; 75 26
+    jne short 04dcch                          ; 75 26
     cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    jne short 04af7h                          ; 75 20
+    jne short 04dcch                          ; 75 20
     mov di, 007c0h                            ; bf c0 07
     mov es, di                                ; 8e c7
     mov dl, byte [bp-006h]                    ; 8a 56 fa
@@ -6426,40 +6677,40 @@ _int19_function:                             ; 0xf490e LB 0x256
     mov ax, strict word 00000h                ; b8 00 00
     sbb ax, strict byte 00000h                ; 83 d8 00
     test ax, ax                               ; 85 c0
-    jne near 04a20h                           ; 0f 85 29 ff
+    jne near 04cf5h                           ; 0f 85 29 ff
     cmp byte [bp-006h], 000h                  ; 80 7e fa 00
     db  00fh, 094h, 0c1h
     ; sete cl                                   ; 0f 94 c1
     cmp byte [bp-00ah], 000h                  ; 80 7e f6 00
-    je short 04b06h                           ; 74 02
+    je short 04ddbh                           ; 74 02
     mov CL, strict byte 001h                  ; b1 01
     xor dx, dx                                ; 31 d2
     mov ax, di                                ; 89 f8
-    call 0166ch                               ; e8 5f cb
+    call 0166ch                               ; e8 8a c8
     mov bx, ax                                ; 89 c3
     mov dx, strict word 00002h                ; ba 02 00
     mov ax, di                                ; 89 f8
-    call 0166ch                               ; e8 55 cb
+    call 0166ch                               ; e8 80 c8
     cmp bx, ax                                ; 39 c3
-    je short 04b2ch                           ; 74 11
+    je short 04e01h                           ; 74 11
     test cl, cl                               ; 84 c9
-    jne short 04b42h                          ; 75 23
+    jne short 04e17h                          ; 75 23
     mov dx, 001feh                            ; ba fe 01
     mov ax, di                                ; 89 f8
-    call 0166ch                               ; e8 45 cb
+    call 0166ch                               ; e8 70 c8
     cmp ax, 0aa55h                            ; 3d 55 aa
-    je short 04b42h                           ; 74 16
+    je short 04e17h                           ; 74 16
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
     xor cx, cx                                ; 31 c9
-    jmp near 04a34h                           ; e9 f2 fe
+    jmp near 04d09h                           ; e9 f2 fe
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
-    call 04809h                               ; e8 b8 fc
+    call 04adeh                               ; e8 b8 fc
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     xor dx, dx                                ; 31 d2
     xor ax, ax                                ; 31 c0
@@ -6470,18 +6721,18 @@ _int19_function:                             ; 0xf490e LB 0x256
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-keyboard_panic_:                             ; 0xf4b64 LB 0x13
+keyboard_panic_:                             ; 0xf4e39 LB 0x13
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push ax                                   ; 50
-    push 00554h                               ; 68 54 05
+    push 00574h                               ; 68 74 05
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 02 ce
+    call 01972h                               ; e8 2d cb
     add sp, strict byte 00006h                ; 83 c4 06
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
-_keyboard_init:                              ; 0xf4b77 LB 0x26a
+_keyboard_init:                              ; 0xf4e4c LB 0x26a
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     mov AL, strict byte 0aah                  ; b0 aa
@@ -6493,44 +6744,44 @@ _keyboard_init:                              ; 0xf4b77 LB 0x26a
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 04b9ah                           ; 74 0d
+    je short 04e6fh                           ; 74 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04b9ah                          ; 76 08
+    jbe short 04e6fh                          ; 76 08
     xor al, al                                ; 30 c0
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04b83h                          ; eb e9
+    jmp short 04e58h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04ba3h                          ; 75 05
+    jne short 04e78h                          ; 75 05
     xor ax, ax                                ; 31 c0
-    call 04b64h                               ; e8 c1 ff
+    call 04e39h                               ; e8 c1 ff
     mov bx, strict word 0ffffh                ; bb ff ff
     mov dx, strict word 00064h                ; ba 64 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 04bbdh                          ; 75 0d
+    jne short 04e92h                          ; 75 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04bbdh                          ; 76 08
+    jbe short 04e92h                          ; 76 08
     mov AL, strict byte 001h                  ; b0 01
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04ba6h                          ; eb e9
+    jmp short 04e7bh                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04bc7h                          ; 75 06
+    jne short 04e9ch                          ; 75 06
     mov ax, strict word 00001h                ; b8 01 00
-    call 04b64h                               ; e8 9d ff
+    call 04e39h                               ; e8 9d ff
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, strict word 00055h                ; 3d 55 00
-    je short 04bd8h                           ; 74 06
+    je short 04eadh                           ; 74 06
     mov ax, 003dfh                            ; b8 df 03
-    call 04b64h                               ; e8 8c ff
+    call 04e39h                               ; e8 8c ff
     mov AL, strict byte 0abh                  ; b0 ab
     mov dx, strict word 00064h                ; ba 64 00
     out DX, AL                                ; ee
@@ -6540,44 +6791,44 @@ _keyboard_init:                              ; 0xf4b77 LB 0x26a
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 04bf8h                           ; 74 0d
+    je short 04ecdh                           ; 74 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04bf8h                          ; 76 08
+    jbe short 04ecdh                          ; 76 08
     mov AL, strict byte 010h                  ; b0 10
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04be1h                          ; eb e9
+    jmp short 04eb6h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04c02h                          ; 75 06
+    jne short 04ed7h                          ; 75 06
     mov ax, strict word 0000ah                ; b8 0a 00
-    call 04b64h                               ; e8 62 ff
+    call 04e39h                               ; e8 62 ff
     mov bx, strict word 0ffffh                ; bb ff ff
     mov dx, strict word 00064h                ; ba 64 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 04c1ch                          ; 75 0d
+    jne short 04ef1h                          ; 75 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04c1ch                          ; 76 08
+    jbe short 04ef1h                          ; 76 08
     mov AL, strict byte 011h                  ; b0 11
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04c05h                          ; eb e9
+    jmp short 04edah                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04c26h                          ; 75 06
+    jne short 04efbh                          ; 75 06
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 04b64h                               ; e8 3e ff
+    call 04e39h                               ; e8 3e ff
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test ax, ax                               ; 85 c0
-    je short 04c36h                           ; 74 06
+    je short 04f0bh                           ; 74 06
     mov ax, 003e0h                            ; b8 e0 03
-    call 04b64h                               ; e8 2e ff
+    call 04e39h                               ; e8 2e ff
     mov AL, strict byte 0ffh                  ; b0 ff
     mov dx, strict word 00060h                ; ba 60 00
     out DX, AL                                ; ee
@@ -6587,67 +6838,67 @@ _keyboard_init:                              ; 0xf4b77 LB 0x26a
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 04c56h                           ; 74 0d
+    je short 04f2bh                           ; 74 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04c56h                          ; 76 08
+    jbe short 04f2bh                          ; 76 08
     mov AL, strict byte 020h                  ; b0 20
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04c3fh                          ; eb e9
+    jmp short 04f14h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04c60h                          ; 75 06
+    jne short 04f35h                          ; 75 06
     mov ax, strict word 00014h                ; b8 14 00
-    call 04b64h                               ; e8 04 ff
+    call 04e39h                               ; e8 04 ff
     mov bx, strict word 0ffffh                ; bb ff ff
     mov dx, strict word 00064h                ; ba 64 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 04c7ah                          ; 75 0d
+    jne short 04f4fh                          ; 75 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04c7ah                          ; 76 08
+    jbe short 04f4fh                          ; 76 08
     mov AL, strict byte 021h                  ; b0 21
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04c63h                          ; eb e9
+    jmp short 04f38h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04c84h                          ; 75 06
+    jne short 04f59h                          ; 75 06
     mov ax, strict word 00015h                ; b8 15 00
-    call 04b64h                               ; e8 e0 fe
+    call 04e39h                               ; e8 e0 fe
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, 000fah                            ; 3d fa 00
-    je short 04c95h                           ; 74 06
+    je short 04f6ah                           ; 74 06
     mov ax, 003e1h                            ; b8 e1 03
-    call 04b64h                               ; e8 cf fe
+    call 04e39h                               ; e8 cf fe
     mov dx, strict word 00064h                ; ba 64 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 04ca7h                          ; 75 08
+    jne short 04f7ch                          ; 75 08
     mov AL, strict byte 031h                  ; b0 31
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04c95h                          ; eb ee
+    jmp short 04f6ah                          ; eb ee
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, 000aah                            ; 3d aa 00
-    je short 04cc0h                           ; 74 0e
+    je short 04f95h                           ; 74 0e
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, 000aah                            ; 3d aa 00
-    je short 04cc0h                           ; 74 06
+    je short 04f95h                           ; 74 06
     mov ax, 003e2h                            ; b8 e2 03
-    call 04b64h                               ; e8 a4 fe
+    call 04e39h                               ; e8 a4 fe
     mov AL, strict byte 0f5h                  ; b0 f5
     mov dx, strict word 00060h                ; ba 60 00
     out DX, AL                                ; ee
@@ -6657,44 +6908,44 @@ _keyboard_init:                              ; 0xf4b77 LB 0x26a
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 04ce0h                           ; 74 0d
+    je short 04fb5h                           ; 74 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04ce0h                          ; 76 08
+    jbe short 04fb5h                          ; 76 08
     mov AL, strict byte 040h                  ; b0 40
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04cc9h                          ; eb e9
+    jmp short 04f9eh                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04ceah                          ; 75 06
+    jne short 04fbfh                          ; 75 06
     mov ax, strict word 00028h                ; b8 28 00
-    call 04b64h                               ; e8 7a fe
+    call 04e39h                               ; e8 7a fe
     mov bx, strict word 0ffffh                ; bb ff ff
     mov dx, strict word 00064h                ; ba 64 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 04d04h                          ; 75 0d
+    jne short 04fd9h                          ; 75 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04d04h                          ; 76 08
+    jbe short 04fd9h                          ; 76 08
     mov AL, strict byte 041h                  ; b0 41
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04cedh                          ; eb e9
+    jmp short 04fc2h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04d0eh                          ; 75 06
+    jne short 04fe3h                          ; 75 06
     mov ax, strict word 00029h                ; b8 29 00
-    call 04b64h                               ; e8 56 fe
+    call 04e39h                               ; e8 56 fe
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, 000fah                            ; 3d fa 00
-    je short 04d1fh                           ; 74 06
+    je short 04ff4h                           ; 74 06
     mov ax, 003e3h                            ; b8 e3 03
-    call 04b64h                               ; e8 45 fe
+    call 04e39h                               ; e8 45 fe
     mov AL, strict byte 060h                  ; b0 60
     mov dx, strict word 00064h                ; ba 64 00
     out DX, AL                                ; ee
@@ -6704,18 +6955,18 @@ _keyboard_init:                              ; 0xf4b77 LB 0x26a
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 04d3fh                           ; 74 0d
+    je short 05014h                           ; 74 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04d3fh                          ; 76 08
+    jbe short 05014h                          ; 76 08
     mov AL, strict byte 050h                  ; b0 50
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04d28h                          ; eb e9
+    jmp short 04ffdh                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04d49h                          ; 75 06
+    jne short 0501eh                          ; 75 06
     mov ax, strict word 00032h                ; b8 32 00
-    call 04b64h                               ; e8 1b fe
+    call 04e39h                               ; e8 1b fe
     mov AL, strict byte 065h                  ; b0 65
     mov dx, strict word 00060h                ; ba 60 00
     out DX, AL                                ; ee
@@ -6725,18 +6976,18 @@ _keyboard_init:                              ; 0xf4b77 LB 0x26a
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 04d69h                           ; 74 0d
+    je short 0503eh                           ; 74 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04d69h                          ; 76 08
+    jbe short 0503eh                          ; 76 08
     mov AL, strict byte 060h                  ; b0 60
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04d52h                          ; eb e9
+    jmp short 05027h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04d73h                          ; 75 06
+    jne short 05048h                          ; 75 06
     mov ax, strict word 0003ch                ; b8 3c 00
-    call 04b64h                               ; e8 f1 fd
+    call 04e39h                               ; e8 f1 fd
     mov AL, strict byte 0f4h                  ; b0 f4
     mov dx, strict word 00060h                ; ba 60 00
     out DX, AL                                ; ee
@@ -6746,53 +6997,53 @@ _keyboard_init:                              ; 0xf4b77 LB 0x26a
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 04d93h                           ; 74 0d
+    je short 05068h                           ; 74 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04d93h                          ; 76 08
+    jbe short 05068h                          ; 76 08
     mov AL, strict byte 070h                  ; b0 70
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04d7ch                          ; eb e9
+    jmp short 05051h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04d9dh                          ; 75 06
+    jne short 05072h                          ; 75 06
     mov ax, strict word 00046h                ; b8 46 00
-    call 04b64h                               ; e8 c7 fd
+    call 04e39h                               ; e8 c7 fd
     mov bx, strict word 0ffffh                ; bb ff ff
     mov dx, strict word 00064h                ; ba 64 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 04db7h                          ; 75 0d
+    jne short 0508ch                          ; 75 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 04db7h                          ; 76 08
+    jbe short 0508ch                          ; 76 08
     mov AL, strict byte 071h                  ; b0 71
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 04da0h                          ; eb e9
+    jmp short 05075h                          ; eb e9
     test bx, bx                               ; 85 db
-    jne short 04dc1h                          ; 75 06
+    jne short 05096h                          ; 75 06
     mov ax, strict word 00046h                ; b8 46 00
-    call 04b64h                               ; e8 a3 fd
+    call 04e39h                               ; e8 a3 fd
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, 000fah                            ; 3d fa 00
-    je short 04dd2h                           ; 74 06
+    je short 050a7h                           ; 74 06
     mov ax, 003e4h                            ; b8 e4 03
-    call 04b64h                               ; e8 92 fd
+    call 04e39h                               ; e8 92 fd
     mov AL, strict byte 0a8h                  ; b0 a8
     mov dx, strict word 00064h                ; ba 64 00
     out DX, AL                                ; ee
     xor ax, ax                                ; 31 c0
-    call 060b6h                               ; e8 d9 12
+    call 06403h                               ; e8 51 13
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
-enqueue_key_:                                ; 0xf4de1 LB 0x93
+enqueue_key_:                                ; 0xf50b6 LB 0x93
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -6804,32 +7055,32 @@ enqueue_key_:                                ; 0xf4de1 LB 0x93
     mov bl, dl                                ; 88 d3
     mov dx, strict word 0001ah                ; ba 1a 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 75 c8
+    call 0166ch                               ; e8 a0 c5
     mov di, ax                                ; 89 c7
     mov dx, strict word 0001ch                ; ba 1c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 6a c8
+    call 0166ch                               ; e8 95 c5
     mov si, ax                                ; 89 c6
     lea cx, [si+002h]                         ; 8d 4c 02
     cmp cx, strict byte 0003eh                ; 83 f9 3e
-    jc short 04e0fh                           ; 72 03
+    jc short 050e4h                           ; 72 03
     mov cx, strict word 0001eh                ; b9 1e 00
     cmp cx, di                                ; 39 f9
-    jne short 04e17h                          ; 75 04
+    jne short 050ech                          ; 75 04
     xor ax, ax                                ; 31 c0
-    jmp short 04e3ch                          ; eb 25
+    jmp short 05111h                          ; eb 25
     xor bh, bh                                ; 30 ff
     mov dx, si                                ; 89 f2
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 3d c8
+    call 0165eh                               ; e8 68 c5
     movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
     lea dx, [si+001h]                         ; 8d 54 01
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 30 c8
+    call 0165eh                               ; e8 5b c5
     mov bx, cx                                ; 89 cb
     mov dx, strict word 0001ch                ; ba 1c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0167ah                               ; e8 41 c8
+    call 0167ah                               ; e8 6c c5
     mov ax, strict word 00001h                ; b8 01 00
     lea sp, [bp-008h]                         ; 8d 66 f8
     pop di                                    ; 5f
@@ -6847,25 +7098,24 @@ enqueue_key_:                                ; 0xf4de1 LB 0x93
     inc bp                                    ; 45
     cmp bh, byte [bx+si]                      ; 3a 38
     sub bl, byte [ss:di]                      ; 36 2a 1d
-    fist word [bx+si+045h]                    ; df 50 45
-    dec di                                    ; 4f
-    or ax, 00d4fh                             ; 0d 4f 0d
-    dec di                                    ; 4f
-    ror word [bx-01dh], CL                    ; d3 4f e3
-    dec si                                    ; 4e
+    mov AH, strict byte 053h                  ; b4 53
+    sbb dl, byte [bp+si-01eh]                 ; 1a 52 e2
     push cx                                   ; 51
-    push ax                                   ; 50
-    mov word [0c550h], ax                     ; a3 50 c5
-    push ax                                   ; 50
-    mov [bx+00dh], cs                         ; 8c 4f 0d
-    dec di                                    ; 4f
-    or ax, 0124fh                             ; 0d 4f 12
-    push ax                                   ; 50
-    dec word [bp-07ch]                        ; ff 4e 84
-    push ax                                   ; 50
-    db  0beh
-    push ax                                   ; 50
-_int09_function:                             ; 0xf4e74 LB 0x3c7
+    loop 05182h                               ; e2 51
+    test AL, strict byte 052h                 ; a8 52
+    mov ax, 02651h                            ; b8 51 26
+    push bx                                   ; 53
+    js short 0518ch                           ; 78 53
+    call far 0e252h:06153h                    ; 9a 53 61 52 e2
+    push cx                                   ; 51
+    loop 05192h                               ; e2 51
+    out 052h, ax                              ; e7 52
+    aam 051h                                  ; d4 51
+    pop cx                                    ; 59
+    push bx                                   ; 53
+    xchg bx, ax                               ; 93
+    push bx                                   ; 53
+_int09_function:                             ; 0xf5149 LB 0x3c7
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push di                                   ; 57
@@ -6873,56 +7123,56 @@ _int09_function:                             ; 0xf4e74 LB 0x3c7
     mov al, byte [bp+014h]                    ; 8a 46 14
     mov byte [bp-008h], al                    ; 88 46 f8
     test al, al                               ; 84 c0
-    jne short 04e9eh                          ; 75 19
-    mov bx, 00da2h                            ; bb a2 0d
+    jne short 05173h                          ; 75 19
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 a1 ca
-    push 00567h                               ; 68 67 05
+    call 01931h                               ; e8 cc c7
+    push 00587h                               ; 68 87 05
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 da ca
+    call 01972h                               ; e8 05 c8
     add sp, strict byte 00004h                ; 83 c4 04
-    jmp near 05235h                           ; e9 97 03
+    jmp near 0550ah                           ; e9 97 03
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 a9 c7
+    call 01650h                               ; e8 d4 c4
     mov byte [bp-010h], al                    ; 88 46 f0
     mov byte [bp-00ah], al                    ; 88 46 f6
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 9a c7
+    call 01650h                               ; e8 c5 c4
     mov byte [bp-00eh], al                    ; 88 46 f2
     mov byte [bp-004h], al                    ; 88 46 fc
     mov dx, 00096h                            ; ba 96 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 8b c7
+    call 01650h                               ; e8 b6 c4
     mov byte [bp-006h], al                    ; 88 46 fa
     mov byte [bp-00ch], al                    ; 88 46 f4
     mov al, byte [bp-008h]                    ; 8a 46 f8
     push CS                                   ; 0e
     pop ES                                    ; 07
     mov cx, strict word 00010h                ; b9 10 00
-    mov di, 04e45h                            ; bf 45 4e
+    mov di, 0511ah                            ; bf 1a 51
     repne scasb                               ; f2 ae
     sal cx, 1                                 ; d1 e1
     mov di, cx                                ; 89 cf
-    mov ax, word [cs:di+04e54h]               ; 2e 8b 85 54 4e
+    mov ax, word [cs:di+05129h]               ; 2e 8b 85 29 51
     jmp ax                                    ; ff e0
     xor byte [bp-00ah], 040h                  ; 80 76 f6 40
     movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 6a c7
+    call 0165eh                               ; e8 95 c4
     or byte [bp-004h], 040h                   ; 80 4e fc 40
     movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
-    jmp near 05097h                           ; e9 98 01
+    jmp near 0536ch                           ; e9 98 01
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     and AL, strict byte 0bfh                  ; 24 bf
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
-    jmp near 05097h                           ; e9 8a 01
+    jmp near 0536ch                           ; e9 8a 01
     test byte [bp-00ch], 002h                 ; f6 46 f4 02
-    jne near 05217h                           ; 0f 85 02 03
+    jne near 054ech                           ; 0f 85 02 03
     mov al, byte [bp-008h]                    ; 8a 46 f8
     and AL, strict byte 07fh                  ; 24 7f
     cmp AL, strict byte 02ah                  ; 3c 2a
@@ -6931,285 +7181,285 @@ _int09_function:                             ; 0xf4e74 LB 0x3c7
     movzx dx, al                              ; 0f b6 d0
     inc dx                                    ; 42
     test byte [bp-008h], 080h                 ; f6 46 f8 80
-    je short 04f32h                           ; 74 09
+    je short 05207h                           ; 74 09
     mov al, dl                                ; 88 d0
     not al                                    ; f6 d0
     and byte [bp-00ah], al                    ; 20 46 f6
-    jmp short 04f35h                          ; eb 03
+    jmp short 0520ah                          ; eb 03
     or byte [bp-00ah], dl                     ; 08 56 f6
     movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 1c c7
-    jmp near 05217h                           ; e9 d2 02
+    call 0165eh                               ; e8 47 c4
+    jmp near 054ech                           ; e9 d2 02
     test byte [bp-006h], 001h                 ; f6 46 fa 01
-    jne near 05217h                           ; 0f 85 ca 02
+    jne near 054ech                           ; 0f 85 ca 02
     mov al, byte [bp-010h]                    ; 8a 46 f0
     or AL, strict byte 004h                   ; 0c 04
     mov byte [bp-00ah], al                    ; 88 46 f6
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 fd c6
+    call 0165eh                               ; e8 28 c4
     mov al, byte [bp-006h]                    ; 8a 46 fa
     test AL, strict byte 002h                 ; a8 02
-    je short 04f75h                           ; 74 0d
+    je short 0524ah                           ; 74 0d
     or AL, strict byte 004h                   ; 0c 04
     mov byte [bp-00ch], al                    ; 88 46 f4
     movzx bx, al                              ; 0f b6 d8
     mov dx, 00096h                            ; ba 96 00
-    jmp short 04f83h                          ; eb 0e
+    jmp short 05258h                          ; eb 0e
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     or AL, strict byte 001h                   ; 0c 01
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 d5 c6
-    jmp near 05217h                           ; e9 8b 02
+    call 0165eh                               ; e8 00 c4
+    jmp near 054ech                           ; e9 8b 02
     test byte [bp-006h], 001h                 ; f6 46 fa 01
-    jne near 05217h                           ; 0f 85 83 02
+    jne near 054ech                           ; 0f 85 83 02
     mov al, byte [bp-010h]                    ; 8a 46 f0
     and AL, strict byte 0fbh                  ; 24 fb
     mov byte [bp-00ah], al                    ; 88 46 f6
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 b6 c6
+    call 0165eh                               ; e8 e1 c3
     mov al, byte [bp-006h]                    ; 8a 46 fa
     test AL, strict byte 002h                 ; a8 02
-    je short 04fbch                           ; 74 0d
+    je short 05291h                           ; 74 0d
     and AL, strict byte 0fbh                  ; 24 fb
     mov byte [bp-00ch], al                    ; 88 46 f4
     movzx bx, al                              ; 0f b6 d8
     mov dx, 00096h                            ; ba 96 00
-    jmp short 04fcah                          ; eb 0e
+    jmp short 0529fh                          ; eb 0e
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     and AL, strict byte 0feh                  ; 24 fe
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 8e c6
-    jmp near 05217h                           ; e9 44 02
+    call 0165eh                               ; e8 b9 c3
+    jmp near 054ech                           ; e9 44 02
     mov al, byte [bp-010h]                    ; 8a 46 f0
     or AL, strict byte 008h                   ; 0c 08
     mov byte [bp-00ah], al                    ; 88 46 f6
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 77 c6
+    call 0165eh                               ; e8 a2 c3
     mov al, byte [bp-006h]                    ; 8a 46 fa
     test AL, strict byte 002h                 ; a8 02
-    je short 04ffbh                           ; 74 0d
+    je short 052d0h                           ; 74 0d
     or AL, strict byte 008h                   ; 0c 08
     mov byte [bp-00ch], al                    ; 88 46 f4
     movzx bx, al                              ; 0f b6 d8
     mov dx, 00096h                            ; ba 96 00
-    jmp short 05009h                          ; eb 0e
+    jmp short 052deh                          ; eb 0e
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     or AL, strict byte 002h                   ; 0c 02
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 4f c6
-    jmp near 05217h                           ; e9 05 02
+    call 0165eh                               ; e8 7a c3
+    jmp near 054ech                           ; e9 05 02
     mov al, byte [bp-010h]                    ; 8a 46 f0
     and AL, strict byte 0f7h                  ; 24 f7
     mov byte [bp-00ah], al                    ; 88 46 f6
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 38 c6
+    call 0165eh                               ; e8 63 c3
     mov al, byte [bp-006h]                    ; 8a 46 fa
     test AL, strict byte 002h                 ; a8 02
-    je short 0503ah                           ; 74 0d
+    je short 0530fh                           ; 74 0d
     and AL, strict byte 0f7h                  ; 24 f7
     mov byte [bp-00ch], al                    ; 88 46 f4
     movzx bx, al                              ; 0f b6 d8
     mov dx, 00096h                            ; ba 96 00
-    jmp short 05048h                          ; eb 0e
+    jmp short 0531dh                          ; eb 0e
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     and AL, strict byte 0fdh                  ; 24 fd
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 10 c6
-    jmp near 05217h                           ; e9 c6 01
+    call 0165eh                               ; e8 3b c3
+    jmp near 054ech                           ; e9 c6 01
     test byte [bp-006h], 003h                 ; f6 46 fa 03
-    jne near 05217h                           ; 0f 85 be 01
+    jne near 054ech                           ; 0f 85 be 01
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     or AL, strict byte 020h                   ; 0c 20
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 f1 c5
+    call 0165eh                               ; e8 1c c3
     mov al, byte [bp-010h]                    ; 8a 46 f0
     xor AL, strict byte 020h                  ; 34 20
     mov byte [bp-00ah], al                    ; 88 46 f6
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 dd c5
-    jmp near 05217h                           ; e9 93 01
+    call 0165eh                               ; e8 08 c3
+    jmp near 054ech                           ; e9 93 01
     test byte [bp-006h], 003h                 ; f6 46 fa 03
-    jne near 05217h                           ; 0f 85 8b 01
+    jne near 054ech                           ; 0f 85 8b 01
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     and AL, strict byte 0dfh                  ; 24 df
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 be c5
-    jmp near 05217h                           ; e9 74 01
+    call 0165eh                               ; e8 e9 c2
+    jmp near 054ech                           ; e9 74 01
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     or AL, strict byte 010h                   ; 0c 10
     mov byte [bp-004h], al                    ; 88 46 fc
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 a7 c5
+    call 0165eh                               ; e8 d2 c2
     mov al, byte [bp-010h]                    ; 8a 46 f0
     xor AL, strict byte 010h                  ; 34 10
-    jmp short 05072h                          ; eb b4
+    jmp short 05347h                          ; eb b4
     mov al, byte [bp-00eh]                    ; 8a 46 f2
     and AL, strict byte 0efh                  ; 24 ef
-    jmp short 05091h                          ; eb cc
+    jmp short 05366h                          ; eb cc
     mov al, byte [bp-010h]                    ; 8a 46 f0
     and AL, strict byte 00ch                  ; 24 0c
     cmp AL, strict byte 00ch                  ; 3c 0c
-    jne short 050dfh                          ; 75 11
+    jne short 053b4h                          ; 75 11
     mov bx, 01234h                            ; bb 34 12
     mov dx, strict word 00072h                ; ba 72 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0167ah                               ; e8 a0 c5
+    call 0167ah                               ; e8 cb c2
     jmp far 0f000h:0e05bh                     ; ea 5b e0 00 f0
     mov al, byte [bp-008h]                    ; 8a 46 f8
     test AL, strict byte 080h                 ; a8 80
-    je short 0511dh                           ; 74 37
+    je short 053f2h                           ; 74 37
     cmp AL, strict byte 0fah                  ; 3c fa
-    jne short 050fah                          ; 75 10
+    jne short 053cfh                          ; 75 10
     mov dx, 00097h                            ; ba 97 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 5d c5
+    call 01650h                               ; e8 88 c2
     mov dl, al                                ; 88 c2
     or dl, 010h                               ; 80 ca 10
-    jmp short 0510eh                          ; eb 14
+    jmp short 053e3h                          ; eb 14
     cmp AL, strict byte 0feh                  ; 3c fe
-    jne near 05217h                           ; 0f 85 17 01
+    jne near 054ech                           ; 0f 85 17 01
     mov dx, 00097h                            ; ba 97 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 47 c5
+    call 01650h                               ; e8 72 c2
     mov dl, al                                ; 88 c2
     or dl, 020h                               ; 80 ca 20
     movzx bx, dl                              ; 0f b6 da
     mov dx, 00097h                            ; ba 97 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 44 c5
-    jmp near 05217h                           ; e9 fa 00
+    call 0165eh                               ; e8 6f c2
+    jmp near 054ech                           ; e9 fa 00
     cmp byte [bp-008h], 058h                  ; 80 7e f8 58
-    jbe short 05141h                          ; 76 1e
-    mov bx, 00da2h                            ; bb a2 0d
+    jbe short 05416h                          ; 76 1e
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 03 c8
+    call 01931h                               ; e8 2e c5
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 00581h                               ; 68 81 05
+    push 005a1h                               ; 68 a1 05
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 37 c8
+    call 01972h                               ; e8 62 c5
     add sp, strict byte 00006h                ; 83 c4 06
-    jmp near 05235h                           ; e9 f4 00
+    jmp near 0550ah                           ; e9 f4 00
     mov al, byte [bp-00ah]                    ; 8a 46 f6
     test AL, strict byte 008h                 ; a8 08
-    je short 0515ah                           ; 74 12
+    je short 0542fh                           ; 74 12
     movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
     imul bx, bx, strict byte 0000ah           ; 6b db 0a
-    mov dl, byte [bx+00df6h]                  ; 8a 97 f6 0d
-    mov ax, word [bx+00df6h]                  ; 8b 87 f6 0d
-    jmp near 051e8h                           ; e9 8e 00
+    mov dl, byte [bx+00df4h]                  ; 8a 97 f4 0d
+    mov ax, word [bx+00df4h]                  ; 8b 87 f4 0d
+    jmp near 054bdh                           ; e9 8e 00
     test AL, strict byte 004h                 ; a8 04
-    je short 05170h                           ; 74 12
+    je short 05445h                           ; 74 12
     movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
     imul bx, bx, strict byte 0000ah           ; 6b db 0a
-    mov dl, byte [bx+00df4h]                  ; 8a 97 f4 0d
-    mov ax, word [bx+00df4h]                  ; 8b 87 f4 0d
-    jmp near 051e8h                           ; e9 78 00
+    mov dl, byte [bx+00df2h]                  ; 8a 97 f2 0d
+    mov ax, word [bx+00df2h]                  ; 8b 87 f2 0d
+    jmp near 054bdh                           ; e9 78 00
     mov al, byte [bp-00ch]                    ; 8a 46 f4
     and AL, strict byte 002h                  ; 24 02
     test al, al                               ; 84 c0
-    jbe short 0518eh                          ; 76 15
+    jbe short 05463h                          ; 76 15
     mov al, byte [bp-008h]                    ; 8a 46 f8
     cmp AL, strict byte 047h                  ; 3c 47
-    jc short 0518eh                           ; 72 0e
+    jc short 05463h                           ; 72 0e
     cmp AL, strict byte 053h                  ; 3c 53
-    jnbe short 0518eh                         ; 77 0a
+    jnbe short 05463h                         ; 77 0a
     mov DL, strict byte 0e0h                  ; b2 e0
     movzx bx, al                              ; 0f b6 d8
     imul bx, bx, strict byte 0000ah           ; 6b db 0a
-    jmp short 051e4h                          ; eb 56
+    jmp short 054b9h                          ; eb 56
     test byte [bp-00ah], 003h                 ; f6 46 f6 03
-    je short 051c2h                           ; 74 2e
+    je short 05497h                           ; 74 2e
     movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
     imul bx, bx, strict byte 0000ah           ; 6b db 0a
-    movzx ax, byte [bx+00df8h]                ; 0f b6 87 f8 0d
+    movzx ax, byte [bx+00df6h]                ; 0f b6 87 f6 0d
     movzx dx, byte [bp-00ah]                  ; 0f b6 56 f6
     test dx, ax                               ; 85 c2
-    je short 051b2h                           ; 74 0a
+    je short 05487h                           ; 74 0a
+    mov dl, byte [bx+00deeh]                  ; 8a 97 ee 0d
+    mov ax, word [bx+00deeh]                  ; 8b 87 ee 0d
+    jmp short 0548fh                          ; eb 08
     mov dl, byte [bx+00df0h]                  ; 8a 97 f0 0d
     mov ax, word [bx+00df0h]                  ; 8b 87 f0 0d
-    jmp short 051bah                          ; eb 08
-    mov dl, byte [bx+00df2h]                  ; 8a 97 f2 0d
-    mov ax, word [bx+00df2h]                  ; 8b 87 f2 0d
     shr ax, 008h                              ; c1 e8 08
     mov byte [bp-008h], al                    ; 88 46 f8
-    jmp short 051eeh                          ; eb 2c
+    jmp short 054c3h                          ; eb 2c
     movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
     imul bx, bx, strict byte 0000ah           ; 6b db 0a
-    movzx ax, byte [bx+00df8h]                ; 0f b6 87 f8 0d
+    movzx ax, byte [bx+00df6h]                ; 0f b6 87 f6 0d
     movzx dx, byte [bp-00ah]                  ; 0f b6 56 f6
     test dx, ax                               ; 85 c2
-    je short 051e0h                           ; 74 0a
-    mov dl, byte [bx+00df2h]                  ; 8a 97 f2 0d
-    mov ax, word [bx+00df2h]                  ; 8b 87 f2 0d
-    jmp short 051e8h                          ; eb 08
+    je short 054b5h                           ; 74 0a
     mov dl, byte [bx+00df0h]                  ; 8a 97 f0 0d
     mov ax, word [bx+00df0h]                  ; 8b 87 f0 0d
+    jmp short 054bdh                          ; eb 08
+    mov dl, byte [bx+00deeh]                  ; 8a 97 ee 0d
+    mov ax, word [bx+00deeh]                  ; 8b 87 ee 0d
     shr ax, 008h                              ; c1 e8 08
     mov byte [bp-008h], al                    ; 88 46 f8
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    jne short 0520eh                          ; 75 1a
+    jne short 054e3h                          ; 75 1a
     test dl, dl                               ; 84 d2
-    jne short 0520eh                          ; 75 16
-    mov bx, 00da2h                            ; bb a2 0d
+    jne short 054e3h                          ; 75 16
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 2e c7
-    push 005b8h                               ; 68 b8 05
+    call 01931h                               ; e8 59 c4
+    push 005d8h                               ; 68 d8 05
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 67 c7
+    call 01972h                               ; e8 92 c4
     add sp, strict byte 00004h                ; 83 c4 04
     xor dh, dh                                ; 30 f6
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 04de1h                               ; e8 ca fb
+    call 050b6h                               ; e8 ca fb
     mov al, byte [bp-008h]                    ; 8a 46 f8
     and AL, strict byte 07fh                  ; 24 7f
     cmp AL, strict byte 01dh                  ; 3c 1d
-    je short 05224h                           ; 74 04
+    je short 054f9h                           ; 74 04
     and byte [bp-00ch], 0feh                  ; 80 66 f4 fe
     and byte [bp-00ch], 0fdh                  ; 80 66 f4 fd
     movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
     mov dx, 00096h                            ; ba 96 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 29 c4
+    call 0165eh                               ; e8 54 c1
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop di                                    ; 5f
     pop bp                                    ; 5d
     retn                                      ; c3
-dequeue_key_:                                ; 0xf523b LB 0x94
+dequeue_key_:                                ; 0xf5510 LB 0x94
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -7222,36 +7472,36 @@ dequeue_key_:                                ; 0xf523b LB 0x94
     mov word [bp-008h], cx                    ; 89 4e f8
     mov dx, strict word 0001ah                ; ba 1a 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 17 c4
+    call 0166ch                               ; e8 42 c1
     mov bx, ax                                ; 89 c3
     mov dx, strict word 0001ch                ; ba 1c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 0c c4
+    call 0166ch                               ; e8 37 c1
     cmp bx, ax                                ; 39 c3
-    je short 052a1h                           ; 74 3d
+    je short 05576h                           ; 74 3d
     mov dx, bx                                ; 89 da
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 e4 c3
+    call 01650h                               ; e8 0f c1
     mov cl, al                                ; 88 c1
     lea dx, [bx+001h]                         ; 8d 57 01
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 d9 c3
+    call 01650h                               ; e8 04 c1
     mov es, [bp-008h]                         ; 8e 46 f8
     mov byte [es:si], cl                      ; 26 88 0c
     mov es, [bp-006h]                         ; 8e 46 fa
     mov byte [es:di], al                      ; 26 88 05
     cmp word [bp+004h], strict byte 00000h    ; 83 7e 04 00
-    je short 0529ch                           ; 74 13
+    je short 05571h                           ; 74 13
     inc bx                                    ; 43
     inc bx                                    ; 43
     cmp bx, strict byte 0003eh                ; 83 fb 3e
-    jc short 05293h                           ; 72 03
+    jc short 05568h                           ; 72 03
     mov bx, strict word 0001eh                ; bb 1e 00
     mov dx, strict word 0001ah                ; ba 1a 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0167ah                               ; e8 de c3
+    call 0167ah                               ; e8 09 c1
     mov ax, strict word 00001h                ; b8 01 00
-    jmp short 052a3h                          ; eb 02
+    jmp short 05578h                          ; eb 02
     xor ax, ax                                ; 31 c0
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
@@ -7262,34 +7512,37 @@ dequeue_key_:                                ; 0xf523b LB 0x94
     adc word [bx+si], dx                      ; 11 10
     or cl, byte [bx+di]                       ; 0a 09
     add ax, 00102h                            ; 05 02 01
-    add byte [di+055h], ch                    ; 00 6d 55
-    adc word [bp+di-036h], strict byte 00053h ; 83 53 ca 53
-    push SS                                   ; 16
-    push sp                                   ; 54
-    db  026h, 054h
-    ; es push sp                                ; 26 54
-    push ax                                   ; 50
-    push sp                                   ; 54
-    pop cx                                    ; 59
-    push sp                                   ; 54
-    retf 0fb54h                               ; ca 54 fb
-    push sp                                   ; 54
-    sub byte [di+062h], dl                    ; 28 55 62
-    push bp                                   ; 55
-    mov AL, strict byte 055h                  ; b0 55
-_int16_function:                             ; 0xf52cf LB 0x2e7
+    add byte [bp+si+058h], al                 ; 00 42 58
+    pop ax                                    ; 58
+    push si                                   ; 56
+    lahf                                      ; 9f
+    push si                                   ; 56
+    jmp short 055eah                          ; eb 56
+    sti                                       ; fb
+    push si                                   ; 56
+    and ax, 02e57h                            ; 25 57 2e
+    push di                                   ; 57
+    lahf                                      ; 9f
+    push di                                   ; 57
+    rcl byte [bx-003h], 1                     ; d0 57 fd
+    push di                                   ; 57
+    aaa                                       ; 37
+    pop ax                                    ; 58
+    db  085h
+    pop ax                                    ; 58
+_int16_function:                             ; 0xf55a4 LB 0x2e7
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push di                                   ; 57
     sub sp, strict byte 00006h                ; 83 ec 06
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 71 c3
+    call 01650h                               ; e8 9c c0
     mov cl, al                                ; 88 c1
     mov bh, al                                ; 88 c7
     mov dx, 00097h                            ; ba 97 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 64 c3
+    call 01650h                               ; e8 8f c0
     mov bl, al                                ; 88 c3
     movzx dx, cl                              ; 0f b6 d1
     sar dx, 004h                              ; c1 fa 04
@@ -7298,7 +7551,7 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     xor ah, ah                                ; 30 e4
     xor al, dl                                ; 30 d0
     test ax, ax                               ; 85 c0
-    je short 05361h                           ; 74 60
+    je short 05636h                           ; 74 60
     cli                                       ; fa
     mov AL, strict byte 0edh                  ; b0 ed
     mov dx, strict word 00060h                ; ba 60 00
@@ -7308,17 +7561,17 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 0531ah                          ; 75 08
+    jne short 055efh                          ; 75 08
     mov AL, strict byte 021h                  ; b0 21
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 05308h                          ; eb ee
+    jmp short 055ddh                          ; eb ee
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, 000fah                            ; 3d fa 00
-    jne short 05360h                          ; 75 3b
+    jne short 05635h                          ; 75 3b
     and bl, 0c8h                              ; 80 e3 c8
     movzx ax, bh                              ; 0f b6 c7
     sar ax, 004h                              ; c1 f8 04
@@ -7334,11 +7587,11 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 0534fh                          ; 75 08
+    jne short 05624h                          ; 75 08
     mov AL, strict byte 021h                  ; b0 21
     mov dx, 00080h                            ; ba 80 00
     out DX, AL                                ; ee
-    jmp short 0533dh                          ; eb ee
+    jmp short 05612h                          ; eb ee
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -7346,63 +7599,63 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     xor bh, bh                                ; 30 ff
     mov dx, 00097h                            ; ba 97 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 fe c2
+    call 0165eh                               ; e8 29 c0
     sti                                       ; fb
     mov ax, word [bp+012h]                    ; 8b 46 12
     shr ax, 008h                              ; c1 e8 08
     cmp ax, 000a2h                            ; 3d a2 00
-    jnbe near 0556dh                          ; 0f 87 ff 01
+    jnbe near 05842h                          ; 0f 87 ff 01
     push CS                                   ; 0e
     pop ES                                    ; 07
     mov cx, strict word 0000ch                ; b9 0c 00
-    mov di, 052ach                            ; bf ac 52
+    mov di, 05581h                            ; bf 81 55
     repne scasb                               ; f2 ae
     sal cx, 1                                 ; d1 e1
     mov di, cx                                ; 89 cf
-    mov ax, word [cs:di+052b7h]               ; 2e 8b 85 b7 52
+    mov ax, word [cs:di+0558ch]               ; 2e 8b 85 8c 55
     jmp ax                                    ; ff e0
     push strict byte 00001h                   ; 6a 01
     mov cx, ss                                ; 8c d1
     lea bx, [bp-008h]                         ; 8d 5e f8
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 0523bh                               ; e8 a9 fe
+    call 05510h                               ; e8 a9 fe
     test ax, ax                               ; 85 c0
-    jne short 053a1h                          ; 75 0b
-    push 005efh                               ; 68 ef 05
+    jne short 05676h                          ; 75 0b
+    push 0060fh                               ; 68 0f 06
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 d4 c5
+    call 01972h                               ; e8 ff c2
     add sp, strict byte 00004h                ; 83 c4 04
     cmp byte [bp-006h], 000h                  ; 80 7e fa 00
-    je short 053adh                           ; 74 06
+    je short 05682h                           ; 74 06
     cmp byte [bp-008h], 0f0h                  ; 80 7e f8 f0
-    je short 053b3h                           ; 74 06
+    je short 05688h                           ; 74 06
     cmp byte [bp-008h], 0e0h                  ; 80 7e f8 e0
-    jne short 053b7h                          ; 75 04
+    jne short 0568ch                          ; 75 04
     mov byte [bp-008h], 000h                  ; c6 46 f8 00
     movzx dx, byte [bp-006h]                  ; 0f b6 56 fa
     sal dx, 008h                              ; c1 e2 08
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     or dx, ax                                 ; 09 c2
     mov word [bp+012h], dx                    ; 89 56 12
-    jmp near 055b0h                           ; e9 e6 01
+    jmp near 05885h                           ; e9 e6 01
     or word [bp+01ch], 00200h                 ; 81 4e 1c 00 02
     push strict byte 00000h                   ; 6a 00
     mov cx, ss                                ; 8c d1
     lea bx, [bp-008h]                         ; 8d 5e f8
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 0523bh                               ; e8 5d fe
+    call 05510h                               ; e8 5d fe
     test ax, ax                               ; 85 c0
-    jne short 053e9h                          ; 75 07
+    jne short 056beh                          ; 75 07
     or word [bp+01ch], strict byte 00040h     ; 83 4e 1c 40
-    jmp near 055b0h                           ; e9 c7 01
+    jmp near 05885h                           ; e9 c7 01
     cmp byte [bp-006h], 000h                  ; 80 7e fa 00
-    je short 053f5h                           ; 74 06
+    je short 056cah                           ; 74 06
     cmp byte [bp-008h], 0f0h                  ; 80 7e f8 f0
-    je short 053fbh                           ; 74 06
+    je short 056d0h                           ; 74 06
     cmp byte [bp-008h], 0e0h                  ; 80 7e f8 e0
-    jne short 053ffh                          ; 75 04
+    jne short 056d4h                          ; 75 04
     mov byte [bp-008h], 000h                  ; c6 46 f8 00
     movzx dx, byte [bp-006h]                  ; 0f b6 56 fa
     sal dx, 008h                              ; c1 e2 08
@@ -7410,32 +7663,32 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     or dx, ax                                 ; 09 c2
     mov word [bp+012h], dx                    ; 89 56 12
     and word [bp+01ch], strict byte 0ffbfh    ; 83 66 1c bf
-    jmp near 055b0h                           ; e9 9a 01
+    jmp near 05885h                           ; e9 9a 01
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 31 c2
+    call 01650h                               ; e8 5c bf
     mov dx, word [bp+012h]                    ; 8b 56 12
     mov dl, al                                ; 88 c2
-    jmp short 053c4h                          ; eb 9e
+    jmp short 05699h                          ; eb 9e
     mov al, byte [bp+010h]                    ; 8a 46 10
     movzx dx, al                              ; 0f b6 d0
     mov ax, word [bp+010h]                    ; 8b 46 10
     shr ax, 008h                              ; c1 e8 08
     xor ah, ah                                ; 30 e4
-    call 04de1h                               ; e8 aa f9
+    call 050b6h                               ; e8 aa f9
     test ax, ax                               ; 85 c0
-    jne short 05448h                          ; 75 0d
+    jne short 0571dh                          ; 75 0d
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor al, al                                ; 30 c0
     or AL, strict byte 001h                   ; 0c 01
     mov word [bp+012h], ax                    ; 89 46 12
-    jmp near 055b0h                           ; e9 68 01
+    jmp near 05885h                           ; e9 68 01
     and word [bp+012h], 0ff00h                ; 81 66 12 00 ff
-    jmp near 055b0h                           ; e9 60 01
+    jmp near 05885h                           ; e9 60 01
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor al, al                                ; 30 c0
     or AL, strict byte 030h                   ; 0c 30
-    jmp short 05442h                          ; eb e9
+    jmp short 05717h                          ; eb e9
     mov byte [bp-004h], 002h                  ; c6 46 fc 02
     xor cx, cx                                ; 31 c9
     cli                                       ; fa
@@ -7448,40 +7701,40 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 05480h                          ; 75 0d
+    jne short 05755h                          ; 75 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 05480h                          ; 76 08
+    jbe short 05755h                          ; 76 08
     mov dx, 00080h                            ; ba 80 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
-    jmp short 05469h                          ; eb e9
+    jmp short 0573eh                          ; eb e9
     test bx, bx                               ; 85 db
-    jbe short 054c4h                          ; 76 40
+    jbe short 05799h                          ; 76 40
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp ax, 000fah                            ; 3d fa 00
-    jne short 054c4h                          ; 75 35
+    jne short 05799h                          ; 75 35
     mov bx, strict word 0ffffh                ; bb ff ff
     mov dx, strict word 00064h                ; ba 64 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 054a9h                          ; 75 0d
+    jne short 0577eh                          ; 75 0d
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 054a9h                          ; 76 08
+    jbe short 0577eh                          ; 76 08
     mov dx, 00080h                            ; ba 80 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
-    jmp short 05492h                          ; eb e9
+    jmp short 05767h                          ; eb e9
     test bx, bx                               ; 85 db
-    jbe short 054bbh                          ; 76 0e
+    jbe short 05790h                          ; 76 0e
     shr cx, 008h                              ; c1 e9 08
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
@@ -7491,80 +7744,80 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     or cx, ax                                 ; 09 c1
     dec byte [bp-004h]                        ; fe 4e fc
     cmp byte [bp-004h], 000h                  ; 80 7e fc 00
-    jnbe short 0548fh                         ; 77 cb
+    jnbe short 05764h                         ; 77 cb
     mov word [bp+00ch], cx                    ; 89 4e 0c
-    jmp near 055b0h                           ; e9 e6 00
+    jmp near 05885h                           ; e9 e6 00
     push strict byte 00001h                   ; 6a 01
     mov cx, ss                                ; 8c d1
     lea bx, [bp-008h]                         ; 8d 5e f8
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 0523bh                               ; e8 62 fd
+    call 05510h                               ; e8 62 fd
     test ax, ax                               ; 85 c0
-    jne short 054e8h                          ; 75 0b
-    push 005efh                               ; 68 ef 05
+    jne short 057bdh                          ; 75 0b
+    push 0060fh                               ; 68 0f 06
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 8d c4
+    call 01972h                               ; e8 b8 c1
     add sp, strict byte 00004h                ; 83 c4 04
     cmp byte [bp-006h], 000h                  ; 80 7e fa 00
-    je near 053b7h                            ; 0f 84 c7 fe
+    je near 0568ch                            ; 0f 84 c7 fe
     cmp byte [bp-008h], 0f0h                  ; 80 7e f8 f0
-    je near 053b3h                            ; 0f 84 bb fe
-    jmp near 053b7h                           ; e9 bc fe
+    je near 05688h                            ; 0f 84 bb fe
+    jmp near 0568ch                           ; e9 bc fe
     or word [bp+01ch], 00200h                 ; 81 4e 1c 00 02
     push strict byte 00000h                   ; 6a 00
     mov cx, ss                                ; 8c d1
     lea bx, [bp-008h]                         ; 8d 5e f8
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 0523bh                               ; e8 2c fd
+    call 05510h                               ; e8 2c fd
     test ax, ax                               ; 85 c0
-    je near 053e2h                            ; 0f 84 cd fe
+    je near 056b7h                            ; 0f 84 cd fe
     cmp byte [bp-006h], 000h                  ; 80 7e fa 00
-    je near 053ffh                            ; 0f 84 e2 fe
+    je near 056d4h                            ; 0f 84 e2 fe
     cmp byte [bp-008h], 0f0h                  ; 80 7e f8 f0
-    je near 053fbh                            ; 0f 84 d6 fe
-    jmp near 053ffh                           ; e9 d7 fe
+    je near 056d0h                            ; 0f 84 d6 fe
+    jmp near 056d4h                           ; e9 d7 fe
     mov dx, strict word 00017h                ; ba 17 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 1f c1
+    call 01650h                               ; e8 4a be
     mov dx, word [bp+012h]                    ; 8b 56 12
     mov dl, al                                ; 88 c2
     mov word [bp+012h], dx                    ; 89 56 12
     mov dx, strict word 00018h                ; ba 18 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 0e c1
+    call 01650h                               ; e8 39 be
     mov bh, al                                ; 88 c7
     and bh, 073h                              ; 80 e7 73
     mov dx, 00096h                            ; ba 96 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 00 c1
+    call 01650h                               ; e8 2b be
     and AL, strict byte 00ch                  ; 24 0c
     or bh, al                                 ; 08 c7
     mov dx, word [bp+012h]                    ; 8b 56 12
     xor dh, dh                                ; 30 f6
     movzx ax, bh                              ; 0f b6 c7
     sal ax, 008h                              ; c1 e0 08
-    jmp near 053c2h                           ; e9 60 fe
+    jmp near 05697h                           ; e9 60 fe
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     or ah, 080h                               ; 80 cc 80
-    jmp near 05442h                           ; e9 d5 fe
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 05717h                           ; e9 d5 fe
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 b9 c3
+    call 01931h                               ; e8 e4 c0
     mov ax, word [bp+012h]                    ; 8b 46 12
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 00613h                               ; 68 13 06
+    push 00633h                               ; 68 33 06
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 eb c3
+    call 01972h                               ; e8 16 c1
     add sp, strict byte 00006h                ; 83 c4 06
-    mov bx, 00da2h                            ; bb a2 0d
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 9c c3
+    call 01931h                               ; e8 c7 c0
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     push ax                                   ; 50
     mov ax, word [bp+010h]                    ; 8b 46 10
@@ -7573,164 +7826,195 @@ _int16_function:                             ; 0xf52cf LB 0x2e7
     push ax                                   ; 50
     mov ax, word [bp+012h]                    ; 8b 46 12
     push ax                                   ; 50
-    push 0063bh                               ; 68 3b 06
+    push 0065bh                               ; 68 5b 06
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 c5 c3
+    call 01972h                               ; e8 f0 c0
     add sp, strict byte 0000ch                ; 83 c4 0c
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop di                                    ; 5f
     pop bp                                    ; 5d
     retn                                      ; c3
-set_geom_lba_:                               ; 0xf55b6 LB 0x9e
+set_geom_lba_:                               ; 0xf588b LB 0xe5
+    push bx                                   ; 53
+    push cx                                   ; 51
     push si                                   ; 56
     push di                                   ; 57
-    enter 00004h, 000h                        ; c8 04 00 00
-    mov si, ax                                ; 89 c6
+    enter 00008h, 000h                        ; c8 08 00 00
+    mov di, ax                                ; 89 c7
     mov es, dx                                ; 8e c2
+    mov dword [bp-008h], strict dword 0007e0000h ; 66 c7 46 f8 00 00 7e 00
+    mov word [bp-002h], 000ffh                ; c7 46 fe ff 00
+    mov ax, word [bp+012h]                    ; 8b 46 12
+    mov bx, word [bp+010h]                    ; 8b 5e 10
+    mov cx, word [bp+00eh]                    ; 8b 4e 0e
+    mov dx, word [bp+00ch]                    ; 8b 56 0c
+    mov si, strict word 00020h                ; be 20 00
+    call 09d4ah                               ; e8 94 44
+    test ax, ax                               ; 85 c0
+    jne short 058c6h                          ; 75 0c
+    test bx, bx                               ; 85 db
+    jne short 058c6h                          ; 75 08
+    test cx, cx                               ; 85 c9
+    jne short 058c6h                          ; 75 04
+    test dx, dx                               ; 85 d2
+    je short 058cdh                           ; 74 07
+    mov bx, strict word 0ffffh                ; bb ff ff
+    mov si, bx                                ; 89 de
+    jmp short 058d3h                          ; eb 06
+    mov bx, word [bp+00ch]                    ; 8b 5e 0c
+    mov si, word [bp+00eh]                    ; 8b 76 0e
     mov word [bp-004h], bx                    ; 89 5e fc
-    mov word [bp-002h], cx                    ; 89 4e fe
-    xor ax, ax                                ; 31 c0
-    mov dx, strict word 0007eh                ; ba 7e 00
-    mov di, 000ffh                            ; bf ff 00
     xor bx, bx                                ; 31 db
-    jmp short 055d7h                          ; eb 05
+    jmp short 058dfh                          ; eb 05
     cmp bx, strict byte 00004h                ; 83 fb 04
-    jnl short 055edh                          ; 7d 16
-    cmp dx, word [bp-002h]                    ; 3b 56 fe
-    jnbe short 055e3h                         ; 77 07
-    jne short 055e6h                          ; 75 08
-    cmp ax, word [bp-004h]                    ; 3b 46 fc
-    jc short 055e6h                           ; 72 03
-    inc di                                    ; 47
-    shr di, 1                                 ; d1 ef
-    shr dx, 1                                 ; d1 ea
-    rcr ax, 1                                 ; d1 d8
+    jnl short 05902h                          ; 7d 23
+    mov ax, word [bp-006h]                    ; 8b 46 fa
+    cmp si, ax                                ; 39 c6
+    jc short 058f0h                           ; 72 0a
+    jne short 058f9h                          ; 75 11
+    mov ax, word [bp-004h]                    ; 8b 46 fc
+    cmp ax, word [bp-008h]                    ; 3b 46 f8
+    jnbe short 058f9h                         ; 77 09
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    inc ax                                    ; 40
+    shr ax, 1                                 ; d1 e8
+    mov word [bp-002h], ax                    ; 89 46 fe
+    shr word [bp-006h], 1                     ; d1 6e fa
+    rcr word [bp-008h], 1                     ; d1 5e f8
     inc bx                                    ; 43
-    jmp short 055d2h                          ; eb e5
-    mov ax, di                                ; 89 f8
+    jmp short 058dah                          ; eb d8
+    mov ax, word [bp-002h]                    ; 8b 46 fe
     xor dx, dx                                ; 31 d2
     mov bx, strict word 0003fh                ; bb 3f 00
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 80 41
+    call 09d09h                               ; e8 fa 43
     mov bx, ax                                ; 89 c3
     mov cx, dx                                ; 89 d1
     mov ax, word [bp-004h]                    ; 8b 46 fc
-    mov dx, word [bp-002h]                    ; 8b 56 fe
-    call 09740h                               ; e8 3a 41
-    mov word [es:si+002h], ax                 ; 26 89 44 02
+    mov dx, si                                ; 89 f2
+    call 09cd0h                               ; e8 b5 43
+    mov word [es:di+002h], ax                 ; 26 89 45 02
     cmp ax, 00400h                            ; 3d 00 04
-    jbe short 05615h                          ; 76 06
-    mov word [es:si+002h], 00400h             ; 26 c7 44 02 00 04
-    mov word [es:si], di                      ; 26 89 3c
-    mov word [es:si+004h], strict word 0003fh ; 26 c7 44 04 3f 00
+    jbe short 0592ah                          ; 76 06
+    mov word [es:di+002h], 00400h             ; 26 c7 45 02 00 04
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    mov word [es:di], ax                      ; 26 89 05
+    mov word [es:di+004h], strict word 0003fh ; 26 c7 45 04 3f 00
     leave                                     ; c9
     pop di                                    ; 5f
     pop si                                    ; 5e
-    retn                                      ; c3
-    ficom word [bp+004h]                      ; de 56 04
-    push di                                   ; 57
-    xor word [bx+031h], dx                    ; 31 57 31
-    push di                                   ; 57
-    xor word [bx+009h], dx                    ; 31 57 09
     pop cx                                    ; 59
-    aaa                                       ; 37
-    pop dx                                    ; 5a
-    aaa                                       ; 37
-    pop dx                                    ; 5a
-    and bl, byte [bx+di+014h]                 ; 22 59 14
-    pop dx                                    ; 5a
-    aaa                                       ; 37
-    pop dx                                    ; 5a
-    aaa                                       ; 37
-    pop dx                                    ; 5a
-    adc AL, strict byte 05ah                  ; 14 5a
-    adc AL, strict byte 05ah                  ; 14 5a
-    aaa                                       ; 37
-    pop dx                                    ; 5a
-    aaa                                       ; 37
-    pop dx                                    ; 5a
-    cbw                                       ; 98
+    pop bx                                    ; 5b
+    retn 00008h                               ; c2 08 00
+    cli                                       ; fa
     pop cx                                    ; 59
-    adc AL, strict byte 05ah                  ; 14 5a
-    aaa                                       ; 37
-    pop dx                                    ; 5a
-    aaa                                       ; 37
+    and byte [bp+si+04dh], bl                 ; 20 5a 4d
     pop dx                                    ; 5a
-    adc AL, strict byte 05ah                  ; 14 5a
-    enter 03759h, 05ah                        ; c8 59 37 5a
-    aaa                                       ; 37
+    dec bp                                    ; 4d
     pop dx                                    ; 5a
-    aaa                                       ; 37
+    dec bp                                    ; 4d
     pop dx                                    ; 5a
-_int13_harddisk:                             ; 0xf5654 LB 0x441
+    db  02eh, 05ch
+    ; cs pop sp                                 ; 2e 5c
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    inc di                                    ; 47
+    pop sp                                    ; 5c
+    cmp word [di+05ch], bx                    ; 39 5d 5c
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    cmp word [di+039h], bx                    ; 39 5d 39
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    mov bp, 0395ch                            ; bd 5c 39
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    cmp word [di-013h], bx                    ; 39 5d ed
+    pop sp                                    ; 5c
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+    pop sp                                    ; 5c
+    pop bp                                    ; 5d
+_int13_harddisk:                             ; 0xf5970 LB 0x44a
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     sub sp, strict byte 00010h                ; 83 ec 10
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 09 c0
+    call 0166ch                               ; e8 ed bc
     mov si, 00122h                            ; be 22 01
     mov word [bp-004h], ax                    ; 89 46 fc
     xor bx, bx                                ; 31 db
     mov dx, 0008eh                            ; ba 8e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 ea bf
+    call 0165eh                               ; e8 ce bc
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     xor ah, ah                                ; 30 e4
     cmp ax, 00080h                            ; 3d 80 00
-    jc short 05683h                           ; 72 05
+    jc short 0599fh                           ; 72 05
     cmp ax, 00090h                            ; 3d 90 00
-    jc short 056a1h                           ; 72 1e
+    jc short 059bdh                           ; 72 1e
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     xor ah, ah                                ; 30 e4
     push ax                                   ; 50
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0065eh                               ; 68 5e 06
-    push 0066dh                               ; 68 6d 06
+    push 0067eh                               ; 68 7e 06
+    push 0068dh                               ; 68 8d 06
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 d7 c2
+    call 01972h                               ; e8 bb bf
     add sp, strict byte 0000ah                ; 83 c4 0a
-    jmp near 05a52h                           ; e9 b1 03
+    jmp near 05d77h                           ; e9 ba 03
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     xor ah, ah                                ; 30 e4
     mov es, [bp-004h]                         ; 8e 46 fc
     mov bx, si                                ; 89 f3
     add bx, ax                                ; 01 c3
-    mov dl, byte [es:bx+0011fh]               ; 26 8a 97 1f 01
+    mov dl, byte [es:bx+00163h]               ; 26 8a 97 63 01
     mov byte [bp-002h], dl                    ; 88 56 fe
     cmp dl, 010h                              ; 80 fa 10
-    jc short 056cah                           ; 72 10
+    jc short 059e6h                           ; 72 10
     push ax                                   ; 50
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0065eh                               ; 68 5e 06
-    push 00698h                               ; 68 98 06
-    jmp short 05696h                          ; eb cc
+    push 0067eh                               ; 68 7e 06
+    push 006b8h                               ; 68 b8 06
+    jmp short 059b2h                          ; eb cc
     mov bx, word [bp+016h]                    ; 8b 5e 16
     shr bx, 008h                              ; c1 eb 08
     cmp bx, strict byte 00018h                ; 83 fb 18
-    jnbe near 05a37h                          ; 0f 87 60 03
+    jnbe near 05d5ch                          ; 0f 87 69 03
     add bx, bx                                ; 01 db
-    jmp word [cs:bx+05622h]                   ; 2e ff a7 22 56
+    jmp word [cs:bx+0593eh]                   ; 2e ff a7 3e 59
     cmp byte [bp-002h], 008h                  ; 80 7e fe 08
-    jnc near 056edh                           ; 0f 83 07 00
+    jnc near 05a09h                           ; 0f 83 07 00
     movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
-    call 01c71h                               ; e8 84 c5
+    call 01d7ch                               ; e8 73 c3
     mov byte [bp+017h], 000h                  ; c6 46 17 00
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 62 bf
+    call 0165eh                               ; e8 46 bc
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 43 bf
+    call 01650h                               ; e8 27 bc
     mov cl, al                                ; 88 c1
     mov dx, word [bp+016h]                    ; 8b 56 16
     xor dh, dh                                ; 30 f6
@@ -7741,10 +8025,10 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 34 bf
+    call 0165eh                               ; e8 18 bc
     test cl, cl                               ; 84 c9
-    je short 056f1h                           ; 74 c3
-    jmp near 05a6eh                           ; e9 3d 03
+    je short 05a0dh                           ; 74 c3
+    jmp near 05d93h                           ; e9 46 03
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     mov word [bp-00ch], ax                    ; 89 46 f4
@@ -7764,42 +8048,42 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     mov word [bp-008h], ax                    ; 89 46 f8
     mov ax, word [bp-00ch]                    ; 8b 46 f4
     cmp ax, 00080h                            ; 3d 80 00
-    jnbe short 0576ch                         ; 77 04
+    jnbe short 05a88h                         ; 77 04
     test ax, ax                               ; 85 c0
-    jne short 0578fh                          ; 75 23
-    mov bx, 00da2h                            ; bb a2 0d
+    jne short 05aabh                          ; 75 23
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 ba c1
+    call 01931h                               ; e8 9e be
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0065eh                               ; 68 5e 06
-    push 006cah                               ; 68 ca 06
+    push 0067eh                               ; 68 7e 06
+    push 006eah                               ; 68 ea 06
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 e9 c1
+    call 01972h                               ; e8 cd be
     add sp, strict byte 00008h                ; 83 c4 08
-    jmp near 05a52h                           ; e9 c3 02
+    jmp near 05d77h                           ; e9 cc 02
     movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov es, [bp-004h]                         ; 8e 46 fc
     mov bx, si                                ; 89 f3
     add bx, ax                                ; 01 c3
-    mov ax, word [es:bx+028h]                 ; 26 8b 47 28
-    mov cx, word [es:bx+026h]                 ; 26 8b 4f 26
-    mov dx, word [es:bx+02ah]                 ; 26 8b 57 2a
+    mov ax, word [es:bx+02ch]                 ; 26 8b 47 2c
+    mov cx, word [es:bx+02ah]                 ; 26 8b 4f 2a
+    mov dx, word [es:bx+02eh]                 ; 26 8b 57 2e
     mov word [bp-00ah], dx                    ; 89 56 f6
     cmp di, ax                                ; 39 c7
-    jnc short 057bch                          ; 73 0c
+    jnc short 05ad8h                          ; 73 0c
     cmp cx, word [bp-008h]                    ; 3b 4e f8
-    jbe short 057bch                          ; 76 07
+    jbe short 05ad8h                          ; 76 07
     mov ax, word [bp-006h]                    ; 8b 46 fa
     cmp ax, dx                                ; 39 d0
-    jbe short 057eah                          ; 76 2e
-    mov bx, 00da2h                            ; bb a2 0d
+    jbe short 05b06h                          ; 76 2e
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 6a c1
+    call 01931h                               ; e8 4e be
     push dword [bp-008h]                      ; 66 ff 76 f8
     push di                                   ; 57
     mov ax, word [bp+012h]                    ; 8b 46 12
@@ -7808,39 +8092,39 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0065eh                               ; 68 5e 06
-    push 006f2h                               ; 68 f2 06
+    push 0067eh                               ; 68 7e 06
+    push 00712h                               ; 68 12 07
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 8e c1
+    call 01972h                               ; e8 72 be
     add sp, strict byte 00010h                ; 83 c4 10
-    jmp near 05a52h                           ; e9 68 02
+    jmp near 05d77h                           ; e9 71 02
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     cmp ax, strict word 00004h                ; 3d 04 00
-    jne short 057f8h                          ; 75 03
-    jmp near 056edh                           ; e9 f5 fe
+    jne short 05b14h                          ; 75 03
+    jmp near 05a09h                           ; e9 f5 fe
     movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
-    imul bx, bx, strict byte 00018h           ; 6b db 18
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
     mov es, [bp-004h]                         ; 8e 46 fc
     add bx, si                                ; 01 f3
-    cmp cx, word [es:bx+02ch]                 ; 26 3b 4f 2c
-    jne short 05819h                          ; 75 0f
-    mov ax, word [es:bx+030h]                 ; 26 8b 47 30
+    cmp cx, word [es:bx+030h]                 ; 26 3b 4f 30
+    jne short 05b35h                          ; 75 0f
+    mov ax, word [es:bx+034h]                 ; 26 8b 47 34
     cmp ax, word [bp-00ah]                    ; 3b 46 f6
-    jne short 05819h                          ; 75 06
+    jne short 05b35h                          ; 75 06
     cmp byte [bp-002h], 008h                  ; 80 7e fe 08
-    jc short 05849h                           ; 72 30
+    jc short 05b65h                           ; 72 30
     mov ax, di                                ; 89 f8
     xor dx, dx                                ; 31 d2
     mov bx, cx                                ; 89 cb
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 55 3f
+    call 09d09h                               ; e8 c9 41
     xor bx, bx                                ; 31 db
     add ax, word [bp-008h]                    ; 03 46 f8
     adc dx, bx                                ; 11 da
     mov bx, word [bp-00ah]                    ; 8b 5e f6
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 46 3f
+    call 09d09h                               ; e8 ba 41
     xor bx, bx                                ; 31 db
     add ax, word [bp-006h]                    ; 03 46 fa
     adc dx, bx                                ; 11 da
@@ -7850,32 +8134,34 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     mov word [bp-00eh], dx                    ; 89 56 f2
     mov word [bp-006h], bx                    ; 89 5e fa
     mov es, [bp-004h]                         ; 8e 46 fc
-    db  066h, 026h, 0c7h, 044h, 014h, 000h, 000h, 000h, 000h
-    ; mov dword [es:si+014h], strict dword 000000000h ; 66 26 c7 44 14 00 00 00 00
-    mov word [es:si+018h], strict word 00000h ; 26 c7 44 18 00 00
+    db  066h, 026h, 0c7h, 044h, 018h, 000h, 000h, 000h, 000h
+    ; mov dword [es:si+018h], strict dword 000000000h ; 66 26 c7 44 18 00 00 00 00
+    mov word [es:si+01ch], strict word 00000h ; 26 c7 44 1c 00 00
     mov ax, word [bp-010h]                    ; 8b 46 f0
     mov word [es:si], ax                      ; 26 89 04
     mov ax, word [bp-00eh]                    ; 8b 46 f2
     mov word [es:si+002h], ax                 ; 26 89 44 02
+    db  066h, 026h, 0c7h, 044h, 004h, 000h, 000h, 000h, 000h
+    ; mov dword [es:si+004h], strict dword 000000000h ; 66 26 c7 44 04 00 00 00 00
     mov ax, word [bp+010h]                    ; 8b 46 10
     mov dx, word [bp+006h]                    ; 8b 56 06
-    mov word [es:si+004h], ax                 ; 26 89 44 04
-    mov word [es:si+006h], dx                 ; 26 89 54 06
+    mov word [es:si+008h], ax                 ; 26 89 44 08
+    mov word [es:si+00ah], dx                 ; 26 89 54 0a
     mov ax, word [bp-00ch]                    ; 8b 46 f4
-    mov word [es:si+00ah], ax                 ; 26 89 44 0a
-    mov word [es:si+00ch], 00200h             ; 26 c7 44 0c 00 02
-    mov word [es:si+00eh], di                 ; 26 89 7c 0e
+    mov word [es:si+00eh], ax                 ; 26 89 44 0e
+    mov word [es:si+010h], 00200h             ; 26 c7 44 10 00 02
+    mov word [es:si+012h], di                 ; 26 89 7c 12
     mov ax, word [bp-008h]                    ; 8b 46 f8
-    mov word [es:si+010h], ax                 ; 26 89 44 10
+    mov word [es:si+014h], ax                 ; 26 89 44 14
     mov ax, word [bp-006h]                    ; 8b 46 fa
-    mov word [es:si+012h], ax                 ; 26 89 44 12
+    mov word [es:si+016h], ax                 ; 26 89 44 16
     mov al, byte [bp-002h]                    ; 8a 46 fe
-    mov byte [es:si+008h], al                 ; 26 88 44 08
+    mov byte [es:si+00ch], al                 ; 26 88 44 0c
     movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov bx, si                                ; 89 f3
     add bx, ax                                ; 01 c3
-    movzx ax, byte [es:bx+01eh]               ; 26 0f b6 47 1e
+    movzx ax, byte [es:bx+022h]               ; 26 0f b6 47 22
     mov bx, ax                                ; 89 c3
     sal bx, 002h                              ; c1 e3 02
     mov ax, word [bp+016h]                    ; 8b 46 16
@@ -7889,48 +8175,48 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor al, al                                ; 30 c0
     mov es, [bp-004h]                         ; 8e 46 fc
-    mov bx, word [es:si+014h]                 ; 26 8b 5c 14
+    mov bx, word [es:si+018h]                 ; 26 8b 5c 18
     or bx, ax                                 ; 09 c3
     mov word [bp+016h], bx                    ; 89 5e 16
     test dl, dl                               ; 84 d2
-    je near 056edh                            ; 0f 84 13 fe
-    mov bx, 00da2h                            ; bb a2 0d
+    je near 05a09h                            ; 0f 84 0a fe
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 4c c0
+    call 01931h                               ; e8 27 bd
     movzx ax, dl                              ; 0f b6 c2
     push ax                                   ; 50
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0065eh                               ; 68 5e 06
-    push 00739h                               ; 68 39 07
+    push 0067eh                               ; 68 7e 06
+    push 00759h                               ; 68 59 07
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 77 c0
+    call 01972h                               ; e8 52 bd
     add sp, strict byte 0000ah                ; 83 c4 0a
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 00ch                               ; 80 cc 0c
-    jmp near 05a5ah                           ; e9 51 01
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 05d7fh                           ; e9 51 01
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 1d c0
-    push 0075ah                               ; 68 5a 07
+    call 01931h                               ; e8 f8 bc
+    push 0077ah                               ; 68 7a 07
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 56 c0
+    call 01972h                               ; e8 31 bd
     add sp, strict byte 00004h                ; 83 c4 04
-    jmp near 056edh                           ; e9 cb fd
+    jmp near 05a09h                           ; e9 c2 fd
     movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov es, [bp-004h]                         ; 8e 46 fc
     mov bx, si                                ; 89 f3
     add bx, ax                                ; 01 c3
-    mov di, word [es:bx+028h]                 ; 26 8b 7f 28
-    mov cx, word [es:bx+026h]                 ; 26 8b 4f 26
-    mov ax, word [es:bx+02ah]                 ; 26 8b 47 2a
+    mov di, word [es:bx+02ch]                 ; 26 8b 7f 2c
+    mov cx, word [es:bx+02ah]                 ; 26 8b 4f 2a
+    mov ax, word [es:bx+02eh]                 ; 26 8b 47 2e
     mov word [bp-00ah], ax                    ; 89 46 f6
-    movzx ax, byte [es:si+0019eh]             ; 26 0f b6 84 9e 01
+    movzx ax, byte [es:si+001e2h]             ; 26 0f b6 84 e2 01
     mov word [bp-00ch], ax                    ; 89 46 f4
     mov byte [bp+016h], 000h                  ; c6 46 16 00
     mov dx, word [bp+014h]                    ; 8b 56 14
@@ -7963,7 +8249,7 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     mov dx, word [bp-00ch]                    ; 8b 56 f4
     or dx, ax                                 ; 09 c2
     mov word [bp+012h], dx                    ; 89 56 12
-    jmp near 056edh                           ; e9 55 fd
+    jmp near 05a09h                           ; e9 4c fd
     movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
     cwd                                       ; 99
     db  02bh, 0c2h
@@ -7972,36 +8258,36 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     imul ax, ax, strict byte 00006h           ; 6b c0 06
     mov es, [bp-004h]                         ; 8e 46 fc
     add si, ax                                ; 01 c6
-    mov dx, word [es:si+001c2h]               ; 26 8b 94 c2 01
+    mov dx, word [es:si+00206h]               ; 26 8b 94 06 02
     add dx, strict byte 00007h                ; 83 c2 07
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     and AL, strict byte 0c0h                  ; 24 c0
     cmp AL, strict byte 040h                  ; 3c 40
-    jne short 059bdh                          ; 75 03
-    jmp near 056edh                           ; e9 30 fd
+    jne short 05ce2h                          ; 75 03
+    jmp near 05a09h                           ; e9 27 fd
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 0aah                               ; 80 cc aa
-    jmp near 05a5ah                           ; e9 92 00
+    jmp near 05d7fh                           ; e9 92 00
     movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov es, [bp-004h]                         ; 8e 46 fc
     add si, ax                                ; 01 c6
-    mov di, word [es:si+02eh]                 ; 26 8b 7c 2e
-    mov ax, word [es:si+02ch]                 ; 26 8b 44 2c
-    mov word [bp-008h], ax                    ; 89 46 f8
+    mov di, word [es:si+032h]                 ; 26 8b 7c 32
     mov ax, word [es:si+030h]                 ; 26 8b 44 30
+    mov word [bp-008h], ax                    ; 89 46 f8
+    mov ax, word [es:si+034h]                 ; 26 8b 44 34
     mov word [bp-006h], ax                    ; 89 46 fa
     mov ax, di                                ; 89 f8
     xor dx, dx                                ; 31 d2
     mov bx, word [bp-008h]                    ; 8b 5e f8
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 87 3d
+    call 09d09h                               ; e8 f2 3f
     mov bx, word [bp-006h]                    ; 8b 5e fa
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 7f 3d
+    call 09d09h                               ; e8 ea 3f
     mov word [bp-010h], ax                    ; 89 46 f0
     mov word [bp-00eh], dx                    ; 89 56 f2
     mov word [bp+014h], dx                    ; 89 56 14
@@ -8010,30 +8296,30 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     xor ah, ah                                ; 30 e4
     or ah, 003h                               ; 80 cc 03
     mov word [bp+016h], ax                    ; 89 46 16
-    jmp near 056f1h                           ; e9 dd fc
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 05a0dh                           ; e9 d4 fc
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 12 bf
+    call 01931h                               ; e8 ed bb
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0065eh                               ; 68 5e 06
-    push 00774h                               ; 68 74 07
+    push 0067eh                               ; 68 7e 06
+    push 00794h                               ; 68 94 07
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 41 bf
+    call 01972h                               ; e8 1c bc
     add sp, strict byte 00008h                ; 83 c4 08
-    jmp near 056edh                           ; e9 b6 fc
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 05a09h                           ; e9 ad fc
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 ef be
+    call 01931h                               ; e8 ca bb
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 0065eh                               ; 68 5e 06
-    push 007a7h                               ; 68 a7 07
-    jmp near 05784h                           ; e9 32 fd
+    push 0067eh                               ; 68 7e 06
+    push 007c7h                               ; 68 c7 07
+    jmp near 05aa0h                           ; e9 29 fd
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 001h                               ; 80 cc 01
@@ -8043,415 +8329,424 @@ _int13_harddisk:                             ; 0xf5654 LB 0x441
     xor bh, bh                                ; 30 ff
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 f0 bb
+    call 0165eh                               ; e8 cb b8
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
-    jmp near 05700h                           ; e9 8b fc
-    xor byte [bp+di+048h], bl                 ; 30 5b 48
-    pop bx                                    ; 5b
-    dec ax                                    ; 48
-    pop bx                                    ; 5b
-    dec ax                                    ; 48
-    pop bx                                    ; 5b
-    neg word [bp-075h]                        ; f7 5e 8b
-    pop sp                                    ; 5c
-    dec ax                                    ; 48
-    pop bx                                    ; 5b
-    xchg cx, ax                               ; 91
-    pop sp                                    ; 5c
-    neg word [bp+046h]                        ; f7 5e 46
-    pop di                                    ; 5f
-    inc si                                    ; 46
-    pop di                                    ; 5f
-    inc si                                    ; 46
-    pop di                                    ; 5f
-    inc si                                    ; 46
-    pop di                                    ; 5f
-    push CS                                   ; 0e
-    pop di                                    ; 5f
-    inc si                                    ; 46
-    pop di                                    ; 5f
-    inc si                                    ; 46
+    jmp near 05a1ch                           ; e9 82 fc
+    pop ax                                    ; 58
+    pop si                                    ; 5e
+    jo short 05dfch                           ; 70 5e
+    jo short 05dfeh                           ; 70 5e
+    jo short 05e00h                           ; 70 5e
+    inc sp                                    ; 44
+    db  062h
+    lds bx, [bx+070h]                         ; c5 5f 70
+    pop si                                    ; 5e
+    retf                                      ; cb
     pop di                                    ; 5f
-_int13_harddisk_ext:                         ; 0xf5a95 LB 0x4cc
+    inc sp                                    ; 44
+    bound dx, [bp+di-06c9eh]                  ; 62 93 62 93
+    bound dx, [bp+di-06c9eh]                  ; 62 93 62 93
+    bound bx, [bp+di+062h]                    ; 62 5b 62
+    xchg bx, ax                               ; 93
+    db  062h
+    xchg bx, ax                               ; 93
+    db  062h
+_int13_harddisk_ext:                         ; 0xf5dba LB 0x4f4
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
-    sub sp, strict byte 00028h                ; 83 ec 28
+    sub sp, strict byte 00026h                ; 83 ec 26
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 c8 bb
+    call 0166ch                               ; e8 a3 b8
     mov word [bp-014h], ax                    ; 89 46 ec
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 bc bb
-    mov si, 00122h                            ; be 22 01
-    mov word [bp-026h], ax                    ; 89 46 da
+    call 0166ch                               ; e8 97 b8
+    mov word [bp-008h], 00122h                ; c7 46 f8 22 01
+    mov word [bp-006h], ax                    ; 89 46 fa
     xor bx, bx                                ; 31 db
     mov dx, 0008eh                            ; ba 8e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 9d bb
+    call 0165eh                               ; e8 76 b8
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     xor ah, ah                                ; 30 e4
     cmp ax, 00080h                            ; 3d 80 00
-    jc short 05ad0h                           ; 72 05
+    jc short 05df7h                           ; 72 05
     cmp ax, 00090h                            ; 3d 90 00
-    jc short 05aeeh                           ; 72 1e
+    jc short 05e15h                           ; 72 1e
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     xor ah, ah                                ; 30 e4
     push ax                                   ; 50
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 007d5h                               ; 68 d5 07
-    push 0066dh                               ; 68 6d 06
+    push 007f5h                               ; 68 f5 07
+    push 0068dh                               ; 68 8d 06
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 8a be
+    call 01972h                               ; e8 63 bb
     add sp, strict byte 0000ah                ; 83 c4 0a
-    jmp near 05f24h                           ; e9 36 04
+    jmp near 06271h                           ; e9 5c 04
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     xor ah, ah                                ; 30 e4
-    mov es, [bp-026h]                         ; 8e 46 da
-    mov bx, si                                ; 89 f3
+    les bx, [bp-008h]                         ; c4 5e f8
     add bx, ax                                ; 01 c3
-    mov cl, byte [es:bx+0011fh]               ; 26 8a 8f 1f 01
-    cmp cl, 010h                              ; 80 f9 10
-    jc short 05b14h                           ; 72 10
+    mov dl, byte [es:bx+00163h]               ; 26 8a 97 63 01
+    mov byte [bp-004h], dl                    ; 88 56 fc
+    cmp dl, 010h                              ; 80 fa 10
+    jc short 05e3ch                           ; 72 10
     push ax                                   ; 50
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 007d5h                               ; 68 d5 07
-    push 00698h                               ; 68 98 06
-    jmp short 05ae3h                          ; eb cf
+    push 007f5h                               ; 68 f5 07
+    push 006b8h                               ; 68 b8 06
+    jmp short 05e0ah                          ; eb ce
     mov bx, word [bp+016h]                    ; 8b 5e 16
     shr bx, 008h                              ; c1 eb 08
     sub bx, strict byte 00041h                ; 83 eb 41
     cmp bx, strict byte 0000fh                ; 83 fb 0f
-    jnbe near 05f46h                          ; 0f 87 22 04
+    jnbe near 06293h                          ; 0f 87 47 04
     add bx, bx                                ; 01 db
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
-    jmp word [cs:bx+05a75h]                   ; 2e ff a7 75 5a
+    jmp word [cs:bx+05d9ah]                   ; 2e ff a7 9a 5d
     mov word [bp+010h], 0aa55h                ; c7 46 10 55 aa
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 030h                               ; 80 cc 30
     mov word [bp+016h], ax                    ; 89 46 16
     mov word [bp+014h], strict word 00007h    ; c7 46 14 07 00
-    jmp near 05efbh                           ; e9 b3 03
-    mov bx, word [bp+00ah]                    ; 8b 5e 0a
+    jmp near 06248h                           ; e9 d8 03
+    mov di, word [bp+00ah]                    ; 8b 7e 0a
     mov es, [bp+004h]                         ; 8e 46 04
-    mov di, bx                                ; 89 df
-    mov [bp-010h], es                         ; 8c 46 f0
-    mov ax, word [es:bx+002h]                 ; 26 8b 47 02
+    mov word [bp-01ch], di                    ; 89 7e e4
+    mov [bp-01ah], es                         ; 8c 46 e6
+    mov ax, word [es:di+002h]                 ; 26 8b 45 02
     mov word [bp-012h], ax                    ; 89 46 ee
-    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
-    mov word [bp-018h], ax                    ; 89 46 e8
-    mov ax, word [es:bx+004h]                 ; 26 8b 47 04
+    mov ax, word [es:di+006h]                 ; 26 8b 45 06
     mov word [bp-016h], ax                    ; 89 46 ea
-    mov ax, word [es:bx+00ch]                 ; 26 8b 47 0c
-    mov word [bp-00ah], ax                    ; 89 46 f6
-    mov ax, word [es:bx+00eh]                 ; 26 8b 47 0e
-    or ax, word [bp-00ah]                     ; 0b 46 f6
-    je short 05b89h                           ; 74 11
-    mov ax, word [bp+016h]                    ; 8b 46 16
-    shr ax, 008h                              ; c1 e8 08
-    push ax                                   ; 50
-    push 007d5h                               ; 68 d5 07
-    push 007e8h                               ; 68 e8 07
-    push strict byte 00007h                   ; 6a 07
-    jmp short 05bd3h                          ; eb 4a
-    mov es, [bp-010h]                         ; 8e 46 f0
-    mov ax, word [es:di+008h]                 ; 26 8b 45 08
-    mov word [bp-00ah], ax                    ; 89 46 f6
-    mov ax, word [es:di+00ah]                 ; 26 8b 45 0a
-    movzx dx, cl                              ; 0f b6 d1
-    imul dx, dx, strict byte 00018h           ; 6b d2 18
-    mov es, [bp-026h]                         ; 8e 46 da
-    mov bx, si                                ; 89 f3
-    add bx, dx                                ; 01 d3
-    mov ch, byte [es:bx+01eh]                 ; 26 8a 6f 1e
-    cmp ax, word [es:bx+034h]                 ; 26 3b 47 34
-    jnbe short 05bb9h                         ; 77 0b
-    jne short 05bdch                          ; 75 2c
-    mov dx, word [bp-00ah]                    ; 8b 56 f6
-    cmp dx, word [es:bx+032h]                 ; 26 3b 57 32
-    jc short 05bdch                           ; 72 23
-    mov bx, 00da2h                            ; bb a2 0d
+    mov ax, word [es:di+004h]                 ; 26 8b 45 04
+    mov word [bp-018h], ax                    ; 89 46 e8
+    mov dx, word [es:di+00ch]                 ; 26 8b 55 0c
+    mov cx, word [es:di+00eh]                 ; 26 8b 4d 0e
+    xor ax, ax                                ; 31 c0
+    xor bx, bx                                ; 31 db
+    mov si, strict word 00020h                ; be 20 00
+    call 09d3ah                               ; e8 97 3e
+    mov word [bp-00eh], bx                    ; 89 5e f2
+    mov bx, word [es:di+008h]                 ; 26 8b 5d 08
+    mov di, word [es:di+00ah]                 ; 26 8b 7d 0a
+    or dx, bx                                 ; 09 da
+    or cx, di                                 ; 09 f9
+    movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
+    les di, [bp-008h]                         ; c4 7e f8
+    add di, bx                                ; 01 df
+    mov bl, byte [es:di+022h]                 ; 26 8a 5d 22
+    cmp ax, word [es:di+03ch]                 ; 26 3b 45 3c
+    jnbe short 05eeah                         ; 77 22
+    jne short 05f0dh                          ; 75 43
+    mov si, word [bp-00eh]                    ; 8b 76 f2
+    cmp si, word [es:di+03ah]                 ; 26 3b 75 3a
+    jnbe short 05eeah                         ; 77 17
+    mov si, word [bp-00eh]                    ; 8b 76 f2
+    cmp si, word [es:di+03ah]                 ; 26 3b 75 3a
+    jne short 05f0dh                          ; 75 31
+    cmp cx, word [es:di+038h]                 ; 26 3b 4d 38
+    jnbe short 05eeah                         ; 77 08
+    jne short 05f0dh                          ; 75 29
+    cmp dx, word [es:di+036h]                 ; 26 3b 55 36
+    jc short 05f0dh                           ; 72 23
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 6d bd
+    call 01931h                               ; e8 3c ba
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 007d5h                               ; 68 d5 07
-    push 00811h                               ; 68 11 08
+    push 007f5h                               ; 68 f5 07
+    push 00808h                               ; 68 08 08
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 9c bd
+    call 01972h                               ; e8 6b ba
     add sp, strict byte 00008h                ; 83 c4 08
-    jmp near 05f24h                           ; e9 48 03
-    mov dx, word [bp+016h]                    ; 8b 56 16
-    shr dx, 008h                              ; c1 ea 08
-    mov word [bp-00ch], dx                    ; 89 56 f4
-    cmp dx, strict byte 00044h                ; 83 fa 44
-    je near 05ef7h                            ; 0f 84 0b 03
-    cmp dx, strict byte 00047h                ; 83 fa 47
-    je near 05ef7h                            ; 0f 84 04 03
-    mov es, [bp-026h]                         ; 8e 46 da
-    db  066h, 026h, 0c7h, 044h, 014h, 000h, 000h, 000h, 000h
-    ; mov dword [es:si+014h], strict dword 000000000h ; 66 26 c7 44 14 00 00 00 00
-    mov word [es:si+018h], strict word 00000h ; 26 c7 44 18 00 00
-    mov dx, word [bp-00ah]                    ; 8b 56 f6
-    mov word [es:si], dx                      ; 26 89 14
-    mov word [es:si+002h], ax                 ; 26 89 44 02
-    mov ax, word [bp-016h]                    ; 8b 46 ea
+    jmp near 06271h                           ; e9 64 03
+    mov di, word [bp+016h]                    ; 8b 7e 16
+    shr di, 008h                              ; c1 ef 08
+    cmp di, strict byte 00044h                ; 83 ff 44
+    je near 06244h                            ; 0f 84 2a 03
+    cmp di, strict byte 00047h                ; 83 ff 47
+    je near 06244h                            ; 0f 84 23 03
+    les si, [bp-008h]                         ; c4 76 f8
+    db  066h, 026h, 0c7h, 044h, 018h, 000h, 000h, 000h, 000h
+    ; mov dword [es:si+018h], strict dword 000000000h ; 66 26 c7 44 18 00 00 00 00
+    mov word [es:si+01ch], strict word 00000h ; 26 c7 44 1c 00 00
+    mov word [es:si+006h], ax                 ; 26 89 44 06
+    mov ax, word [bp-00eh]                    ; 8b 46 f2
     mov word [es:si+004h], ax                 ; 26 89 44 04
+    mov word [es:si+002h], cx                 ; 26 89 4c 02
+    mov word [es:si], dx                      ; 26 89 14
     mov ax, word [bp-018h]                    ; 8b 46 e8
-    mov word [es:si+006h], ax                 ; 26 89 44 06
-    mov ax, word [bp-012h]                    ; 8b 46 ee
+    mov word [es:si+008h], ax                 ; 26 89 44 08
+    mov ax, word [bp-016h]                    ; 8b 46 ea
     mov word [es:si+00ah], ax                 ; 26 89 44 0a
-    mov word [es:si+00ch], 00200h             ; 26 c7 44 0c 00 02
-    mov word [es:si+012h], strict word 00000h ; 26 c7 44 12 00 00
-    mov byte [es:si+008h], cl                 ; 26 88 4c 08
-    mov bx, word [bp-00ch]                    ; 8b 5e f4
-    add bx, bx                                ; 01 db
-    movzx ax, ch                              ; 0f b6 c5
-    sal ax, 002h                              ; c1 e0 02
-    add bx, ax                                ; 01 c3
+    mov ax, word [bp-012h]                    ; 8b 46 ee
+    mov word [es:si+00eh], ax                 ; 26 89 44 0e
+    mov word [es:si+010h], 00200h             ; 26 c7 44 10 00 02
+    mov word [es:si+016h], strict word 00000h ; 26 c7 44 16 00 00
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    mov byte [es:si+00ch], al                 ; 26 88 44 0c
+    mov dx, di                                ; 89 fa
+    add dx, di                                ; 01 fa
+    movzx ax, bl                              ; 0f b6 c3
+    mov bx, ax                                ; 89 c3
+    sal bx, 002h                              ; c1 e3 02
+    add bx, dx                                ; 01 d3
     push ES                                   ; 06
     push si                                   ; 56
     call word [word bx-00002h]                ; ff 97 fe ff
     mov dx, ax                                ; 89 c2
-    mov es, [bp-026h]                         ; 8e 46 da
-    mov ax, word [es:si+014h]                 ; 26 8b 44 14
+    mov es, [bp-006h]                         ; 8e 46 fa
+    mov bx, si                                ; 89 f3
+    mov ax, word [es:bx+018h]                 ; 26 8b 47 18
     mov word [bp-012h], ax                    ; 89 46 ee
-    mov es, [bp-010h]                         ; 8e 46 f0
-    mov word [es:di+002h], ax                 ; 26 89 45 02
+    les bx, [bp-01ch]                         ; c4 5e e4
+    mov word [es:bx+002h], ax                 ; 26 89 47 02
     test dl, dl                               ; 84 d2
-    je near 05ef7h                            ; 0f 84 97 02
-    mov bx, 00da2h                            ; bb a2 0d
+    je near 06244h                            ; 0f 84 a8 02
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 c6 bc
+    call 01931h                               ; e8 8a b9
     movzx ax, dl                              ; 0f b6 c2
     push ax                                   ; 50
-    push word [bp-00ch]                       ; ff 76 f4
-    push 007d5h                               ; 68 d5 07
-    push 00739h                               ; 68 39 07
+    push di                                   ; 57
+    push 007f5h                               ; 68 f5 07
+    push 00759h                               ; 68 59 07
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 f5 bc
+    call 01972h                               ; e8 bb b9
     add sp, strict byte 0000ah                ; 83 c4 0a
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 00ch                               ; 80 cc 0c
-    jmp near 05f2ch                           ; e9 a1 02
+    jmp near 06279h                           ; e9 b4 02
     or ah, 0b2h                               ; 80 cc b2
-    jmp near 05f2ch                           ; e9 9b 02
+    jmp near 06279h                           ; e9 ae 02
     mov bx, word [bp+00ah]                    ; 8b 5e 0a
     mov ax, word [bp+004h]                    ; 8b 46 04
-    mov word [bp-006h], ax                    ; 89 46 fa
-    mov word [bp-004h], ax                    ; 89 46 fc
-    mov es, ax                                ; 8e c0
+    mov word [bp-00ch], ax                    ; 89 46 f4
     mov di, bx                                ; 89 df
-    mov ax, word [es:di]                      ; 26 8b 05
-    mov word [bp-00eh], ax                    ; 89 46 f2
+    mov word [bp-00ah], ax                    ; 89 46 f6
+    mov es, ax                                ; 8e c0
+    mov ax, word [es:bx]                      ; 26 8b 07
+    mov word [bp-010h], ax                    ; 89 46 f0
     cmp ax, strict word 0001ah                ; 3d 1a 00
-    jc near 05f24h                            ; 0f 82 76 02
-    jc near 05d35h                            ; 0f 82 83 00
-    movzx ax, cl                              ; 0f b6 c1
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov es, [bp-026h]                         ; 8e 46 da
-    mov di, si                                ; 89 f7
-    add di, ax                                ; 01 c7
-    mov ax, word [es:di+02eh]                 ; 26 8b 45 2e
-    mov word [bp-028h], ax                    ; 89 46 d8
-    mov ax, word [es:di+02ch]                 ; 26 8b 45 2c
-    mov word [bp-01eh], ax                    ; 89 46 e2
-    mov ax, word [es:di+030h]                 ; 26 8b 45 30
+    jc near 06271h                            ; 0f 82 89 02
+    jc near 06087h                            ; 0f 82 9b 00
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    les bx, [bp-008h]                         ; c4 5e f8
+    add bx, ax                                ; 01 c3
+    mov ax, word [es:bx+032h]                 ; 26 8b 47 32
+    mov word [bp-026h], ax                    ; 89 46 da
+    mov ax, word [es:bx+030h]                 ; 26 8b 47 30
+    mov word [bp-020h], ax                    ; 89 46 e0
+    mov ax, word [es:bx+034h]                 ; 26 8b 47 34
     mov word [bp-024h], ax                    ; 89 46 dc
-    mov ax, word [es:di+032h]                 ; 26 8b 45 32
-    mov word [bp-00ah], ax                    ; 89 46 f6
-    mov ax, word [es:di+034h]                 ; 26 8b 45 34
-    mov dx, word [es:di+024h]                 ; 26 8b 55 24
-    mov word [bp-022h], dx                    ; 89 56 de
-    mov es, [bp-006h]                         ; 8e 46 fa
-    mov di, bx                                ; 89 df
-    db  066h, 026h, 0c7h, 005h, 01ah, 000h, 002h, 000h
-    ; mov dword [es:di], strict dword 00002001ah ; 66 26 c7 05 1a 00 02 00
-    mov dx, word [bp-028h]                    ; 8b 56 d8
-    mov word [es:di+004h], dx                 ; 26 89 55 04
-    mov word [es:di+006h], strict word 00000h ; 26 c7 45 06 00 00
-    mov dx, word [bp-01eh]                    ; 8b 56 e2
-    mov word [es:di+008h], dx                 ; 26 89 55 08
-    mov word [es:di+00ah], strict word 00000h ; 26 c7 45 0a 00 00
-    mov dx, word [bp-024h]                    ; 8b 56 dc
-    mov word [es:di+00ch], dx                 ; 26 89 55 0c
-    mov word [es:di+00eh], strict word 00000h ; 26 c7 45 0e 00 00
-    mov dx, word [bp-022h]                    ; 8b 56 de
-    mov word [es:di+018h], dx                 ; 26 89 55 18
-    mov dx, word [bp-00ah]                    ; 8b 56 f6
-    mov word [es:di+010h], dx                 ; 26 89 55 10
-    mov word [es:di+012h], ax                 ; 26 89 45 12
-    db  066h, 026h, 0c7h, 045h, 014h, 000h, 000h, 000h, 000h
-    ; mov dword [es:di+014h], strict dword 000000000h ; 66 26 c7 45 14 00 00 00 00
-    cmp word [bp-00eh], strict byte 0001eh    ; 83 7e f2 1e
-    jc near 05e41h                            ; 0f 82 04 01
-    mov es, [bp-004h]                         ; 8e 46 fc
-    mov word [es:bx], strict word 0001eh      ; 26 c7 07 1e 00
+    mov ax, word [es:bx+03ch]                 ; 26 8b 47 3c
+    mov dx, word [es:bx+03ah]                 ; 26 8b 57 3a
+    mov word [bp-00eh], dx                    ; 89 56 f2
+    mov cx, word [es:bx+038h]                 ; 26 8b 4f 38
+    mov dx, word [es:bx+036h]                 ; 26 8b 57 36
+    mov bx, word [es:bx+028h]                 ; 26 8b 5f 28
+    mov word [bp-022h], bx                    ; 89 5e de
+    mov es, [bp-00ch]                         ; 8e 46 f4
+    mov bx, di                                ; 89 fb
+    db  066h, 026h, 0c7h, 007h, 01ah, 000h, 002h, 000h
+    ; mov dword [es:bx], strict dword 00002001ah ; 66 26 c7 07 1a 00 02 00
+    mov bx, word [bp-026h]                    ; 8b 5e da
+    mov si, di                                ; 89 fe
+    mov word [es:si+004h], bx                 ; 26 89 5c 04
+    mov bx, si                                ; 89 f3
+    mov word [es:bx+006h], strict word 00000h ; 26 c7 47 06 00 00
+    mov bx, word [bp-020h]                    ; 8b 5e e0
+    mov word [es:si+008h], bx                 ; 26 89 5c 08
+    mov bx, si                                ; 89 f3
+    mov word [es:bx+00ah], strict word 00000h ; 26 c7 47 0a 00 00
+    mov bx, word [bp-024h]                    ; 8b 5e dc
+    mov word [es:si+00ch], bx                 ; 26 89 5c 0c
+    mov bx, si                                ; 89 f3
+    mov word [es:bx+00eh], strict word 00000h ; 26 c7 47 0e 00 00
+    mov bx, word [bp-022h]                    ; 8b 5e de
+    mov word [es:si+018h], bx                 ; 26 89 5c 18
+    mov bx, si                                ; 89 f3
+    mov word [es:bx+010h], dx                 ; 26 89 57 10
+    mov word [es:bx+012h], cx                 ; 26 89 4f 12
+    mov bx, word [bp-00eh]                    ; 8b 5e f2
+    mov si, strict word 00020h                ; be 20 00
+    call 09d4ah                               ; e8 cd 3c
+    mov bx, di                                ; 89 fb
+    mov word [es:bx+014h], dx                 ; 26 89 57 14
+    mov word [es:bx+016h], cx                 ; 26 89 4f 16
+    cmp word [bp-010h], strict byte 0001eh    ; 83 7e f0 1e
+    jc near 0618ch                            ; 0f 82 fd 00
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    mov word [es:di], strict word 0001eh      ; 26 c7 05 1e 00
     mov ax, word [bp-014h]                    ; 8b 46 ec
-    mov word [es:bx+01ch], ax                 ; 26 89 47 1c
-    mov word [es:bx+01ah], 00312h             ; 26 c7 47 1a 12 03
-    movzx ax, cl                              ; 0f b6 c1
-    mov word [bp-020h], ax                    ; 89 46 e0
+    mov word [es:di+01ch], ax                 ; 26 89 45 1c
+    mov word [es:di+01ah], 00356h             ; 26 c7 45 1a 56 03
+    movzx cx, byte [bp-004h]                  ; 0f b6 4e fc
+    mov ax, cx                                ; 89 c8
     cwd                                       ; 99
     db  02bh, 0c2h
     ; sub ax, dx                                ; 2b c2
     sar ax, 1                                 ; d1 f8
-    movzx di, al                              ; 0f b6 f8
-    imul di, di, strict byte 00006h           ; 6b ff 06
-    mov es, [bp-026h]                         ; 8e 46 da
-    add di, si                                ; 01 f7
-    mov ax, word [es:di+001c2h]               ; 26 8b 85 c2 01
-    mov word [bp-01ah], ax                    ; 89 46 e6
-    mov ax, word [es:di+001c4h]               ; 26 8b 85 c4 01
-    mov word [bp-01ch], ax                    ; 89 46 e4
-    mov ch, byte [es:di+001c1h]               ; 26 8a ad c1 01
-    imul di, word [bp-020h], strict byte 00018h ; 6b 7e e0 18
-    add di, si                                ; 01 f7
-    mov ah, byte [es:di+022h]                 ; 26 8a 65 22
-    mov al, byte [es:di+023h]                 ; 26 8a 45 23
+    movzx bx, al                              ; 0f b6 d8
+    imul bx, bx, strict byte 00006h           ; 6b db 06
+    mov es, [bp-006h]                         ; 8e 46 fa
+    add bx, word [bp-008h]                    ; 03 5e f8
+    mov ax, word [es:bx+00206h]               ; 26 8b 87 06 02
+    mov word [bp-01eh], ax                    ; 89 46 e2
+    mov dx, word [es:bx+00208h]               ; 26 8b 97 08 02
+    mov al, byte [es:bx+00205h]               ; 26 8a 87 05 02
+    mov byte [bp-002h], al                    ; 88 46 fe
+    imul bx, cx, strict byte 0001ch           ; 6b d9 1c
+    add bx, word [bp-008h]                    ; 03 5e f8
+    mov ah, byte [es:bx+026h]                 ; 26 8a 67 26
+    mov al, byte [es:bx+027h]                 ; 26 8a 47 27
     test al, al                               ; 84 c0
-    jne short 05d93h                          ; 75 04
-    xor dx, dx                                ; 31 d2
-    jmp short 05d96h                          ; eb 03
-    mov dx, strict word 00008h                ; ba 08 00
-    or dl, 010h                               ; 80 ca 10
-    mov word [bp-008h], dx                    ; 89 56 f8
+    jne short 060e6h                          ; 75 04
+    xor bx, bx                                ; 31 db
+    jmp short 060e9h                          ; eb 03
+    mov bx, strict word 00008h                ; bb 08 00
+    or bl, 010h                               ; 80 cb 10
     cmp ah, 001h                              ; 80 fc 01
     db  00fh, 094h, 0c4h
     ; sete ah                                   ; 0f 94 c4
-    movzx dx, ah                              ; 0f b6 d4
-    or word [bp-008h], dx                     ; 09 56 f8
+    movzx cx, ah                              ; 0f b6 cc
+    or bx, cx                                 ; 09 cb
     cmp AL, strict byte 001h                  ; 3c 01
     db  00fh, 094h, 0c4h
     ; sete ah                                   ; 0f 94 c4
-    movzx dx, ah                              ; 0f b6 d4
-    or word [bp-008h], dx                     ; 09 56 f8
+    movzx cx, ah                              ; 0f b6 cc
+    or bx, cx                                 ; 09 cb
     cmp AL, strict byte 003h                  ; 3c 03
-    jne short 05dbch                          ; 75 05
+    jne short 0610ah                          ; 75 05
     mov ax, strict word 00003h                ; b8 03 00
-    jmp short 05dbeh                          ; eb 02
+    jmp short 0610ch                          ; eb 02
     xor ax, ax                                ; 31 c0
-    or word [bp-008h], ax                     ; 09 46 f8
-    mov ax, word [bp-01ah]                    ; 8b 46 e6
-    mov es, [bp-026h]                         ; 8e 46 da
-    mov word [es:si+001f0h], ax               ; 26 89 84 f0 01
-    mov ax, word [bp-01ch]                    ; 8b 46 e4
-    mov word [es:si+001f2h], ax               ; 26 89 84 f2 01
-    movzx ax, cl                              ; 0f b6 c1
+    or bx, ax                                 ; 09 c3
+    mov ax, word [bp-01eh]                    ; 8b 46 e2
+    les si, [bp-008h]                         ; c4 76 f8
+    mov word [es:si+00234h], ax               ; 26 89 84 34 02
+    mov word [es:si+00236h], dx               ; 26 89 94 36 02
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
     cwd                                       ; 99
-    mov di, strict word 00002h                ; bf 02 00
-    idiv di                                   ; f7 ff
+    mov cx, strict word 00002h                ; b9 02 00
+    idiv cx                                   ; f7 f9
     or dl, 00eh                               ; 80 ca 0e
-    sal dx, 004h                              ; c1 e2 04
-    mov byte [es:si+001f4h], dl               ; 26 88 94 f4 01
-    mov byte [es:si+001f5h], 0cbh             ; 26 c6 84 f5 01 cb
-    mov byte [es:si+001f6h], ch               ; 26 88 ac f6 01
-    mov word [es:si+001f7h], strict word 00001h ; 26 c7 84 f7 01 01 00
-    mov byte [es:si+001f9h], 000h             ; 26 c6 84 f9 01 00
-    mov ax, word [bp-008h]                    ; 8b 46 f8
-    mov word [es:si+001fah], ax               ; 26 89 84 fa 01
-    mov word [es:si+001fch], strict word 00000h ; 26 c7 84 fc 01 00 00
-    mov byte [es:si+001feh], 011h             ; 26 c6 84 fe 01 11
-    xor ch, ch                                ; 30 ed
-    mov byte [bp-002h], ch                    ; 88 6e fe
-    jmp short 05e22h                          ; eb 06
-    cmp byte [bp-002h], 00fh                  ; 80 7e fe 0f
-    jnc short 05e37h                          ; 73 15
-    movzx dx, byte [bp-002h]                  ; 0f b6 56 fe
-    add dx, 00312h                            ; 81 c2 12 03
+    mov ax, dx                                ; 89 d0
+    sal ax, 004h                              ; c1 e0 04
+    mov byte [es:si+00238h], al               ; 26 88 84 38 02
+    mov byte [es:si+00239h], 0cbh             ; 26 c6 84 39 02 cb
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    mov byte [es:si+0023ah], al               ; 26 88 84 3a 02
+    mov word [es:si+0023bh], strict word 00001h ; 26 c7 84 3b 02 01 00
+    mov byte [es:si+0023dh], 000h             ; 26 c6 84 3d 02 00
+    mov word [es:si+0023eh], bx               ; 26 89 9c 3e 02
+    mov bx, si                                ; 89 f3
+    mov word [es:bx+00240h], strict word 00000h ; 26 c7 87 40 02 00 00
+    mov byte [es:bx+00242h], 011h             ; 26 c6 87 42 02 11
+    xor bl, bl                                ; 30 db
+    xor bh, bh                                ; 30 ff
+    jmp short 0616fh                          ; eb 05
+    cmp bh, 00fh                              ; 80 ff 0f
+    jnc short 06182h                          ; 73 13
+    movzx dx, bh                              ; 0f b6 d7
+    add dx, 00356h                            ; 81 c2 56 03
     mov ax, word [bp-014h]                    ; 8b 46 ec
-    call 01650h                               ; e8 20 b8
-    add ch, al                                ; 00 c5
-    inc byte [bp-002h]                        ; fe 46 fe
-    jmp short 05e1ch                          ; eb e5
-    neg ch                                    ; f6 dd
-    mov es, [bp-026h]                         ; 8e 46 da
-    mov byte [es:si+001ffh], ch               ; 26 88 ac ff 01
-    cmp word [bp-00eh], strict byte 00042h    ; 83 7e f2 42
-    jc near 05ef7h                            ; 0f 82 ae 00
-    movzx ax, cl                              ; 0f b6 c1
+    call 01650h                               ; e8 d4 b4
+    add bl, al                                ; 00 c3
+    db  0feh, 0c7h
+    ; inc bh                                    ; fe c7
+    jmp short 0616ah                          ; eb e8
+    neg bl                                    ; f6 db
+    les si, [bp-008h]                         ; c4 76 f8
+    mov byte [es:si+00243h], bl               ; 26 88 9c 43 02
+    cmp word [bp-010h], strict byte 00042h    ; 83 7e f0 42
+    jc near 06244h                            ; 0f 82 b0 00
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
     cwd                                       ; 99
     db  02bh, 0c2h
     ; sub ax, dx                                ; 2b c2
     sar ax, 1                                 ; d1 f8
     xor ah, ah                                ; 30 e4
     imul ax, ax, strict byte 00006h           ; 6b c0 06
-    mov es, [bp-026h]                         ; 8e 46 da
-    add si, ax                                ; 01 c6
-    mov al, byte [es:si+001c0h]               ; 26 8a 84 c0 01
-    mov dx, word [es:si+001c2h]               ; 26 8b 94 c2 01
-    mov es, [bp-004h]                         ; 8e 46 fc
-    mov word [es:bx], strict word 00042h      ; 26 c7 07 42 00
-    db  066h, 026h, 0c7h, 047h, 01eh, 0ddh, 0beh, 024h, 000h
-    ; mov dword [es:bx+01eh], strict dword 00024beddh ; 66 26 c7 47 1e dd be 24 00
-    mov word [es:bx+022h], strict word 00000h ; 26 c7 47 22 00 00
+    les bx, [bp-008h]                         ; c4 5e f8
+    add bx, ax                                ; 01 c3
+    mov al, byte [es:bx+00204h]               ; 26 8a 87 04 02
+    mov dx, word [es:bx+00206h]               ; 26 8b 97 06 02
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    mov word [es:di], strict word 00042h      ; 26 c7 05 42 00
+    db  066h, 026h, 0c7h, 045h, 01eh, 0ddh, 0beh, 024h, 000h
+    ; mov dword [es:di+01eh], strict dword 00024beddh ; 66 26 c7 45 1e dd be 24 00
+    mov word [es:di+022h], strict word 00000h ; 26 c7 45 22 00 00
     test al, al                               ; 84 c0
-    jne short 05e89h                          ; 75 09
-    db  066h, 026h, 0c7h, 047h, 024h, 049h, 053h, 041h, 020h
-    ; mov dword [es:bx+024h], strict dword 020415349h ; 66 26 c7 47 24 49 53 41 20
-    mov es, [bp-004h]                         ; 8e 46 fc
-    db  066h, 026h, 0c7h, 047h, 028h, 041h, 054h, 041h, 020h
-    ; mov dword [es:bx+028h], strict dword 020415441h ; 66 26 c7 47 28 41 54 41 20
-    db  066h, 026h, 0c7h, 047h, 02ch, 020h, 020h, 020h, 020h
-    ; mov dword [es:bx+02ch], strict dword 020202020h ; 66 26 c7 47 2c 20 20 20 20
+    jne short 061d5h                          ; 75 09
+    db  066h, 026h, 0c7h, 045h, 024h, 049h, 053h, 041h, 020h
+    ; mov dword [es:di+024h], strict dword 020415349h ; 66 26 c7 45 24 49 53 41 20
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    db  066h, 026h, 0c7h, 045h, 028h, 041h, 054h, 041h, 020h
+    ; mov dword [es:di+028h], strict dword 020415441h ; 66 26 c7 45 28 41 54 41 20
+    db  066h, 026h, 0c7h, 045h, 02ch, 020h, 020h, 020h, 020h
+    ; mov dword [es:di+02ch], strict dword 020202020h ; 66 26 c7 45 2c 20 20 20 20
     test al, al                               ; 84 c0
-    jne short 05eb5h                          ; 75 13
-    mov word [es:bx+030h], dx                 ; 26 89 57 30
-    db  066h, 026h, 0c7h, 047h, 032h, 000h, 000h, 000h, 000h
-    ; mov dword [es:bx+032h], strict dword 000000000h ; 66 26 c7 47 32 00 00 00 00
-    mov word [es:bx+036h], strict word 00000h ; 26 c7 47 36 00 00
-    mov al, cl                                ; 88 c8
+    jne short 06201h                          ; 75 13
+    mov word [es:di+030h], dx                 ; 26 89 55 30
+    db  066h, 026h, 0c7h, 045h, 032h, 000h, 000h, 000h, 000h
+    ; mov dword [es:di+032h], strict dword 000000000h ; 66 26 c7 45 32 00 00 00 00
+    mov word [es:di+036h], strict word 00000h ; 26 c7 45 36 00 00
+    mov al, byte [bp-004h]                    ; 8a 46 fc
     and AL, strict byte 001h                  ; 24 01
     xor ah, ah                                ; 30 e4
-    mov es, [bp-004h]                         ; 8e 46 fc
-    mov word [es:bx+038h], ax                 ; 26 89 47 38
-    db  066h, 026h, 0c7h, 047h, 03ah, 000h, 000h, 000h, 000h
-    ; mov dword [es:bx+03ah], strict dword 000000000h ; 66 26 c7 47 3a 00 00 00 00
-    mov word [es:bx+03eh], strict word 00000h ; 26 c7 47 3e 00 00
-    xor cl, cl                                ; 30 c9
-    mov CH, strict byte 01eh                  ; b5 1e
-    jmp short 05edch                          ; eb 05
-    cmp ch, 040h                              ; 80 fd 40
-    jnc short 05eeeh                          ; 73 12
-    movzx dx, ch                              ; 0f b6 d5
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    mov word [es:di+038h], ax                 ; 26 89 45 38
+    db  066h, 026h, 0c7h, 045h, 03ah, 000h, 000h, 000h, 000h
+    ; mov dword [es:di+03ah], strict dword 000000000h ; 66 26 c7 45 3a 00 00 00 00
+    mov word [es:di+03eh], strict word 00000h ; 26 c7 45 3e 00 00
+    xor bl, bl                                ; 30 db
+    mov BH, strict byte 01eh                  ; b7 1e
+    jmp short 06229h                          ; eb 05
+    cmp bh, 040h                              ; 80 ff 40
+    jnc short 0623bh                          ; 73 12
+    movzx dx, bh                              ; 0f b6 d7
     add dx, word [bp+00ah]                    ; 03 56 0a
     mov ax, word [bp+004h]                    ; 8b 46 04
-    call 01650h                               ; e8 68 b7
-    add cl, al                                ; 00 c1
-    db  0feh, 0c5h
-    ; inc ch                                    ; fe c5
-    jmp short 05ed7h                          ; eb e9
-    neg cl                                    ; f6 d9
-    mov es, [bp-004h]                         ; 8e 46 fc
-    mov byte [es:bx+041h], cl                 ; 26 88 4f 41
+    call 01650h                               ; e8 1b b4
+    add bl, al                                ; 00 c3
+    db  0feh, 0c7h
+    ; inc bh                                    ; fe c7
+    jmp short 06224h                          ; eb e9
+    neg bl                                    ; f6 db
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    mov byte [es:di+041h], bl                 ; 26 88 5d 41
     mov byte [bp+017h], 000h                  ; c6 46 17 00
     xor bx, bx                                ; 31 db
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 58 b7
+    call 0165eh                               ; e8 0b b4
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
     cmp ax, strict word 00006h                ; 3d 06 00
-    je short 05ef7h                           ; 74 e4
+    je short 06244h                           ; 74 e4
     cmp ax, strict word 00001h                ; 3d 01 00
-    jc short 05f24h                           ; 72 0c
-    jbe short 05ef7h                          ; 76 dd
+    jc short 06271h                           ; 72 0c
+    jbe short 06244h                          ; 76 dd
     cmp ax, strict word 00003h                ; 3d 03 00
-    jc short 05f24h                           ; 72 05
+    jc short 06271h                           ; 72 05
     cmp ax, strict word 00004h                ; 3d 04 00
-    jbe short 05ef7h                          ; 76 d3
+    jbe short 06244h                          ; 76 d3
     mov ax, word [bp+016h]                    ; 8b 46 16
     xor ah, ah                                ; 30 e4
     or ah, 001h                               ; 80 cc 01
@@ -8461,20 +8756,20 @@ _int13_harddisk_ext:                         ; 0xf5a95 LB 0x4cc
     xor bh, bh                                ; 30 ff
     mov dx, strict word 00074h                ; ba 74 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 1e b7
+    call 0165eh                               ; e8 d1 b3
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
-    jmp short 05f0ah                          ; eb c4
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp short 06257h                          ; eb c4
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 e0 b9
+    call 01931h                               ; e8 93 b6
     mov ax, word [bp+016h]                    ; 8b 46 16
     shr ax, 008h                              ; c1 e8 08
     push ax                                   ; 50
-    push 007d5h                               ; 68 d5 07
-    push 007a7h                               ; 68 a7 07
-    jmp near 05bd1h                           ; e9 70 fc
-_int14_function:                             ; 0xf5f61 LB 0x155
+    push 007f5h                               ; 68 f5 07
+    push 007c7h                               ; 68 c7 07
+    jmp near 05f02h                           ; e9 54 fc
+_int14_function:                             ; 0xf62ae LB 0x155
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -8482,29 +8777,29 @@ _int14_function:                             ; 0xf5f61 LB 0x155
     mov dx, word [bp+00eh]                    ; 8b 56 0e
     add dx, dx                                ; 01 d2
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 fb b6
+    call 0166ch                               ; e8 ae b3
     mov si, ax                                ; 89 c6
     mov bx, ax                                ; 89 c3
     mov dx, word [bp+00eh]                    ; 8b 56 0e
     add dx, strict byte 0007ch                ; 83 c2 7c
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 cf b6
+    call 01650h                               ; e8 82 b3
     mov cl, al                                ; 88 c1
     cmp word [bp+00eh], strict byte 00004h    ; 83 7e 0e 04
-    jnc near 060ach                           ; 0f 83 21 01
+    jnc near 063f9h                           ; 0f 83 21 01
     test si, si                               ; 85 f6
-    jbe near 060ach                           ; 0f 86 1b 01
+    jbe near 063f9h                           ; 0f 86 1b 01
     mov al, byte [bp+013h]                    ; 8a 46 13
     cmp AL, strict byte 001h                  ; 3c 01
-    jc short 05fa9h                           ; 72 11
-    jbe short 05ffdh                          ; 76 63
+    jc short 062f6h                           ; 72 11
+    jbe short 0634ah                          ; 76 63
     cmp AL, strict byte 003h                  ; 3c 03
-    je near 06095h                            ; 0f 84 f5 00
+    je near 063e2h                            ; 0f 84 f5 00
     cmp AL, strict byte 002h                  ; 3c 02
-    je near 0604bh                            ; 0f 84 a5 00
-    jmp near 060a6h                           ; e9 fd 00
+    je near 06398h                            ; 0f 84 a5 00
+    jmp near 063f3h                           ; e9 fd 00
     test al, al                               ; 84 c0
-    jne near 060a6h                           ; 0f 85 f7 00
+    jne near 063f3h                           ; 0f 85 f7 00
     lea dx, [bx+003h]                         ; 8d 57 03
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -8536,17 +8831,17 @@ _int14_function:                             ; 0xf5f61 LB 0x155
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov byte [bp+012h], al                    ; 88 46 12
-    jmp near 06087h                           ; e9 97 00
+    jmp near 063d4h                           ; e9 97 00
     mov AL, strict byte 017h                  ; b0 17
     mov dx, bx                                ; 89 da
     out DX, AL                                ; ee
     lea dx, [bx+001h]                         ; 8d 57 01
     mov AL, strict byte 004h                  ; b0 04
     out DX, AL                                ; ee
-    jmp short 05fd2h                          ; eb d5
+    jmp short 0631fh                          ; eb d5
     mov dx, strict word 0006ch                ; ba 6c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 66 b6
+    call 0166ch                               ; e8 19 b3
     mov si, ax                                ; 89 c6
     lea dx, [bx+005h]                         ; 8d 57 05
     in AL, DX                                 ; ec
@@ -8554,20 +8849,20 @@ _int14_function:                             ; 0xf5f61 LB 0x155
     ; sub ah, ah                                ; 2a e4
     and ax, strict word 00060h                ; 25 60 00
     cmp ax, strict word 00060h                ; 3d 60 00
-    je short 0602dh                           ; 74 17
+    je short 0637ah                           ; 74 17
     test cl, cl                               ; 84 c9
-    je short 0602dh                           ; 74 13
+    je short 0637ah                           ; 74 13
     mov dx, strict word 0006ch                ; ba 6c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 49 b6
+    call 0166ch                               ; e8 fc b2
     cmp ax, si                                ; 39 f0
-    je short 06008h                           ; 74 e1
+    je short 06355h                           ; 74 e1
     mov si, ax                                ; 89 c6
     db  0feh, 0c9h
     ; dec cl                                    ; fe c9
-    jmp short 06008h                          ; eb db
+    jmp short 06355h                          ; eb db
     test cl, cl                               ; 84 c9
-    je short 06037h                           ; 74 06
+    je short 06384h                           ; 74 06
     mov al, byte [bp+012h]                    ; 8a 46 12
     mov dx, bx                                ; 89 da
     out DX, AL                                ; ee
@@ -8577,33 +8872,33 @@ _int14_function:                             ; 0xf5f61 LB 0x155
     ; sub ah, ah                                ; 2a e4
     mov byte [bp+013h], al                    ; 88 46 13
     test cl, cl                               ; 84 c9
-    jne short 06087h                          ; 75 43
+    jne short 063d4h                          ; 75 43
     or AL, strict byte 080h                   ; 0c 80
     mov byte [bp+013h], al                    ; 88 46 13
-    jmp short 06087h                          ; eb 3c
+    jmp short 063d4h                          ; eb 3c
     mov dx, strict word 0006ch                ; ba 6c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 18 b6
+    call 0166ch                               ; e8 cb b2
     mov si, ax                                ; 89 c6
     lea dx, [bx+005h]                         ; 8d 57 05
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 06077h                          ; 75 17
+    jne short 063c4h                          ; 75 17
     test cl, cl                               ; 84 c9
-    je short 06077h                           ; 74 13
+    je short 063c4h                           ; 74 13
     mov dx, strict word 0006ch                ; ba 6c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 ff b5
+    call 0166ch                               ; e8 b2 b2
     cmp ax, si                                ; 39 f0
-    je short 06056h                           ; 74 e5
+    je short 063a3h                           ; 74 e5
     mov si, ax                                ; 89 c6
     db  0feh, 0c9h
     ; dec cl                                    ; fe c9
-    jmp short 06056h                          ; eb df
+    jmp short 063a3h                          ; eb df
     test cl, cl                               ; 84 c9
-    je short 0608dh                           ; 74 12
+    je short 063dah                           ; 74 12
     mov byte [bp+013h], 000h                  ; c6 46 13 00
     mov dx, bx                                ; 89 da
     in AL, DX                                 ; ec
@@ -8611,12 +8906,12 @@ _int14_function:                             ; 0xf5f61 LB 0x155
     ; sub ah, ah                                ; 2a e4
     mov byte [bp+012h], al                    ; 88 46 12
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
-    jmp short 060b0h                          ; eb 23
+    jmp short 063fdh                          ; eb 23
     lea dx, [bx+005h]                         ; 8d 57 05
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
-    jmp short 06046h                          ; eb b1
+    jmp short 06393h                          ; eb b1
     lea dx, [si+005h]                         ; 8d 54 05
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -8626,15 +8921,15 @@ _int14_function:                             ; 0xf5f61 LB 0x155
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
-    jmp short 06084h                          ; eb de
+    jmp short 063d1h                          ; eb de
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
-    jmp short 060b0h                          ; eb 04
+    jmp short 063fdh                          ; eb 04
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-set_enable_a20_:                             ; 0xf60b6 LB 0x2c
+set_enable_a20_:                             ; 0xf6403 LB 0x2c
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -8647,10 +8942,10 @@ set_enable_a20_:                             ; 0xf60b6 LB 0x2c
     ; sub ah, ah                                ; 2a e4
     mov cl, al                                ; 88 c1
     test bx, bx                               ; 85 db
-    je short 060cfh                           ; 74 05
+    je short 0641ch                           ; 74 05
     or AL, strict byte 002h                   ; 0c 02
     out DX, AL                                ; ee
-    jmp short 060d2h                          ; eb 03
+    jmp short 0641fh                          ; eb 03
     and AL, strict byte 0fdh                  ; 24 fd
     out DX, AL                                ; ee
     test cl, 002h                             ; f6 c1 02
@@ -8663,7 +8958,7 @@ set_enable_a20_:                             ; 0xf60b6 LB 0x2c
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-set_e820_range_:                             ; 0xf60e2 LB 0x8c
+set_e820_range_:                             ; 0xf642f LB 0x8c
     push si                                   ; 56
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
@@ -8692,10 +8987,10 @@ set_e820_range_:                             ; 0xf60e2 LB 0x8c
     pop si                                    ; 5e
     retn 0000ah                               ; c2 0a 00
     db  0ech, 0e9h, 0d8h, 0c1h, 0c0h, 0bfh, 091h, 090h, 089h, 088h, 087h, 083h, 052h, 04fh, 041h, 024h
-    db  000h, 00dh, 066h, 0adh, 061h, 0c0h, 061h, 055h, 062h, 05bh, 062h, 060h, 062h, 065h, 062h, 007h
-    db  063h, 0a4h, 064h, 0cah, 064h, 04eh, 062h, 04eh, 062h, 097h, 065h, 0bfh, 065h, 0d2h, 065h, 0e1h
-    db  065h, 055h, 062h, 0e8h, 065h
-_int15_function:                             ; 0xf616e LB 0x4cd
+    db  000h, 05ah, 069h, 0fah, 064h, 00dh, 065h, 0a2h, 065h, 0a8h, 065h, 0adh, 065h, 0b2h, 065h, 054h
+    db  066h, 0f1h, 067h, 017h, 068h, 09bh, 065h, 09bh, 065h, 0e4h, 068h, 00ch, 069h, 01fh, 069h, 02eh
+    db  069h, 0a2h, 065h, 035h, 069h
+_int15_function:                             ; 0xf64bb LB 0x4cd
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -8705,15 +9000,15 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     mov ax, word [bp+012h]                    ; 8b 46 12
     shr ax, 008h                              ; c1 e8 08
     cmp ax, 000ech                            ; 3d ec 00
-    jnbe near 0660dh                          ; 0f 87 8b 04
+    jnbe near 0695ah                          ; 0f 87 8b 04
     push CS                                   ; 0e
     pop ES                                    ; 07
     mov cx, strict word 00012h                ; b9 12 00
-    mov di, 06139h                            ; bf 39 61
+    mov di, 06486h                            ; bf 86 64
     repne scasb                               ; f2 ae
     sal cx, 1                                 ; d1 e1
     mov di, cx                                ; 89 cf
-    mov si, word [cs:di+0614ah]               ; 2e 8b b5 4a 61
+    mov si, word [cs:di+06497h]               ; 2e 8b b5 97 64
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     mov cx, word [bp+018h]                    ; 8b 4e 18
@@ -8726,30 +9021,30 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     cmp ax, 000c0h                            ; 3d c0 00
-    jne near 0660dh                           ; 0f 85 54 04
+    jne near 0695ah                           ; 0f 85 54 04
     or byte [bp+018h], 001h                   ; 80 4e 18 01
-    jmp near 065b6h                           ; e9 f6 03
+    jmp near 06903h                           ; e9 f6 03
     mov dx, ax                                ; 89 c2
     cmp ax, strict word 00001h                ; 3d 01 00
-    jc short 061d5h                           ; 72 0e
-    jbe short 061e9h                          ; 76 20
+    jc short 06522h                           ; 72 0e
+    jbe short 06536h                          ; 76 20
     cmp ax, strict word 00003h                ; 3d 03 00
-    je short 06216h                           ; 74 48
+    je short 06563h                           ; 74 48
     cmp ax, strict word 00002h                ; 3d 02 00
-    je short 061f9h                           ; 74 26
-    jmp short 06223h                          ; eb 4e
+    je short 06546h                           ; 74 26
+    jmp short 06570h                          ; eb 4e
     test ax, ax                               ; 85 c0
-    jne short 06223h                          ; 75 4a
+    jne short 06570h                          ; 75 4a
     xor ax, ax                                ; 31 c0
-    call 060b6h                               ; e8 d8 fe
+    call 06403h                               ; e8 d8 fe
     and byte [bp+018h], 0feh                  ; 80 66 18 fe
     mov byte [bp+013h], 000h                  ; c6 46 13 00
-    jmp near 0624eh                           ; e9 65 00
+    jmp near 0659bh                           ; e9 65 00
     mov ax, strict word 00001h                ; b8 01 00
-    call 060b6h                               ; e8 c7 fe
+    call 06403h                               ; e8 c7 fe
     and byte [bp+018h], 0feh                  ; 80 66 18 fe
     mov byte [bp+013h], dh                    ; 88 76 13
-    jmp near 0624eh                           ; e9 55 00
+    jmp near 0659bh                           ; e9 55 00
     mov dx, 00092h                            ; ba 92 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -8761,21 +9056,21 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     mov word [bp+012h], dx                    ; 89 56 12
     and byte [bp+018h], 0feh                  ; 80 66 18 fe
     mov byte [bp+013h], ah                    ; 88 66 13
-    jmp near 0624eh                           ; e9 38 00
+    jmp near 0659bh                           ; e9 38 00
     and byte [bp+018h], 0feh                  ; 80 66 18 fe
     mov byte [bp+013h], ah                    ; 88 66 13
     mov word [bp+00ch], ax                    ; 89 46 0c
-    jmp near 0624eh                           ; e9 2b 00
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 0659bh                           ; e9 2b 00
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 03 b7
+    call 01931h                               ; e8 b6 b3
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     push ax                                   ; 50
-    push 00836h                               ; 68 36 08
+    push 0082eh                               ; 68 2e 08
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 36 b7
+    call 01972h                               ; e8 e9 b3
     add sp, strict byte 00006h                ; 83 c4 06
     or byte [bp+018h], 001h                   ; 80 4e 18 01
     mov ax, word [bp+012h]                    ; 8b 46 12
@@ -8788,38 +9083,38 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     pop bp                                    ; 5d
     retn                                      ; c3
     mov word [bp+018h], bx                    ; 89 5e 18
-    jmp near 06301h                           ; e9 a6 00
+    jmp near 0664eh                           ; e9 a6 00
     mov word [bp+018h], bx                    ; 89 5e 18
-    jmp short 0624eh                          ; eb ee
+    jmp short 0659bh                          ; eb ee
     mov word [bp+018h], cx                    ; 89 4e 18
-    jmp short 0624bh                          ; eb e6
+    jmp short 06598h                          ; eb e6
     test byte [bp+012h], 0ffh                 ; f6 46 12 ff
-    je short 062d7h                           ; 74 6c
+    je short 06624h                           ; 74 6c
     mov dx, 000a0h                            ; ba a0 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 dc b3
+    call 01650h                               ; e8 8f b0
     test AL, strict byte 001h                 ; a8 01
-    jne near 065adh                           ; 0f 85 33 03
+    jne near 068fah                           ; 0f 85 33 03
     mov bx, strict word 00001h                ; bb 01 00
     mov dx, 000a0h                            ; ba a0 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 d8 b3
+    call 0165eh                               ; e8 8b b0
     mov bx, word [bp+014h]                    ; 8b 5e 14
     mov dx, 00098h                            ; ba 98 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0167ah                               ; e8 e8 b3
+    call 0167ah                               ; e8 9b b0
     mov bx, word [bp+00ch]                    ; 8b 5e 0c
     mov dx, 0009ah                            ; ba 9a 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0167ah                               ; e8 dc b3
+    call 0167ah                               ; e8 8f b0
     mov bx, word [bp+00eh]                    ; 8b 5e 0e
     mov dx, 0009ch                            ; ba 9c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0167ah                               ; e8 d0 b3
+    call 0167ah                               ; e8 83 b0
     mov bx, word [bp+010h]                    ; 8b 5e 10
     mov dx, 0009eh                            ; ba 9e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0167ah                               ; e8 c4 b3
+    call 0167ah                               ; e8 77 b0
     and byte [bp+018h], 0feh                  ; 80 66 18 fe
     mov dx, 000a1h                            ; ba a1 00
     in AL, DX                                 ; ec
@@ -8828,23 +9123,23 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     and AL, strict byte 0feh                  ; 24 fe
     out DX, AL                                ; ee
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 e3 b3
+    call 016ach                               ; e8 96 b0
     or AL, strict byte 040h                   ; 0c 40
     movzx dx, al                              ; 0f b6 d0
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016c9h                               ; e8 f5 b3
-    jmp near 0624eh                           ; e9 77 ff
+    call 016c9h                               ; e8 a8 b0
+    jmp near 0659bh                           ; e9 77 ff
     cmp ax, strict word 00001h                ; 3d 01 00
-    jne short 062f5h                          ; 75 19
+    jne short 06642h                          ; 75 19
     xor bx, bx                                ; 31 db
     mov dx, 000a0h                            ; ba a0 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 77 b3
+    call 0165eh                               ; e8 2a b0
     and byte [bp+018h], 0feh                  ; 80 66 18 fe
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 bb b3
+    call 016ach                               ; e8 6e b0
     and AL, strict byte 0bfh                  ; 24 bf
-    jmp short 062cbh                          ; eb d6
+    jmp short 06618h                          ; eb d6
     mov word [bp+018h], bx                    ; 89 5e 18
     mov ax, dx                                ; 89 d0
     xor ah, dh                                ; 30 f4
@@ -8852,10 +9147,10 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     dec ax                                    ; 48
     or dx, ax                                 ; 09 c2
     mov word [bp+012h], dx                    ; 89 56 12
-    jmp near 0624eh                           ; e9 47 ff
+    jmp near 0659bh                           ; e9 47 ff
     cli                                       ; fa
     mov ax, strict word 00001h                ; b8 01 00
-    call 060b6h                               ; e8 a8 fd
+    call 06403h                               ; e8 a8 fd
     mov di, ax                                ; 89 c7
     mov ax, word [bp+014h]                    ; 8b 46 14
     sal ax, 004h                              ; c1 e0 04
@@ -8865,7 +9160,7 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     shr dx, 00ch                              ; c1 ea 0c
     mov byte [bp-006h], dl                    ; 88 56 fa
     cmp cx, ax                                ; 39 c1
-    jnc short 0632dh                          ; 73 05
+    jnc short 0667ah                          ; 73 05
     db  0feh, 0c2h
     ; inc dl                                    ; fe c2
     mov byte [bp-006h], dl                    ; 88 56 fa
@@ -8873,52 +9168,52 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     add dx, strict byte 00008h                ; 83 c2 08
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, strict word 0002fh                ; bb 2f 00
-    call 0167ah                               ; e8 3e b3
+    call 0167ah                               ; e8 f1 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0000ah                ; 83 c2 0a
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, cx                                ; 89 cb
-    call 0167ah                               ; e8 30 b3
+    call 0167ah                               ; e8 e3 af
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0000ch                ; 83 c2 0c
     mov ax, word [bp+014h]                    ; 8b 46 14
-    call 0165eh                               ; e8 04 b3
+    call 0165eh                               ; e8 b7 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0000dh                ; 83 c2 0d
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, 00093h                            ; bb 93 00
-    call 0165eh                               ; e8 f5 b2
+    call 0165eh                               ; e8 a8 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0000eh                ; 83 c2 0e
     mov ax, word [bp+014h]                    ; 8b 46 14
     xor bx, bx                                ; 31 db
-    call 0167ah                               ; e8 03 b3
+    call 0167ah                               ; e8 b6 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 00020h                ; 83 c2 20
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, strict word 0ffffh                ; bb ff ff
-    call 0167ah                               ; e8 f4 b2
+    call 0167ah                               ; e8 a7 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 00022h                ; 83 c2 22
     mov ax, word [bp+014h]                    ; 8b 46 14
     xor bx, bx                                ; 31 db
-    call 0167ah                               ; e8 e6 b2
+    call 0167ah                               ; e8 99 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 00024h                ; 83 c2 24
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, strict word 0000fh                ; bb 0f 00
-    call 0165eh                               ; e8 bb b2
+    call 0165eh                               ; e8 6e af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 00025h                ; 83 c2 25
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, 0009bh                            ; bb 9b 00
-    call 0165eh                               ; e8 ac b2
+    call 0165eh                               ; e8 5f af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 00026h                ; 83 c2 26
     mov ax, word [bp+014h]                    ; 8b 46 14
     xor bx, bx                                ; 31 db
-    call 0167ah                               ; e8 ba b2
+    call 0167ah                               ; e8 6d af
     mov ax, ss                                ; 8c d0
     mov cx, ax                                ; 89 c1
     sal cx, 004h                              ; c1 e1 04
@@ -8928,27 +9223,27 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     add dx, strict byte 00028h                ; 83 c2 28
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, strict word 0ffffh                ; bb ff ff
-    call 0167ah                               ; e8 9e b2
+    call 0167ah                               ; e8 51 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0002ah                ; 83 c2 2a
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, cx                                ; 89 cb
-    call 0167ah                               ; e8 90 b2
+    call 0167ah                               ; e8 43 af
     movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0002ch                ; 83 c2 2c
     mov ax, word [bp+014h]                    ; 8b 46 14
-    call 0165eh                               ; e8 64 b2
+    call 0165eh                               ; e8 17 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0002dh                ; 83 c2 2d
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, 00093h                            ; bb 93 00
-    call 0165eh                               ; e8 55 b2
+    call 0165eh                               ; e8 08 af
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0002eh                ; 83 c2 2e
     mov ax, word [bp+014h]                    ; 8b 46 14
     xor bx, bx                                ; 31 db
-    call 0167ah                               ; e8 63 b2
+    call 0167ah                               ; e8 16 af
     mov si, word [bp+006h]                    ; 8b 76 06
     mov es, [bp+014h]                         ; 8e 46 14
     mov cx, word [bp+010h]                    ; 8b 4e 10
@@ -8959,7 +9254,7 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     mov ds, ax                                ; 8e d8
     mov word [00467h], sp                     ; 89 26 67 04
     mov [00469h], ss                          ; 8c 16 69 04
-    call 06433h                               ; e8 00 00
+    call 06780h                               ; e8 00 00
     pop di                                    ; 5f
     add di, strict byte 0001bh                ; 83 c7 1b
     push strict byte 00020h                   ; 6a 20
@@ -8982,7 +9277,7 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     ; xor di, di                                ; 33 ff
     cld                                       ; fc
     rep movsw                                 ; f3 a5
-    call 06467h                               ; e8 00 00
+    call 067b4h                               ; e8 00 00
     pop ax                                    ; 58
     push 0f000h                               ; 68 00 f0
     add ax, strict byte 00018h                ; 83 c0 18
@@ -9003,53 +9298,53 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     pop eax                                   ; 66 58
     pop DS                                    ; 1f
     mov ax, di                                ; 89 f8
-    call 060b6h                               ; e8 1e fc
+    call 06403h                               ; e8 1e fc
     sti                                       ; fb
     mov byte [bp+013h], 000h                  ; c6 46 13 00
     and byte [bp+018h], 0feh                  ; 80 66 18 fe
-    jmp near 0624eh                           ; e9 aa fd
+    jmp near 0659bh                           ; e9 aa fd
     mov ax, strict word 00031h                ; b8 31 00
-    call 016ach                               ; e8 02 b2
+    call 016ach                               ; e8 b5 ae
     xor ah, ah                                ; 30 e4
     mov dx, ax                                ; 89 c2
     sal dx, 008h                              ; c1 e2 08
     mov ax, strict word 00030h                ; b8 30 00
-    call 016ach                               ; e8 f5 b1
+    call 016ach                               ; e8 a8 ae
     xor ah, ah                                ; 30 e4
     or dx, ax                                 ; 09 c2
     mov word [bp+012h], dx                    ; 89 56 12
     cmp dx, strict byte 0ffc0h                ; 83 fa c0
-    jbe short 0649dh                          ; 76 da
+    jbe short 067eah                          ; 76 da
     mov word [bp+012h], strict word 0ffc0h    ; c7 46 12 c0 ff
-    jmp short 0649dh                          ; eb d3
+    jmp short 067eah                          ; eb d3
     cli                                       ; fa
     mov ax, strict word 00001h                ; b8 01 00
-    call 060b6h                               ; e8 e5 fb
+    call 06403h                               ; e8 e5 fb
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 00038h                ; 83 c2 38
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, strict word 0ffffh                ; bb ff ff
-    call 0167ah                               ; e8 9a b1
+    call 0167ah                               ; e8 4d ae
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0003ah                ; 83 c2 3a
     mov ax, word [bp+014h]                    ; 8b 46 14
     xor bx, bx                                ; 31 db
-    call 0167ah                               ; e8 8c b1
+    call 0167ah                               ; e8 3f ae
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0003ch                ; 83 c2 3c
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, strict word 0000fh                ; bb 0f 00
-    call 0165eh                               ; e8 61 b1
+    call 0165eh                               ; e8 14 ae
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0003dh                ; 83 c2 3d
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov bx, 0009bh                            ; bb 9b 00
-    call 0165eh                               ; e8 52 b1
+    call 0165eh                               ; e8 05 ae
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, strict byte 0003eh                ; 83 c2 3e
     mov ax, word [bp+014h]                    ; 8b 46 14
     xor bx, bx                                ; 31 db
-    call 0167ah                               ; e8 60 b1
+    call 0167ah                               ; e8 13 ae
     mov AL, strict byte 011h                  ; b0 11
     mov dx, strict word 00020h                ; ba 20 00
     out DX, AL                                ; ee
@@ -9079,7 +9374,7 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     mov dx, 000a1h                            ; ba a1 00
     out DX, AL                                ; ee
     mov si, word [bp+006h]                    ; 8b 76 06
-    call 0655bh                               ; e8 00 00
+    call 068a8h                               ; e8 00 00
     pop di                                    ; 5f
     add di, strict byte 00018h                ; 83 c7 18
     push strict byte 00038h                   ; 6a 38
@@ -9107,66 +9402,64 @@ _int15_function:                             ; 0xf616e LB 0x4cd
     push ax                                   ; 50
     push cx                                   ; 51
     retf                                      ; cb
-    jmp near 0624eh                           ; e9 b7 fc
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 0659bh                           ; e9 b7 fc
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 8f b3
-    push 00876h                               ; 68 76 08
+    call 01931h                               ; e8 42 b0
+    push 0086eh                               ; 68 6e 08
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 c8 b3
+    call 01972h                               ; e8 7b b0
     add sp, strict byte 00004h                ; 83 c4 04
     or byte [bp+018h], 001h                   ; 80 4e 18 01
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     or ah, 086h                               ; 80 cc 86
     mov word [bp+012h], ax                    ; 89 46 12
-    jmp near 0624eh                           ; e9 8f fc
+    jmp near 0659bh                           ; e9 8f fc
     mov word [bp+018h], cx                    ; 89 4e 18
     mov word [bp+012h], ax                    ; 89 46 12
     mov word [bp+00ch], 0e6f5h                ; c7 46 0c f5 e6
     mov word [bp+014h], 0f000h                ; c7 46 14 00 f0
-    jmp near 0624eh                           ; e9 7c fc
+    jmp near 0659bh                           ; e9 7c fc
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 91 b0
+    call 0166ch                               ; e8 44 ad
     mov word [bp+014h], ax                    ; 89 46 14
-    jmp near 0649dh                           ; e9 bc fe
-    push 008a5h                               ; 68 a5 08
+    jmp near 067eah                           ; e9 bc fe
+    push 0089dh                               ; 68 9d 08
     push strict byte 00008h                   ; 6a 08
-    jmp short 065a7h                          ; eb bf
+    jmp short 068f4h                          ; eb bf
     test byte [bp+012h], 0ffh                 ; f6 46 12 ff
-    jne short 0660dh                          ; 75 1f
+    jne short 0695ah                          ; 75 1f
     mov word [bp+012h], ax                    ; 89 46 12
     mov ax, word [bp+00ch]                    ; 8b 46 0c
     xor ah, ah                                ; 30 e4
     cmp ax, strict word 00001h                ; 3d 01 00
-    jc short 06606h                           ; 72 0b
+    jc short 06953h                           ; 72 0b
     cmp ax, strict word 00003h                ; 3d 03 00
-    jnbe short 06606h                         ; 77 06
+    jnbe short 06953h                         ; 77 06
     mov word [bp+018h], cx                    ; 89 4e 18
-    jmp near 0624eh                           ; e9 48 fc
+    jmp near 0659bh                           ; e9 48 fc
     or byte [bp+018h], 001h                   ; 80 4e 18 01
-    jmp near 0624eh                           ; e9 41 fc
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 0659bh                           ; e9 41 fc
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 19 b3
+    call 01931h                               ; e8 cc af
     push word [bp+00ch]                       ; ff 76 0c
     push word [bp+012h]                       ; ff 76 12
-    push 008bch                               ; 68 bc 08
+    push 008b4h                               ; 68 b4 08
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 4c b3
+    call 01972h                               ; e8 ff af
     add sp, strict byte 00008h                ; 83 c4 08
-    jmp short 065adh                          ; eb 82
-    in AL, strict byte 067h                   ; e4 67
-    push ES                                   ; 06
-    push 06829h                               ; 68 29 68
-    dec bx                                    ; 4b
-    push 0686bh                               ; 68 6b 68
-    mov [bx+si-035h], gs                      ; 8c 68 cb
-    push 068f7h                               ; 68 f7 68
-_int15_function32:                           ; 0xf663b LB 0x37e
+    jmp short 068fah                          ; eb 82
+    xor word [bp+di+053h], bp                 ; 31 6b 53
+    imul si, word [bp+06bh], strict byte 0ff98h ; 6b 76 6b 98
+    imul di, word [bx+si-02695h], strict byte 0006bh ; 6b b8 6b d9 6b
+    sbb byte [si+044h], ch                    ; 18 6c 44
+    insb                                      ; 6c
+_int15_function32:                           ; 0xf6988 LB 0x37e
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -9178,11 +9471,11 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+020h]                    ; 8b 46 20
     xor ah, ah                                ; 30 e4
     cmp dx, 000e8h                            ; 81 fa e8 00
-    je near 06708h                            ; 0f 84 ad 00
+    je near 06a55h                            ; 0f 84 ad 00
     cmp dx, 000d0h                            ; 81 fa d0 00
-    je short 066a3h                           ; 74 42
+    je short 069f0h                           ; 74 42
     cmp dx, 00086h                            ; 81 fa 86 00
-    jne near 06989h                           ; 0f 85 20 03
+    jne near 06cd6h                           ; 0f 85 20 03
     sti                                       ; fb
     mov ax, word [bp+01ch]                    ; 8b 46 1c
     mov dx, word [bp+018h]                    ; 8b 56 18
@@ -9201,33 +9494,33 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     ; mov ah, al                                ; 8a e0
     db  066h, 00bh, 0c9h
     ; or ecx, ecx                               ; 66 0b c9
-    je near 066a0h                            ; 0f 84 0e 00
+    je near 069edh                            ; 0f 84 0e 00
     in AL, strict byte 061h                   ; e4 61
     and AL, strict byte 010h                  ; 24 10
     db  03ah, 0c4h
     ; cmp al, ah                                ; 3a c4
-    je short 06692h                           ; 74 f8
+    je short 069dfh                           ; 74 f8
     db  08ah, 0e0h
     ; mov ah, al                                ; 8a e0
     dec ecx                                   ; 66 49
-    jne short 06692h                          ; 75 f2
-    jmp near 069b3h                           ; e9 10 03
+    jne short 069dfh                          ; 75 f2
+    jmp near 06d00h                           ; e9 10 03
     cmp ax, strict word 0004fh                ; 3d 4f 00
-    jne near 06989h                           ; 0f 85 df 02
+    jne near 06cd6h                           ; 0f 85 df 02
     cmp word [bp+016h], 05052h                ; 81 7e 16 52 50
-    jne near 06989h                           ; 0f 85 d6 02
+    jne near 06cd6h                           ; 0f 85 d6 02
     cmp word [bp+014h], 04f43h                ; 81 7e 14 43 4f
-    jne near 06989h                           ; 0f 85 cd 02
+    jne near 06cd6h                           ; 0f 85 cd 02
     cmp word [bp+01eh], 04d4fh                ; 81 7e 1e 4f 4d
-    jne near 06989h                           ; 0f 85 c4 02
+    jne near 06cd6h                           ; 0f 85 c4 02
     cmp word [bp+01ch], 04445h                ; 81 7e 1c 45 44
-    jne near 06989h                           ; 0f 85 bb 02
+    jne near 06cd6h                           ; 0f 85 bb 02
     mov ax, word [bp+00ah]                    ; 8b 46 0a
     or ax, word [bp+008h]                     ; 0b 46 08
-    jne near 06989h                           ; 0f 85 b1 02
+    jne near 06cd6h                           ; 0f 85 b1 02
     mov ax, word [bp+006h]                    ; 8b 46 06
     or ax, word [bp+004h]                     ; 0b 46 04
-    jne near 06989h                           ; 0f 85 a7 02
+    jne near 06cd6h                           ; 0f 85 a7 02
     mov word [bp+028h], bx                    ; 89 5e 28
     mov ax, word [bp+014h]                    ; 8b 46 14
     mov word [bp+008h], ax                    ; 89 46 08
@@ -9238,26 +9531,26 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+01eh]                    ; 8b 46 1e
     mov word [bp+006h], ax                    ; 89 46 06
     mov dword [bp+020h], strict dword 049413332h ; 66 c7 46 20 32 33 41 49
-    jmp near 069b3h                           ; e9 ab 02
+    jmp near 06d00h                           ; e9 ab 02
     cmp ax, strict word 00020h                ; 3d 20 00
-    je short 06717h                           ; 74 0a
+    je short 06a64h                           ; 74 0a
     cmp ax, strict word 00001h                ; 3d 01 00
-    je near 0693eh                            ; 0f 84 2a 02
-    jmp near 06989h                           ; e9 72 02
+    je near 06c8bh                            ; 0f 84 2a 02
+    jmp near 06cd6h                           ; e9 72 02
     cmp word [bp+01ah], 0534dh                ; 81 7e 1a 4d 53
-    jne near 06989h                           ; 0f 85 69 02
+    jne near 06cd6h                           ; 0f 85 69 02
     cmp word [bp+018h], 04150h                ; 81 7e 18 50 41
-    jne near 06989h                           ; 0f 85 60 02
+    jne near 06cd6h                           ; 0f 85 60 02
     mov ax, strict word 00035h                ; b8 35 00
-    call 016ach                               ; e8 7d af
+    call 016ach                               ; e8 30 ac
     movzx bx, al                              ; 0f b6 d8
     xor dx, dx                                ; 31 d2
     mov cx, strict word 00008h                ; b9 08 00
     sal bx, 1                                 ; d1 e3
     rcl dx, 1                                 ; d1 d2
-    loop 06737h                               ; e2 fa
+    loop 06a84h                               ; e2 fa
     mov ax, strict word 00034h                ; b8 34 00
-    call 016ach                               ; e8 69 af
+    call 016ach                               ; e8 1c ac
     xor ah, ah                                ; 30 e4
     mov dx, bx                                ; 89 da
     or dx, ax                                 ; 09 c2
@@ -9265,30 +9558,30 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     add bx, bx                                ; 01 db
     adc dx, 00100h                            ; 81 d2 00 01
     cmp dx, 00100h                            ; 81 fa 00 01
-    jc short 0675dh                           ; 72 06
-    jne short 0678ah                          ; 75 31
+    jc short 06aaah                           ; 72 06
+    jne short 06ad7h                          ; 75 31
     test bx, bx                               ; 85 db
-    jnbe short 0678ah                         ; 77 2d
+    jnbe short 06ad7h                         ; 77 2d
     mov ax, strict word 00031h                ; b8 31 00
-    call 016ach                               ; e8 49 af
+    call 016ach                               ; e8 fc ab
     movzx bx, al                              ; 0f b6 d8
     xor dx, dx                                ; 31 d2
     mov cx, strict word 00008h                ; b9 08 00
     sal bx, 1                                 ; d1 e3
     rcl dx, 1                                 ; d1 d2
-    loop 0676bh                               ; e2 fa
+    loop 06ab8h                               ; e2 fa
     mov ax, strict word 00030h                ; b8 30 00
-    call 016ach                               ; e8 35 af
+    call 016ach                               ; e8 e8 ab
     xor ah, ah                                ; 30 e4
     or bx, ax                                 ; 09 c3
     mov cx, strict word 0000ah                ; b9 0a 00
     sal bx, 1                                 ; d1 e3
     rcl dx, 1                                 ; d1 d2
-    loop 0677eh                               ; e2 fa
+    loop 06acbh                               ; e2 fa
     add bx, strict byte 00000h                ; 83 c3 00
     adc dx, strict byte 00010h                ; 83 d2 10
     mov ax, strict word 00062h                ; b8 62 00
-    call 016ach                               ; e8 1c af
+    call 016ach                               ; e8 cf ab
     xor ah, ah                                ; 30 e4
     mov word [bp-00ah], ax                    ; 89 46 f6
     xor al, al                                ; 30 c0
@@ -9296,28 +9589,28 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov cx, strict word 00008h                ; b9 08 00
     sal word [bp-00ah], 1                     ; d1 66 f6
     rcl word [bp-008h], 1                     ; d1 56 f8
-    loop 0679dh                               ; e2 f8
+    loop 06aeah                               ; e2 f8
     mov ax, strict word 00061h                ; b8 61 00
-    call 016ach                               ; e8 01 af
+    call 016ach                               ; e8 b4 ab
     xor ah, ah                                ; 30 e4
     or word [bp-00ah], ax                     ; 09 46 f6
     mov ax, word [bp-00ah]                    ; 8b 46 f6
     mov word [bp-008h], ax                    ; 89 46 f8
     mov word [bp-00ah], strict word 00000h    ; c7 46 f6 00 00
     mov ax, strict word 00063h                ; b8 63 00
-    call 016ach                               ; e8 eb ae
+    call 016ach                               ; e8 9e ab
     mov byte [bp-004h], al                    ; 88 46 fc
     mov byte [bp-006h], al                    ; 88 46 fa
     mov ax, word [bp+014h]                    ; 8b 46 14
     cmp ax, strict word 00007h                ; 3d 07 00
-    jnbe near 06989h                          ; 0f 87 b8 01
+    jnbe near 06cd6h                          ; 0f 87 b8 01
     mov si, ax                                ; 89 c6
     add si, ax                                ; 01 c6
     mov cx, bx                                ; 89 d9
     add cx, strict byte 00000h                ; 83 c1 00
     mov ax, dx                                ; 89 d0
     adc ax, strict word 0ffffh                ; 15 ff ff
-    jmp word [cs:si+0662bh]                   ; 2e ff a4 2b 66
+    jmp word [cs:si+06978h]                   ; 2e ff a4 78 69
     push strict byte 00001h                   ; 6a 01
     push dword 000000000h                     ; 66 6a 00
     push strict byte 00009h                   ; 6a 09
@@ -9326,9 +9619,9 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+024h]                    ; 8b 46 24
     xor bx, bx                                ; 31 db
     xor cx, cx                                ; 31 c9
-    call 060e2h                               ; e8 e7 f8
+    call 0642fh                               ; e8 e7 f8
     mov dword [bp+014h], strict dword 000000001h ; 66 c7 46 14 01 00 00 00
-    jmp near 06928h                           ; e9 22 01
+    jmp near 06c75h                           ; e9 22 01
     push strict byte 00002h                   ; 6a 02
     push dword 000000000h                     ; 66 6a 00
     push strict byte 0000ah                   ; 6a 0a
@@ -9337,9 +9630,9 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+024h]                    ; 8b 46 24
     mov bx, 0fc00h                            ; bb 00 fc
     mov cx, strict word 00009h                ; b9 09 00
-    call 060e2h                               ; e8 c4 f8
+    call 0642fh                               ; e8 c4 f8
     mov dword [bp+014h], strict dword 000000002h ; 66 c7 46 14 02 00 00 00
-    jmp near 06928h                           ; e9 ff 00
+    jmp near 06c75h                           ; e9 ff 00
     push strict byte 00002h                   ; 6a 02
     push dword 000000000h                     ; 66 6a 00
     push strict byte 00010h                   ; 6a 10
@@ -9348,9 +9641,9 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+024h]                    ; 8b 46 24
     xor bx, bx                                ; 31 db
     mov cx, strict word 0000fh                ; b9 0f 00
-    call 060e2h                               ; e8 a2 f8
+    call 0642fh                               ; e8 a2 f8
     mov dword [bp+014h], strict dword 000000003h ; 66 c7 46 14 03 00 00 00
-    jmp near 06928h                           ; e9 dd 00
+    jmp near 06c75h                           ; e9 dd 00
     push strict byte 00001h                   ; 6a 01
     push dword 000000000h                     ; 66 6a 00
     push ax                                   ; 50
@@ -9359,9 +9652,9 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+024h]                    ; 8b 46 24
     xor bx, bx                                ; 31 db
     mov cx, strict word 00010h                ; b9 10 00
-    call 060e2h                               ; e8 82 f8
+    call 0642fh                               ; e8 82 f8
     mov dword [bp+014h], strict dword 000000004h ; 66 c7 46 14 04 00 00 00
-    jmp near 06928h                           ; e9 bd 00
+    jmp near 06c75h                           ; e9 bd 00
     push strict byte 00003h                   ; 6a 03
     push dword 000000000h                     ; 66 6a 00
     push dx                                   ; 52
@@ -9371,9 +9664,9 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov bx, cx                                ; 89 cb
     mov cx, ax                                ; 89 c1
     mov ax, si                                ; 89 f0
-    call 060e2h                               ; e8 61 f8
+    call 0642fh                               ; e8 61 f8
     mov dword [bp+014h], strict dword 000000005h ; 66 c7 46 14 05 00 00 00
-    jmp near 06928h                           ; e9 9c 00
+    jmp near 06c75h                           ; e9 9c 00
     push strict byte 00002h                   ; 6a 02
     push dword 000000000h                     ; 66 6a 00
     push dword 000000000h                     ; 66 6a 00
@@ -9381,19 +9674,19 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+024h]                    ; 8b 46 24
     xor bx, bx                                ; 31 db
     mov cx, strict word 0fffch                ; b9 fc ff
-    call 060e2h                               ; e8 40 f8
+    call 0642fh                               ; e8 40 f8
     cmp byte [bp-004h], 000h                  ; 80 7e fc 00
-    jne short 068afh                          ; 75 07
+    jne short 06bfch                          ; 75 07
     mov ax, word [bp-008h]                    ; 8b 46 f8
     test ax, ax                               ; 85 c0
-    je short 068c3h                           ; 74 14
+    je short 06c10h                           ; 74 14
     mov dword [bp+014h], strict dword 000000007h ; 66 c7 46 14 07 00 00 00
-    jmp short 06928h                          ; eb 6f
+    jmp short 06c75h                          ; eb 6f
     mov dword [bp+014h], strict dword 000000006h ; 66 c7 46 14 06 00 00 00
-    jmp short 06928h                          ; eb 65
+    jmp short 06c75h                          ; eb 65
     mov word [bp+014h], ax                    ; 89 46 14
     mov word [bp+016h], ax                    ; 89 46 16
-    jmp short 06928h                          ; eb 5d
+    jmp short 06c75h                          ; eb 5d
     push strict byte 00002h                   ; 6a 02
     push dword 000000000h                     ; 66 6a 00
     push dword 000000000h                     ; 66 6a 00
@@ -9401,20 +9694,20 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+024h]                    ; 8b 46 24
     xor bx, bx                                ; 31 db
     xor cx, cx                                ; 31 c9
-    call 060e2h                               ; e8 02 f8
+    call 0642fh                               ; e8 02 f8
     cmp byte [bp-004h], 000h                  ; 80 7e fc 00
-    jne short 068edh                          ; 75 07
+    jne short 06c3ah                          ; 75 07
     mov ax, word [bp-008h]                    ; 8b 46 f8
     test ax, ax                               ; 85 c0
-    je short 068efh                           ; 74 02
-    jmp short 068afh                          ; eb c0
+    je short 06c3ch                           ; 74 02
+    jmp short 06bfch                          ; eb c0
     mov word [bp+014h], ax                    ; 89 46 14
     mov word [bp+016h], ax                    ; 89 46 16
-    jmp short 06928h                          ; eb 31
+    jmp short 06c75h                          ; eb 31
     cmp byte [bp-004h], 000h                  ; 80 7e fc 00
-    jne short 06903h                          ; 75 06
+    jne short 06c50h                          ; 75 06
     cmp word [bp-008h], strict byte 00000h    ; 83 7e f8 00
-    je short 06928h                           ; 74 25
+    je short 06c75h                           ; 74 25
     push strict byte 00001h                   ; 6a 01
     mov al, byte [bp-006h]                    ; 8a 46 fa
     db  0feh, 0c0h
@@ -9427,49 +9720,49 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     mov ax, word [bp+024h]                    ; 8b 46 24
     xor bx, bx                                ; 31 db
     xor cx, cx                                ; 31 c9
-    call 060e2h                               ; e8 c2 f7
+    call 0642fh                               ; e8 c2 f7
     xor ax, ax                                ; 31 c0
     mov word [bp+014h], ax                    ; 89 46 14
     mov word [bp+016h], ax                    ; 89 46 16
     mov dword [bp+020h], strict dword 0534d4150h ; 66 c7 46 20 50 41 4d 53
     mov dword [bp+01ch], strict dword 000000014h ; 66 c7 46 1c 14 00 00 00
     and byte [bp+028h], 0feh                  ; 80 66 28 fe
-    jmp short 069b3h                          ; eb 75
+    jmp short 06d00h                          ; eb 75
     mov word [bp+028h], bx                    ; 89 5e 28
     mov ax, strict word 00031h                ; b8 31 00
-    call 016ach                               ; e8 65 ad
+    call 016ach                               ; e8 18 aa
     movzx dx, al                              ; 0f b6 d0
     sal dx, 008h                              ; c1 e2 08
     mov ax, strict word 00030h                ; b8 30 00
-    call 016ach                               ; e8 59 ad
+    call 016ach                               ; e8 0c aa
     xor ah, ah                                ; 30 e4
     or dx, ax                                 ; 09 c2
     mov word [bp+01ch], dx                    ; 89 56 1c
     cmp dx, 03c00h                            ; 81 fa 00 3c
-    jbe short 06965h                          ; 76 05
+    jbe short 06cb2h                          ; 76 05
     mov word [bp+01ch], 03c00h                ; c7 46 1c 00 3c
     mov ax, strict word 00035h                ; b8 35 00
-    call 016ach                               ; e8 41 ad
+    call 016ach                               ; e8 f4 a9
     movzx dx, al                              ; 0f b6 d0
     sal dx, 008h                              ; c1 e2 08
     mov ax, strict word 00034h                ; b8 34 00
-    call 016ach                               ; e8 35 ad
+    call 016ach                               ; e8 e8 a9
     xor ah, ah                                ; 30 e4
     or dx, ax                                 ; 09 c2
     mov word [bp+018h], dx                    ; 89 56 18
     mov ax, word [bp+01ch]                    ; 8b 46 1c
     mov word [bp+020h], ax                    ; 89 46 20
     mov word [bp+014h], dx                    ; 89 56 14
-    jmp short 069b3h                          ; eb 2a
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp short 06d00h                          ; eb 2a
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 9d af
+    call 01931h                               ; e8 50 ac
     push word [bp+014h]                       ; ff 76 14
     push word [bp+020h]                       ; ff 76 20
-    push 008bch                               ; 68 bc 08
+    push 008b4h                               ; 68 b4 08
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 d0 af
+    call 01972h                               ; e8 83 ac
     add sp, strict byte 00008h                ; 83 c4 08
     or byte [bp+028h], 001h                   ; 80 4e 28 01
     mov ax, word [bp+020h]                    ; 8b 46 20
@@ -9480,7 +9773,7 @@ _int15_function32:                           ; 0xf663b LB 0x37e
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-_inv_op_handler:                             ; 0xf69b9 LB 0x195
+_inv_op_handler:                             ; 0xf6d06 LB 0x195
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -9489,11 +9782,11 @@ _inv_op_handler:                             ; 0xf69b9 LB 0x195
     push ax                                   ; 50
     les bx, [bp+018h]                         ; c4 5e 18
     cmp byte [es:bx], 0f0h                    ; 26 80 3f f0
-    jne short 069cfh                          ; 75 06
+    jne short 06d1ch                          ; 75 06
     inc word [bp+018h]                        ; ff 46 18
-    jmp near 06b47h                           ; e9 78 01
+    jmp near 06e94h                           ; e9 78 01
     cmp word [es:bx], 0050fh                  ; 26 81 3f 0f 05
-    jne near 06b43h                           ; 0f 85 6b 01
+    jne near 06e90h                           ; 0f 85 6b 01
     mov si, 00800h                            ; be 00 08
     xor ax, ax                                ; 31 c0
     mov word [bp-006h], ax                    ; 89 46 fa
@@ -9521,11 +9814,11 @@ _inv_op_handler:                             ; 0xf69b9 LB 0x195
     mov cx, strict word 00004h                ; b9 04 00
     sal ax, 1                                 ; d1 e0
     rcl dx, 1                                 ; d1 d2
-    loop 06a28h                               ; e2 fa
+    loop 06d75h                               ; e2 fa
     cmp bx, dx                                ; 39 d3
-    jne short 06a36h                          ; 75 04
+    jne short 06d83h                          ; 75 04
     cmp di, ax                                ; 39 c7
-    je short 06a3bh                           ; 74 05
+    je short 06d88h                           ; 74 05
     mov word [bp-008h], strict word 00001h    ; c7 46 f8 01 00
     mov es, [bp-006h]                         ; 8e 46 fa
     movzx di, byte [es:si+04ah]               ; 26 0f b6 7c 4a
@@ -9535,11 +9828,11 @@ _inv_op_handler:                             ; 0xf69b9 LB 0x195
     mov cx, strict word 00004h                ; b9 04 00
     sal ax, 1                                 ; d1 e0
     rcl dx, 1                                 ; d1 d2
-    loop 06a50h                               ; e2 fa
+    loop 06d9dh                               ; e2 fa
     cmp di, dx                                ; 39 d7
-    jne short 06a5eh                          ; 75 04
+    jne short 06dabh                          ; 75 04
     cmp bx, ax                                ; 39 c3
-    je short 06a62h                           ; 74 04
+    je short 06dafh                           ; 74 04
     or byte [bp-008h], 002h                   ; 80 4e f8 02
     push strict byte 00000h                   ; 6a 00
     push 00800h                               ; 68 00 08
@@ -9589,10 +9882,10 @@ _inv_op_handler:                             ; 0xf69b9 LB 0x195
     lmsw ax                                   ; 0f 01 f0
     mov ax, strict word 00008h                ; b8 08 00
     test cx, strict word 00001h               ; f7 c1 01 00
-    je near 06b00h                            ; 0f 84 02 00
+    je near 06e4dh                            ; 0f 84 02 00
     mov es, ax                                ; 8e c0
     test cx, strict word 00002h               ; f7 c1 02 00
-    je near 06b28h                            ; 0f 84 20 00
+    je near 06e75h                            ; 0f 84 20 00
     mov bx, word [word ss:00000h]             ; 36 8b 1e 00 00
     mov word [word ss:00008h], bx             ; 36 89 1e 08 00
     mov bx, word [word ss:00002h]             ; 36 8b 1e 02 00
@@ -9609,143 +9902,141 @@ _inv_op_handler:                             ; 0xf69b9 LB 0x195
     sub sp, strict byte 00006h                ; 83 ec 06
     mov ss, [word ss:00020h]                  ; 36 8e 16 20 00
     iret                                      ; cf
-    jmp short 06b47h                          ; eb 04
+    jmp short 06e94h                          ; eb 04
     sti                                       ; fb
     hlt                                       ; f4
-    jmp short 06b44h                          ; eb fd
+    jmp short 06e91h                          ; eb fd
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-init_rtc_:                                   ; 0xf6b4e LB 0x28
+init_rtc_:                                   ; 0xf6e9b LB 0x28
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push dx                                   ; 52
     mov dx, strict word 00026h                ; ba 26 00
     mov ax, strict word 0000ah                ; b8 0a 00
-    call 016c9h                               ; e8 6e ab
+    call 016c9h                               ; e8 21 a8
     mov dx, strict word 00002h                ; ba 02 00
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016c9h                               ; e8 65 ab
+    call 016c9h                               ; e8 18 a8
     mov ax, strict word 0000ch                ; b8 0c 00
-    call 016ach                               ; e8 42 ab
+    call 016ach                               ; e8 f5 a7
     mov ax, strict word 0000dh                ; b8 0d 00
-    call 016ach                               ; e8 3c ab
+    call 016ach                               ; e8 ef a7
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop dx                                    ; 5a
     pop bp                                    ; 5d
     retn                                      ; c3
-rtc_updating_:                               ; 0xf6b76 LB 0x21
+rtc_updating_:                               ; 0xf6ec3 LB 0x21
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push dx                                   ; 52
     mov dx, 061a8h                            ; ba a8 61
     dec dx                                    ; 4a
-    je short 06b8eh                           ; 74 0e
+    je short 06edbh                           ; 74 0e
     mov ax, strict word 0000ah                ; b8 0a 00
-    call 016ach                               ; e8 26 ab
+    call 016ach                               ; e8 d9 a7
     test AL, strict byte 080h                 ; a8 80
-    jne short 06b7dh                          ; 75 f3
+    jne short 06ecah                          ; 75 f3
     xor ax, ax                                ; 31 c0
-    jmp short 06b91h                          ; eb 03
+    jmp short 06edeh                          ; eb 03
     mov ax, strict word 00001h                ; b8 01 00
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop dx                                    ; 5a
     pop bp                                    ; 5d
     retn                                      ; c3
-_int70_function:                             ; 0xf6b97 LB 0xbe
+_int70_function:                             ; 0xf6ee4 LB 0xbe
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push ax                                   ; 50
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 0a ab
+    call 016ach                               ; e8 bd a7
     mov dl, al                                ; 88 c2
     mov byte [bp-004h], al                    ; 88 46 fc
     mov ax, strict word 0000ch                ; b8 0c 00
-    call 016ach                               ; e8 ff aa
+    call 016ach                               ; e8 b2 a7
     mov dh, al                                ; 88 c6
     test dl, 060h                             ; f6 c2 60
-    je near 06c3ch                            ; 0f 84 86 00
+    je near 06f89h                            ; 0f 84 86 00
     test AL, strict byte 020h                 ; a8 20
-    je short 06bbeh                           ; 74 04
+    je short 06f0bh                           ; 74 04
     sti                                       ; fb
     int 04ah                                  ; cd 4a
     cli                                       ; fa
     test dh, 040h                             ; f6 c6 40
-    je near 06c3ch                            ; 0f 84 77 00
+    je near 06f89h                            ; 0f 84 77 00
     mov dx, 000a0h                            ; ba a0 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 82 aa
+    call 01650h                               ; e8 35 a7
     test al, al                               ; 84 c0
-    je short 06c3ch                           ; 74 6a
+    je short 06f89h                           ; 74 6a
     mov dx, 0009ch                            ; ba 9c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01688h                               ; e8 ad aa
+    call 01688h                               ; e8 60 a7
     test dx, dx                               ; 85 d2
-    jne short 06c28h                          ; 75 49
+    jne short 06f75h                          ; 75 49
     cmp ax, 003d1h                            ; 3d d1 03
-    jnc short 06c28h                          ; 73 44
+    jnc short 06f75h                          ; 73 44
     mov dx, 00098h                            ; ba 98 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 7f aa
+    call 0166ch                               ; e8 32 a7
     mov si, ax                                ; 89 c6
     mov dx, 0009ah                            ; ba 9a 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 74 aa
+    call 0166ch                               ; e8 27 a7
     mov cx, ax                                ; 89 c1
     xor bx, bx                                ; 31 db
     mov dx, 000a0h                            ; ba a0 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 59 aa
+    call 0165eh                               ; e8 0c a7
     mov al, byte [bp-004h]                    ; 8a 46 fc
     and AL, strict byte 037h                  ; 24 37
     movzx dx, al                              ; 0f b6 d0
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016c9h                               ; e8 b6 aa
+    call 016c9h                               ; e8 69 a7
     mov dx, cx                                ; 89 ca
     mov ax, si                                ; 89 f0
-    call 01650h                               ; e8 36 aa
+    call 01650h                               ; e8 e9 a6
     or AL, strict byte 080h                   ; 0c 80
     movzx bx, al                              ; 0f b6 d8
     mov dx, cx                                ; 89 ca
     mov ax, si                                ; 89 f0
-    call 0165eh                               ; e8 38 aa
-    jmp short 06c3ch                          ; eb 14
+    call 0165eh                               ; e8 eb a6
+    jmp short 06f89h                          ; eb 14
     mov bx, ax                                ; 89 c3
     add bx, 0fc2fh                            ; 81 c3 2f fc
     mov cx, dx                                ; 89 d1
     adc cx, strict byte 0ffffh                ; 83 d1 ff
     mov dx, 0009ch                            ; ba 9c 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0169ah                               ; e8 5e aa
-    call 0e030h                               ; e8 f1 73
+    call 0169ah                               ; e8 11 a7
+    call 0e030h                               ; e8 a4 70
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-    insb                                      ; 6c
-    insb                                      ; 6c
-    xchg bp, ax                               ; 95
-    insb                                      ; 6c
-    mov dx, 0ec6ch                            ; ba 6c ec
-    insb                                      ; 6c
-    cmp bp, word [di+073h]                    ; 3b 6d 73
-    insw                                      ; 6d
-    mov DH, strict byte 06dh                  ; b6 6d
-    db  00dh
-    outsb                                     ; 6e
-_int1a_function:                             ; 0xf6c55 LB 0x1c8
+    mov cx, 0e26fh                            ; b9 6f e2
+    outsw                                     ; 6f
+    pop ES                                    ; 07
+    jo short 06fd2h                           ; 70 39
+    jo short 06f23h                           ; 70 88
+    jo short 06f5dh                           ; 70 c0
+    jo short 06fa2h                           ; 70 03
+    jno short 06ffbh                          ; 71 5a
+    db  071h
+_int1a_function:                             ; 0xf6fa2 LB 0x1c8
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     sti                                       ; fb
     mov al, byte [bp+013h]                    ; 8a 46 13
     cmp AL, strict byte 007h                  ; 3c 07
-    jnbe near 06c91h                          ; 0f 87 2f 00
+    jnbe near 06fdeh                          ; 0f 87 2f 00
     movzx bx, al                              ; 0f b6 d8
     add bx, bx                                ; 01 db
-    jmp word [cs:bx+06c45h]                   ; 2e ff a7 45 6c
+    jmp word [cs:bx+06f92h]                   ; 2e ff a7 92 6f
     cli                                       ; fa
     mov bx, 0046eh                            ; bb 6e 04
     xor ax, ax                                ; 31 c0
@@ -9776,41 +10067,41 @@ _int1a_function:                             ; 0xf6c55 LB 0x1c8
     mov byte [es:bx], 000h                    ; 26 c6 07 00
     sti                                       ; fb
     mov byte [bp+013h], 000h                  ; c6 46 13 00
-    jmp short 06c91h                          ; eb d7
-    call 06b76h                               ; e8 b9 fe
+    jmp short 06fdeh                          ; eb d7
+    call 06ec3h                               ; e8 b9 fe
     test ax, ax                               ; 85 c0
-    je short 06cc3h                           ; 74 02
-    jmp short 06c91h                          ; eb ce
+    je short 07010h                           ; 74 02
+    jmp short 06fdeh                          ; eb ce
     xor ax, ax                                ; 31 c0
-    call 016ach                               ; e8 e4 a9
+    call 016ach                               ; e8 97 a6
     mov byte [bp+00fh], al                    ; 88 46 0f
     mov ax, strict word 00002h                ; b8 02 00
-    call 016ach                               ; e8 db a9
+    call 016ach                               ; e8 8e a6
     mov byte [bp+010h], al                    ; 88 46 10
     mov ax, strict word 00004h                ; b8 04 00
-    call 016ach                               ; e8 d2 a9
+    call 016ach                               ; e8 85 a6
     mov bl, al                                ; 88 c3
     mov byte [bp+011h], al                    ; 88 46 11
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 c7 a9
+    call 016ach                               ; e8 7a a6
     and AL, strict byte 001h                  ; 24 01
     mov byte [bp+00eh], al                    ; 88 46 0e
-    jmp short 06d31h                          ; eb 45
-    call 06b76h                               ; e8 87 fe
+    jmp short 0707eh                          ; eb 45
+    call 06ec3h                               ; e8 87 fe
     test ax, ax                               ; 85 c0
-    je short 06cf6h                           ; 74 03
-    call 06b4eh                               ; e8 58 fe
+    je short 07043h                           ; 74 03
+    call 06e9bh                               ; e8 58 fe
     movzx dx, byte [bp+00fh]                  ; 0f b6 56 0f
     xor ax, ax                                ; 31 c0
-    call 016c9h                               ; e8 ca a9
+    call 016c9h                               ; e8 7d a6
     movzx dx, byte [bp+010h]                  ; 0f b6 56 10
     mov ax, strict word 00002h                ; b8 02 00
-    call 016c9h                               ; e8 c0 a9
+    call 016c9h                               ; e8 73 a6
     movzx dx, byte [bp+011h]                  ; 0f b6 56 11
     mov ax, strict word 00004h                ; b8 04 00
-    call 016c9h                               ; e8 b6 a9
+    call 016c9h                               ; e8 69 a6
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 93 a9
+    call 016ach                               ; e8 46 a6
     mov bl, al                                ; 88 c3
     and bl, 060h                              ; 80 e3 60
     or bl, 002h                               ; 80 cb 02
@@ -9819,71 +10110,71 @@ _int1a_function:                             ; 0xf6c55 LB 0x1c8
     or bl, al                                 ; 08 c3
     movzx dx, bl                              ; 0f b6 d3
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016c9h                               ; e8 98 a9
+    call 016c9h                               ; e8 4b a6
     mov byte [bp+013h], 000h                  ; c6 46 13 00
     mov byte [bp+012h], bl                    ; 88 5e 12
-    jmp near 06c91h                           ; e9 56 ff
+    jmp near 06fdeh                           ; e9 56 ff
     mov byte [bp+013h], 000h                  ; c6 46 13 00
-    call 06b76h                               ; e8 34 fe
+    call 06ec3h                               ; e8 34 fe
     test ax, ax                               ; 85 c0
-    je short 06d49h                           ; 74 03
-    jmp near 06c91h                           ; e9 48 ff
+    je short 07096h                           ; 74 03
+    jmp near 06fdeh                           ; e9 48 ff
     mov ax, strict word 00009h                ; b8 09 00
-    call 016ach                               ; e8 5d a9
+    call 016ach                               ; e8 10 a6
     mov byte [bp+010h], al                    ; 88 46 10
     mov ax, strict word 00008h                ; b8 08 00
-    call 016ach                               ; e8 54 a9
+    call 016ach                               ; e8 07 a6
     mov byte [bp+00fh], al                    ; 88 46 0f
     mov ax, strict word 00007h                ; b8 07 00
-    call 016ach                               ; e8 4b a9
+    call 016ach                               ; e8 fe a5
     mov byte [bp+00eh], al                    ; 88 46 0e
     mov ax, strict word 00032h                ; b8 32 00
-    call 016ach                               ; e8 42 a9
+    call 016ach                               ; e8 f5 a5
     mov byte [bp+011h], al                    ; 88 46 11
     mov byte [bp+012h], al                    ; 88 46 12
-    jmp near 06c91h                           ; e9 1e ff
-    call 06b76h                               ; e8 00 fe
+    jmp near 06fdeh                           ; e9 1e ff
+    call 06ec3h                               ; e8 00 fe
     test ax, ax                               ; 85 c0
-    je short 06d80h                           ; 74 06
-    call 06b4eh                               ; e8 d1 fd
-    jmp near 06c91h                           ; e9 11 ff
+    je short 070cdh                           ; 74 06
+    call 06e9bh                               ; e8 d1 fd
+    jmp near 06fdeh                           ; e9 11 ff
     movzx dx, byte [bp+010h]                  ; 0f b6 56 10
     mov ax, strict word 00009h                ; b8 09 00
-    call 016c9h                               ; e8 3f a9
+    call 016c9h                               ; e8 f2 a5
     movzx dx, byte [bp+00fh]                  ; 0f b6 56 0f
     mov ax, strict word 00008h                ; b8 08 00
-    call 016c9h                               ; e8 35 a9
+    call 016c9h                               ; e8 e8 a5
     movzx dx, byte [bp+00eh]                  ; 0f b6 56 0e
     mov ax, strict word 00007h                ; b8 07 00
-    call 016c9h                               ; e8 2b a9
+    call 016c9h                               ; e8 de a5
     movzx dx, byte [bp+011h]                  ; 0f b6 56 11
     mov ax, strict word 00032h                ; b8 32 00
-    call 016c9h                               ; e8 21 a9
+    call 016c9h                               ; e8 d4 a5
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 fe a8
+    call 016ach                               ; e8 b1 a5
     mov bl, al                                ; 88 c3
     and bl, 07fh                              ; 80 e3 7f
-    jmp near 06d28h                           ; e9 72 ff
+    jmp near 07075h                           ; e9 72 ff
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 f0 a8
+    call 016ach                               ; e8 a3 a5
     mov bl, al                                ; 88 c3
     mov word [bp+012h], strict word 00000h    ; c7 46 12 00 00
     test AL, strict byte 020h                 ; a8 20
-    je short 06dcah                           ; 74 03
-    jmp near 06c91h                           ; e9 c7 fe
-    call 06b76h                               ; e8 a9 fd
+    je short 07117h                           ; 74 03
+    jmp near 06fdeh                           ; e9 c7 fe
+    call 06ec3h                               ; e8 a9 fd
     test ax, ax                               ; 85 c0
-    je short 06dd4h                           ; 74 03
-    call 06b4eh                               ; e8 7a fd
+    je short 07121h                           ; 74 03
+    call 06e9bh                               ; e8 7a fd
     movzx dx, byte [bp+00fh]                  ; 0f b6 56 0f
     mov ax, strict word 00001h                ; b8 01 00
-    call 016c9h                               ; e8 eb a8
+    call 016c9h                               ; e8 9e a5
     movzx dx, byte [bp+010h]                  ; 0f b6 56 10
     mov ax, strict word 00003h                ; b8 03 00
-    call 016c9h                               ; e8 e1 a8
+    call 016c9h                               ; e8 94 a5
     movzx dx, byte [bp+011h]                  ; 0f b6 56 11
     mov ax, strict word 00005h                ; b8 05 00
-    call 016c9h                               ; e8 d7 a8
+    call 016c9h                               ; e8 8a a5
     mov dx, 000a1h                            ; ba a1 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -9895,15 +10186,15 @@ _int1a_function:                             ; 0xf6c55 LB 0x1c8
     or AL, strict byte 020h                   ; 0c 20
     movzx dx, al                              ; 0f b6 d0
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016c9h                               ; e8 bf a8
-    jmp near 06c91h                           ; e9 84 fe
+    call 016c9h                               ; e8 72 a5
+    jmp near 06fdeh                           ; e9 84 fe
     mov ax, strict word 0000bh                ; b8 0b 00
-    call 016ach                               ; e8 99 a8
+    call 016ach                               ; e8 4c a5
     mov bl, al                                ; 88 c3
     and AL, strict byte 057h                  ; 24 57
     movzx dx, al                              ; 0f b6 d0
-    jmp near 06d2bh                           ; e9 0e ff
-send_to_mouse_ctrl_:                         ; 0xf6e1d LB 0x34
+    jmp near 07078h                           ; e9 0e ff
+send_to_mouse_ctrl_:                         ; 0xf716a LB 0x34
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -9914,11 +10205,11 @@ send_to_mouse_ctrl_:                         ; 0xf6e1d LB 0x34
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 06e3ch                           ; 74 0e
-    push 008f6h                               ; 68 f6 08
-    push 0116ah                               ; 68 6a 11
+    je short 07189h                           ; 74 0e
+    push 008eeh                               ; 68 ee 08
+    push 01168h                               ; 68 68 11
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 39 ab
+    call 01972h                               ; e8 ec a7
     add sp, strict byte 00006h                ; 83 c4 06
     mov AL, strict byte 0d4h                  ; b0 d4
     mov dx, strict word 00064h                ; ba 64 00
@@ -9932,7 +10223,7 @@ send_to_mouse_ctrl_:                         ; 0xf6e1d LB 0x34
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-get_mouse_data_:                             ; 0xf6e51 LB 0x3b
+get_mouse_data_:                             ; 0xf719e LB 0x3b
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -9946,15 +10237,15 @@ get_mouse_data_:                             ; 0xf6e51 LB 0x3b
     ; sub ah, ah                                ; 2a e4
     and ax, strict word 00021h                ; 25 21 00
     cmp ax, strict word 00021h                ; 3d 21 00
-    je short 06e72h                           ; 74 07
+    je short 071bfh                           ; 74 07
     test cx, cx                               ; 85 c9
-    je short 06e72h                           ; 74 03
+    je short 071bfh                           ; 74 03
     dec cx                                    ; 49
-    jmp short 06e5dh                          ; eb eb
+    jmp short 071aah                          ; eb eb
     test cx, cx                               ; 85 c9
-    jne short 06e7ah                          ; 75 04
+    jne short 071c7h                          ; 75 04
     mov AL, strict byte 001h                  ; b0 01
-    jmp short 06e85h                          ; eb 0b
+    jmp short 071d2h                          ; eb 0b
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -9966,7 +10257,7 @@ get_mouse_data_:                             ; 0xf6e51 LB 0x3b
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-set_kbd_command_byte_:                       ; 0xf6e8c LB 0x32
+set_kbd_command_byte_:                       ; 0xf71d9 LB 0x32
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -9977,11 +10268,11 @@ set_kbd_command_byte_:                       ; 0xf6e8c LB 0x32
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 002h                 ; a8 02
-    je short 06eabh                           ; 74 0e
-    push 00900h                               ; 68 00 09
-    push 0116ah                               ; 68 6a 11
+    je short 071f8h                           ; 74 0e
+    push 008f8h                               ; 68 f8 08
+    push 01168h                               ; 68 68 11
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 ca aa
+    call 01972h                               ; e8 7d a7
     add sp, strict byte 00006h                ; 83 c4 06
     mov AL, strict byte 060h                  ; b0 60
     mov dx, strict word 00064h                ; ba 64 00
@@ -9994,13 +10285,13 @@ set_kbd_command_byte_:                       ; 0xf6e8c LB 0x32
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-_int74_function:                             ; 0xf6ebe LB 0xca
+_int74_function:                             ; 0xf720b LB 0xca
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     sub sp, strict byte 00008h                ; 83 ec 08
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 9f a7
+    call 0166ch                               ; e8 52 a4
     mov cx, ax                                ; 89 c1
     mov word [bp+004h], strict word 00000h    ; c7 46 04 00 00
     mov dx, strict word 00064h                ; ba 64 00
@@ -10009,7 +10300,7 @@ _int74_function:                             ; 0xf6ebe LB 0xca
     ; sub ah, ah                                ; 2a e4
     and AL, strict byte 021h                  ; 24 21
     cmp AL, strict byte 021h                  ; 3c 21
-    jne near 06f74h                           ; 0f 85 92 00
+    jne near 072c1h                           ; 0f 85 92 00
     mov dx, strict word 00060h                ; ba 60 00
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -10017,14 +10308,14 @@ _int74_function:                             ; 0xf6ebe LB 0xca
     mov bl, al                                ; 88 c3
     mov dx, strict word 00026h                ; ba 26 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 5e a7
+    call 01650h                               ; e8 11 a4
     mov byte [bp-006h], al                    ; 88 46 fa
     mov dx, strict word 00027h                ; ba 27 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 53 a7
+    call 01650h                               ; e8 06 a4
     mov byte [bp-008h], al                    ; 88 46 f8
     test AL, strict byte 080h                 ; a8 80
-    je short 06f74h                           ; 74 70
+    je short 072c1h                           ; 74 70
     mov al, byte [bp-008h]                    ; 8a 46 f8
     and AL, strict byte 007h                  ; 24 07
     mov byte [bp-002h], al                    ; 88 46 fe
@@ -10035,109 +10326,107 @@ _int74_function:                             ; 0xf6ebe LB 0xca
     movzx dx, al                              ; 0f b6 d0
     add dx, strict byte 00028h                ; 83 c2 28
     mov ax, cx                                ; 89 c8
-    call 0165eh                               ; e8 3d a7
+    call 0165eh                               ; e8 f0 a3
     mov al, byte [bp-004h]                    ; 8a 46 fc
     cmp al, byte [bp-002h]                    ; 3a 46 fe
-    jc short 06f65h                           ; 72 3c
+    jc short 072b2h                           ; 72 3c
     mov dx, strict word 00028h                ; ba 28 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 1f a7
+    call 01650h                               ; e8 d2 a3
     xor ah, ah                                ; 30 e4
     mov word [bp+00ch], ax                    ; 89 46 0c
     mov dx, strict word 00029h                ; ba 29 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 12 a7
+    call 01650h                               ; e8 c5 a3
     xor ah, ah                                ; 30 e4
     mov word [bp+00ah], ax                    ; 89 46 0a
     mov dx, strict word 0002ah                ; ba 2a 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 05 a7
+    call 01650h                               ; e8 b8 a3
     xor ah, ah                                ; 30 e4
     mov word [bp+008h], ax                    ; 89 46 08
     xor al, al                                ; 30 c0
     mov word [bp+006h], ax                    ; 89 46 06
     mov byte [bp-006h], ah                    ; 88 66 fa
     test byte [bp-008h], 080h                 ; f6 46 f8 80
-    je short 06f68h                           ; 74 0a
+    je short 072b5h                           ; 74 0a
     mov word [bp+004h], strict word 00001h    ; c7 46 04 01 00
-    jmp short 06f68h                          ; eb 03
+    jmp short 072b5h                          ; eb 03
     inc byte [bp-006h]                        ; fe 46 fa
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     mov dx, strict word 00026h                ; ba 26 00
     mov ax, cx                                ; 89 c8
-    call 0165eh                               ; e8 ea a6
+    call 0165eh                               ; e8 9d a3
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
-    int3                                      ; cc
-    outsw                                     ; 6f
-    inc dx                                    ; 42
-    jo short 06f42h                           ; 70 c5
-    jo short 06fd5h                           ; 70 56
-    jno short 06f45h                          ; 71 c4
-    jno short 06f9bh                          ; 71 18
-    jo short 06f71h                           ; 70 ec
-    jno short 06f38h                          ; 71 b1
-    db  072h
-_int15_function_mouse:                       ; 0xf6f88 LB 0x38b
+    sbb word [bp+di-071h], si                 ; 19 73 8f
+    jnc short 072dch                          ; 73 12
+    je short 0726fh                           ; 74 a3
+    je short 072dfh                           ; 74 11
+    jne short 07335h                          ; 75 65
+    jnc short 0730bh                          ; 73 39
+    jne short 072d2h                          ; 75 fe
+    db  075h
+_int15_function_mouse:                       ; 0xf72d5 LB 0x38b
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     sub sp, strict byte 00006h                ; 83 ec 06
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 d4 a6
+    call 0166ch                               ; e8 87 a3
     mov cx, ax                                ; 89 c1
     cmp byte [bp+012h], 007h                  ; 80 7e 12 07
-    jbe short 06fabh                          ; 76 0b
+    jbe short 072f8h                          ; 76 0b
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 001h                  ; c6 46 13 01
-    jmp near 0730dh                           ; e9 62 03
+    jmp near 0765ah                           ; e9 62 03
     mov ax, strict word 00065h                ; b8 65 00
-    call 06e8ch                               ; e8 db fe
+    call 071d9h                               ; e8 db fe
     and word [bp+018h], strict byte 0fffeh    ; 83 66 18 fe
     mov byte [bp+013h], 000h                  ; c6 46 13 00
     mov al, byte [bp+012h]                    ; 8a 46 12
     cmp AL, strict byte 007h                  ; 3c 07
-    jnbe near 072f4h                          ; 0f 87 32 03
+    jnbe near 07641h                          ; 0f 87 32 03
     movzx si, al                              ; 0f b6 f0
     add si, si                                ; 01 f6
-    jmp word [cs:si+06f78h]                   ; 2e ff a4 78 6f
+    jmp word [cs:si+072c5h]                   ; 2e ff a4 c5 72
     cmp byte [bp+00dh], 001h                  ; 80 7e 0d 01
-    jnbe near 072ffh                          ; 0f 87 2b 03
+    jnbe near 0764ch                          ; 0f 87 2b 03
     mov dx, strict word 00027h                ; ba 27 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 74 a6
+    call 01650h                               ; e8 27 a3
     test AL, strict byte 080h                 ; a8 80
-    jne short 06febh                          ; 75 0b
+    jne short 07338h                          ; 75 0b
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 005h                  ; c6 46 13 05
-    jmp near 07307h                           ; e9 1c 03
+    jmp near 07654h                           ; e9 1c 03
     cmp byte [bp+00dh], 000h                  ; 80 7e 0d 00
     db  00fh, 094h, 0c0h
     ; sete al                                   ; 0f 94 c0
     add AL, strict byte 0f4h                  ; 04 f4
     xor ah, ah                                ; 30 e4
-    call 06e1dh                               ; e8 24 fe
+    call 0716ah                               ; e8 24 fe
     test al, al                               ; 84 c0
-    jne near 0728dh                           ; 0f 85 8e 02
+    jne near 075dah                           ; 0f 85 8e 02
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 4a fe
+    call 0719eh                               ; e8 4a fe
     test al, al                               ; 84 c0
-    je near 07307h                            ; 0f 84 fa 02
+    je near 07654h                            ; 0f 84 fa 02
     cmp byte [bp-008h], 0fah                  ; 80 7e f8 fa
-    jne near 0728dh                           ; 0f 85 78 02
-    jmp near 07307h                           ; e9 ef 02
+    jne near 075dah                           ; 0f 85 78 02
+    jmp near 07654h                           ; e9 ef 02
     mov al, byte [bp+00dh]                    ; 8a 46 0d
     cmp AL, strict byte 001h                  ; 3c 01
-    jc short 07023h                           ; 72 04
+    jc short 07370h                           ; 72 04
     cmp AL, strict byte 008h                  ; 3c 08
-    jbe short 07026h                          ; 76 03
-    jmp near 071b9h                           ; e9 93 01
+    jbe short 07373h                          ; 76 03
+    jmp near 07506h                           ; e9 93 01
     mov dx, strict word 00027h                ; ba 27 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 22 a6
+    call 01650h                               ; e8 d5 a2
     mov ah, byte [bp+00dh]                    ; 8a 66 0d
     db  0feh, 0cch
     ; dec ah                                    ; fe cc
@@ -10146,272 +10435,272 @@ _int15_function_mouse:                       ; 0xf6f88 LB 0x38b
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00027h                ; ba 27 00
     mov ax, cx                                ; 89 c8
-    call 0165eh                               ; e8 1c a6
+    call 0165eh                               ; e8 cf a2
     mov dx, strict word 00026h                ; ba 26 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 06 a6
+    call 01650h                               ; e8 b9 a2
     and AL, strict byte 0f8h                  ; 24 f8
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00026h                ; ba 26 00
     mov ax, cx                                ; 89 c8
-    call 0165eh                               ; e8 07 a6
+    call 0165eh                               ; e8 ba a2
     mov ax, 000ffh                            ; b8 ff 00
-    call 06e1dh                               ; e8 c0 fd
+    call 0716ah                               ; e8 c0 fd
     test al, al                               ; 84 c0
-    jne near 0728dh                           ; 0f 85 2a 02
+    jne near 075dah                           ; 0f 85 2a 02
     mov dx, ss                                ; 8c d2
     lea ax, [bp-004h]                         ; 8d 46 fc
-    call 06e51h                               ; e8 e6 fd
+    call 0719eh                               ; e8 e6 fd
     mov cl, al                                ; 88 c1
     cmp byte [bp-004h], 0feh                  ; 80 7e fc fe
-    jne short 0707eh                          ; 75 0b
+    jne short 073cbh                          ; 75 0b
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 004h                  ; c6 46 13 04
-    jmp near 07307h                           ; e9 89 02
+    jmp near 07654h                           ; e9 89 02
     cmp byte [bp-004h], 0fah                  ; 80 7e fc fa
-    je short 07094h                           ; 74 10
+    je short 073e1h                           ; 74 10
     movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
     push ax                                   ; 50
-    push 0090bh                               ; 68 0b 09
+    push 00903h                               ; 68 03 09
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 e1 a8
+    call 01972h                               ; e8 94 a5
     add sp, strict byte 00006h                ; 83 c4 06
     test cl, cl                               ; 84 c9
-    jne near 0728dh                           ; 0f 85 f3 01
+    jne near 075dah                           ; 0f 85 f3 01
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 af fd
+    call 0719eh                               ; e8 af fd
     test al, al                               ; 84 c0
-    jne near 0728dh                           ; 0f 85 e5 01
+    jne near 075dah                           ; 0f 85 e5 01
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 06e51h                               ; e8 a1 fd
+    call 0719eh                               ; e8 a1 fd
     test al, al                               ; 84 c0
-    jne near 0728dh                           ; 0f 85 d7 01
+    jne near 075dah                           ; 0f 85 d7 01
     mov al, byte [bp-008h]                    ; 8a 46 f8
     mov byte [bp+00ch], al                    ; 88 46 0c
     mov al, byte [bp-006h]                    ; 8a 46 fa
     mov byte [bp+00dh], al                    ; 88 46 0d
-    jmp near 07307h                           ; e9 42 02
+    jmp near 07654h                           ; e9 42 02
     mov al, byte [bp+00dh]                    ; 8a 46 0d
     cmp AL, strict byte 003h                  ; 3c 03
-    jc short 070dch                           ; 72 10
-    jbe short 070fah                          ; 76 2c
+    jc short 07429h                           ; 72 10
+    jbe short 07447h                          ; 76 2c
     cmp AL, strict byte 006h                  ; 3c 06
-    je short 0710ch                           ; 74 3a
+    je short 07459h                           ; 74 3a
     cmp AL, strict byte 005h                  ; 3c 05
-    je short 07106h                           ; 74 30
+    je short 07453h                           ; 74 30
     cmp AL, strict byte 004h                  ; 3c 04
-    je short 07100h                           ; 74 26
-    jmp short 07112h                          ; eb 36
+    je short 0744dh                           ; 74 26
+    jmp short 0745fh                          ; eb 36
     cmp AL, strict byte 002h                  ; 3c 02
-    je short 070f4h                           ; 74 14
+    je short 07441h                           ; 74 14
     cmp AL, strict byte 001h                  ; 3c 01
-    je short 070eeh                           ; 74 0a
+    je short 0743bh                           ; 74 0a
     test al, al                               ; 84 c0
-    jne short 07112h                          ; 75 2a
+    jne short 0745fh                          ; 75 2a
     mov byte [bp-008h], 00ah                  ; c6 46 f8 0a
-    jmp short 07116h                          ; eb 28
+    jmp short 07463h                          ; eb 28
     mov byte [bp-008h], 014h                  ; c6 46 f8 14
-    jmp short 07116h                          ; eb 22
+    jmp short 07463h                          ; eb 22
     mov byte [bp-008h], 028h                  ; c6 46 f8 28
-    jmp short 07116h                          ; eb 1c
+    jmp short 07463h                          ; eb 1c
     mov byte [bp-008h], 03ch                  ; c6 46 f8 3c
-    jmp short 07116h                          ; eb 16
+    jmp short 07463h                          ; eb 16
     mov byte [bp-008h], 050h                  ; c6 46 f8 50
-    jmp short 07116h                          ; eb 10
+    jmp short 07463h                          ; eb 10
     mov byte [bp-008h], 064h                  ; c6 46 f8 64
-    jmp short 07116h                          ; eb 0a
+    jmp short 07463h                          ; eb 0a
     mov byte [bp-008h], 0c8h                  ; c6 46 f8 c8
-    jmp short 07116h                          ; eb 04
+    jmp short 07463h                          ; eb 04
     mov byte [bp-008h], 000h                  ; c6 46 f8 00
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
-    jbe short 0714bh                          ; 76 2f
+    jbe short 07498h                          ; 76 2f
     mov ax, 000f3h                            ; b8 f3 00
-    call 06e1dh                               ; e8 fb fc
+    call 0716ah                               ; e8 fb fc
     test al, al                               ; 84 c0
-    jne short 07140h                          ; 75 1a
+    jne short 0748dh                          ; 75 1a
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 06e51h                               ; e8 23 fd
+    call 0719eh                               ; e8 23 fd
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    call 06e1dh                               ; e8 e8 fc
+    call 0716ah                               ; e8 e8 fc
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 06e51h                               ; e8 14 fd
-    jmp near 07307h                           ; e9 c7 01
+    call 0719eh                               ; e8 14 fd
+    jmp near 07654h                           ; e9 c7 01
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 003h                  ; c6 46 13 03
-    jmp near 07307h                           ; e9 bc 01
+    jmp near 07654h                           ; e9 bc 01
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 002h                  ; c6 46 13 02
-    jmp near 07307h                           ; e9 b1 01
+    jmp near 07654h                           ; e9 b1 01
     cmp byte [bp+00dh], 004h                  ; 80 7e 0d 04
-    jnc short 071b9h                          ; 73 5d
+    jnc short 07506h                          ; 73 5d
     mov ax, 000e8h                            ; b8 e8 00
-    call 06e1dh                               ; e8 bb fc
+    call 0716ah                               ; e8 bb fc
     test al, al                               ; 84 c0
-    jne short 071aeh                          ; 75 48
+    jne short 074fbh                          ; 75 48
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 e3 fc
+    call 0719eh                               ; e8 e3 fc
     cmp byte [bp-008h], 0fah                  ; 80 7e f8 fa
-    je short 07184h                           ; 74 10
+    je short 074d1h                           ; 74 10
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 00936h                               ; 68 36 09
+    push 0092eh                               ; 68 2e 09
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 f1 a7
+    call 01972h                               ; e8 a4 a4
     add sp, strict byte 00006h                ; 83 c4 06
     movzx ax, byte [bp+00dh]                  ; 0f b6 46 0d
-    call 06e1dh                               ; e8 92 fc
+    call 0716ah                               ; e8 92 fc
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 be fc
+    call 0719eh                               ; e8 be fc
     cmp byte [bp-008h], 0fah                  ; 80 7e f8 fa
-    je near 07307h                            ; 0f 84 6c 01
+    je near 07654h                            ; 0f 84 6c 01
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 00936h                               ; 68 36 09
+    push 0092eh                               ; 68 2e 09
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 ca a7
+    call 01972h                               ; e8 7d a4
     add sp, strict byte 00006h                ; 83 c4 06
-    jmp near 07307h                           ; e9 59 01
+    jmp near 07654h                           ; e9 59 01
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 003h                  ; c6 46 13 03
-    jmp near 07307h                           ; e9 4e 01
+    jmp near 07654h                           ; e9 4e 01
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 002h                  ; c6 46 13 02
-    jmp near 07307h                           ; e9 43 01
+    jmp near 07654h                           ; e9 43 01
     mov ax, 000f2h                            ; b8 f2 00
-    call 06e1dh                               ; e8 53 fc
+    call 0716ah                               ; e8 53 fc
     test al, al                               ; 84 c0
-    jne short 071e1h                          ; 75 13
+    jne short 0752eh                          ; 75 13
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 7b fc
+    call 0719eh                               ; e8 7b fc
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 06e51h                               ; e8 73 fc
-    jmp near 070bch                           ; e9 db fe
+    call 0719eh                               ; e8 73 fc
+    jmp near 07409h                           ; e9 db fe
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 003h                  ; c6 46 13 03
-    jmp near 07307h                           ; e9 1b 01
+    jmp near 07654h                           ; e9 1b 01
     mov al, byte [bp+00dh]                    ; 8a 46 0d
     test al, al                               ; 84 c0
-    jbe short 071fah                          ; 76 07
+    jbe short 07547h                          ; 76 07
     cmp AL, strict byte 002h                  ; 3c 02
-    jbe short 07263h                          ; 76 6c
-    jmp near 07297h                           ; e9 9d 00
+    jbe short 075b0h                          ; 76 6c
+    jmp near 075e4h                           ; e9 9d 00
     mov ax, 000e9h                            ; b8 e9 00
-    call 06e1dh                               ; e8 1d fc
+    call 0716ah                               ; e8 1d fc
     test al, al                               ; 84 c0
-    jne near 0728dh                           ; 0f 85 87 00
+    jne near 075dah                           ; 0f 85 87 00
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 43 fc
+    call 0719eh                               ; e8 43 fc
     mov cl, al                                ; 88 c1
     cmp byte [bp-008h], 0fah                  ; 80 7e f8 fa
-    je short 07226h                           ; 74 10
+    je short 07573h                           ; 74 10
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 00936h                               ; 68 36 09
+    push 0092eh                               ; 68 2e 09
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 4f a7
+    call 01972h                               ; e8 02 a4
     add sp, strict byte 00006h                ; 83 c4 06
     test cl, cl                               ; 84 c9
-    jne short 0728dh                          ; 75 63
+    jne short 075dah                          ; 75 63
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 1f fc
+    call 0719eh                               ; e8 1f fc
     test al, al                               ; 84 c0
-    jne short 0728dh                          ; 75 57
+    jne short 075dah                          ; 75 57
     mov dx, ss                                ; 8c d2
     lea ax, [bp-006h]                         ; 8d 46 fa
-    call 06e51h                               ; e8 13 fc
+    call 0719eh                               ; e8 13 fc
     test al, al                               ; 84 c0
-    jne short 0728dh                          ; 75 4b
+    jne short 075dah                          ; 75 4b
     mov dx, ss                                ; 8c d2
     lea ax, [bp-004h]                         ; 8d 46 fc
-    call 06e51h                               ; e8 07 fc
+    call 0719eh                               ; e8 07 fc
     test al, al                               ; 84 c0
-    jne short 0728dh                          ; 75 3f
+    jne short 075dah                          ; 75 3f
     mov al, byte [bp-008h]                    ; 8a 46 f8
     mov byte [bp+00ch], al                    ; 88 46 0c
     mov al, byte [bp-006h]                    ; 8a 46 fa
     mov byte [bp+010h], al                    ; 88 46 10
     mov al, byte [bp-004h]                    ; 8a 46 fc
     mov byte [bp+00eh], al                    ; 88 46 0e
-    jmp near 07307h                           ; e9 a4 00
+    jmp near 07654h                           ; e9 a4 00
     cmp AL, strict byte 001h                  ; 3c 01
-    jne short 0726ch                          ; 75 05
+    jne short 075b9h                          ; 75 05
     mov ax, 000e6h                            ; b8 e6 00
-    jmp short 0726fh                          ; eb 03
+    jmp short 075bch                          ; eb 03
     mov ax, 000e7h                            ; b8 e7 00
-    call 06e1dh                               ; e8 ab fb
+    call 0716ah                               ; e8 ab fb
     mov cl, al                                ; 88 c1
     test cl, cl                               ; 84 c9
-    jne short 07287h                          ; 75 0f
+    jne short 075d4h                          ; 75 0f
     mov dx, ss                                ; 8c d2
     lea ax, [bp-008h]                         ; 8d 46 f8
-    call 06e51h                               ; e8 d1 fb
+    call 0719eh                               ; e8 d1 fb
     cmp byte [bp-008h], 0fah                  ; 80 7e f8 fa
     db  00fh, 095h, 0c1h
     ; setne cl                                  ; 0f 95 c1
     test cl, cl                               ; 84 c9
-    je near 07307h                            ; 0f 84 7a 00
+    je near 07654h                            ; 0f 84 7a 00
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 003h                  ; c6 46 13 03
-    jmp short 07307h                          ; eb 70
+    jmp short 07654h                          ; eb 70
     movzx ax, byte [bp+00dh]                  ; 0f b6 46 0d
     push ax                                   ; 50
-    push 00962h                               ; 68 62 09
+    push 0095ah                               ; 68 5a 09
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 ce a6
+    call 01972h                               ; e8 81 a3
     add sp, strict byte 00006h                ; 83 c4 06
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 001h                  ; c6 46 13 01
-    jmp short 07307h                          ; eb 56
+    jmp short 07654h                          ; eb 56
     mov si, word [bp+00ch]                    ; 8b 76 0c
     mov bx, si                                ; 89 f3
     mov dx, strict word 00022h                ; ba 22 00
     mov ax, cx                                ; 89 c8
-    call 0167ah                               ; e8 bc a3
+    call 0167ah                               ; e8 6f a0
     mov bx, word [bp+014h]                    ; 8b 5e 14
     mov dx, strict word 00024h                ; ba 24 00
     mov ax, cx                                ; 89 c8
-    call 0167ah                               ; e8 b1 a3
+    call 0167ah                               ; e8 64 a0
     mov dx, strict word 00027h                ; ba 27 00
     mov ax, cx                                ; 89 c8
-    call 01650h                               ; e8 7f a3
+    call 01650h                               ; e8 32 a0
     mov ah, al                                ; 88 c4
     test si, si                               ; 85 f6
-    jne short 072e5h                          ; 75 0e
+    jne short 07632h                          ; 75 0e
     cmp word [bp+014h], strict byte 00000h    ; 83 7e 14 00
-    jne short 072e5h                          ; 75 08
+    jne short 07632h                          ; 75 08
     test AL, strict byte 080h                 ; a8 80
-    je short 072e7h                           ; 74 06
+    je short 07634h                           ; 74 06
     and AL, strict byte 07fh                  ; 24 7f
-    jmp short 072e7h                          ; eb 02
+    jmp short 07634h                          ; eb 02
     or AL, strict byte 080h                   ; 0c 80
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00027h                ; ba 27 00
     mov ax, cx                                ; 89 c8
-    call 0165eh                               ; e8 6c a3
-    jmp short 07307h                          ; eb 13
-    push 0097ch                               ; 68 7c 09
+    call 0165eh                               ; e8 1f a0
+    jmp short 07654h                          ; eb 13
+    push 00974h                               ; 68 74 09
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 76 a6
+    call 01972h                               ; e8 29 a3
     add sp, strict byte 00004h                ; 83 c4 04
     or word [bp+018h], strict byte 00001h     ; 83 4e 18 01
     mov byte [bp+013h], 001h                  ; c6 46 13 01
     mov ax, strict word 00047h                ; b8 47 00
-    call 06e8ch                               ; e8 7f fb
+    call 071d9h                               ; e8 7f fb
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-_int17_function:                             ; 0xf7313 LB 0xb3
+_int17_function:                             ; 0xf7660 LB 0xb3
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -10421,24 +10710,24 @@ _int17_function:                             ; 0xf7313 LB 0xb3
     add dx, dx                                ; 01 d2
     add dx, strict byte 00008h                ; 83 c2 08
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 45 a3
+    call 0166ch                               ; e8 f8 9f
     mov bx, ax                                ; 89 c3
     mov si, ax                                ; 89 c6
     cmp byte [bp+013h], 003h                  ; 80 7e 13 03
-    jnc near 073bch                           ; 0f 83 89 00
+    jnc near 07709h                           ; 0f 83 89 00
     mov ax, word [bp+00eh]                    ; 8b 46 0e
     cmp ax, strict word 00003h                ; 3d 03 00
-    jnc near 073bch                           ; 0f 83 7f 00
+    jnc near 07709h                           ; 0f 83 7f 00
     test bx, bx                               ; 85 db
-    jbe near 073bch                           ; 0f 86 79 00
+    jbe near 07709h                           ; 0f 86 79 00
     mov dx, ax                                ; 89 c2
     add dx, strict byte 00078h                ; 83 c2 78
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 02 a3
+    call 01650h                               ; e8 b5 9f
     movzx cx, al                              ; 0f b6 c8
     sal cx, 008h                              ; c1 e1 08
     cmp byte [bp+013h], 000h                  ; 80 7e 13 00
-    jne short 07387h                          ; 75 2d
+    jne short 076d4h                          ; 75 2d
     mov al, byte [bp+012h]                    ; 8a 46 12
     mov dx, bx                                ; 89 da
     out DX, AL                                ; ee
@@ -10458,13 +10747,13 @@ _int17_function:                             ; 0xf7313 LB 0xb3
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 040h                 ; a8 40
-    je short 07387h                           ; 74 07
+    je short 076d4h                           ; 74 07
     test cx, cx                               ; 85 c9
-    je short 07387h                           ; 74 03
+    je short 076d4h                           ; 74 03
     dec cx                                    ; 49
-    jmp short 07376h                          ; eb ef
+    jmp short 076c3h                          ; eb ef
     cmp byte [bp+013h], 001h                  ; 80 7e 13 01
-    jne short 073a3h                          ; 75 16
+    jne short 076f0h                          ; 75 16
     lea dx, [si+002h]                         ; 8d 54 02
     in AL, DX                                 ; ec
     db  02ah, 0e4h
@@ -10483,16 +10772,16 @@ _int17_function:                             ; 0xf7313 LB 0xb3
     xor AL, strict byte 048h                  ; 34 48
     mov byte [bp+013h], al                    ; 88 46 13
     test cx, cx                               ; 85 c9
-    jne short 073b6h                          ; 75 04
+    jne short 07703h                          ; 75 04
     or byte [bp+013h], 001h                   ; 80 4e 13 01
     and byte [bp+01ch], 0feh                  ; 80 66 1c fe
-    jmp short 073c0h                          ; eb 04
+    jmp short 0770dh                          ; eb 04
     or byte [bp+01ch], 001h                   ; 80 4e 1c 01
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-wait_:                                       ; 0xf73c6 LB 0xb2
+wait_:                                       ; 0xf7713 LB 0xb2
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -10510,28 +10799,28 @@ wait_:                                       ; 0xf73c6 LB 0xb2
     xor cx, cx                                ; 31 c9
     mov dx, 0046ch                            ; ba 6c 04
     xor ax, ax                                ; 31 c0
-    call 01688h                               ; e8 9f a2
+    call 01688h                               ; e8 52 9f
     mov word [bp-00eh], ax                    ; 89 46 f2
     mov bx, dx                                ; 89 d3
     hlt                                       ; f4
     mov dx, 0046ch                            ; ba 6c 04
     xor ax, ax                                ; 31 c0
-    call 01688h                               ; e8 91 a2
+    call 01688h                               ; e8 44 9f
     mov word [bp-012h], ax                    ; 89 46 ee
     mov di, dx                                ; 89 d7
     cmp dx, bx                                ; 39 da
-    jnbe short 07407h                         ; 77 07
-    jne short 0740eh                          ; 75 0c
+    jnbe short 07754h                         ; 77 07
+    jne short 0775bh                          ; 75 0c
     cmp ax, word [bp-00eh]                    ; 3b 46 f2
-    jbe short 0740eh                          ; 76 07
+    jbe short 0775bh                          ; 76 07
     sub ax, word [bp-00eh]                    ; 2b 46 f2
     sbb dx, bx                                ; 19 da
-    jmp short 07419h                          ; eb 0b
+    jmp short 07766h                          ; eb 0b
     cmp dx, bx                                ; 39 da
-    jc short 07419h                           ; 72 07
-    jne short 0741dh                          ; 75 09
+    jc short 07766h                           ; 72 07
+    jne short 0776ah                          ; 75 09
     cmp ax, word [bp-00eh]                    ; 3b 46 f2
-    jnc short 0741dh                          ; 73 04
+    jnc short 0776ah                          ; 73 04
     sub si, ax                                ; 29 c6
     sbb cx, dx                                ; 19 d1
     mov ax, word [bp-012h]                    ; 8b 46 ee
@@ -10539,13 +10828,13 @@ wait_:                                       ; 0xf73c6 LB 0xb2
     mov bx, di                                ; 89 fb
     mov ax, 00100h                            ; b8 00 01
     int 016h                                  ; cd 16
-    je near 07433h                            ; 0f 84 05 00
+    je near 07780h                            ; 0f 84 05 00
     mov AL, strict byte 001h                  ; b0 01
-    jmp near 07435h                           ; e9 02 00
+    jmp near 07782h                           ; e9 02 00
     db  032h, 0c0h
     ; xor al, al                                ; 32 c0
     test al, al                               ; 84 c0
-    je short 0745dh                           ; 74 24
+    je short 077aah                           ; 74 24
     db  033h, 0c0h
     ; xor ax, ax                                ; 33 c0
     int 016h                                  ; cd 16
@@ -10554,19 +10843,19 @@ wait_:                                       ; 0xf73c6 LB 0xb2
     mov byte [bp-00ah], al                    ; 88 46 f6
     movzx ax, dl                              ; 0f b6 c2
     push ax                                   ; 50
-    push 0099eh                               ; 68 9e 09
+    push 00996h                               ; 68 96 09
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 22 a5
+    call 01972h                               ; e8 d5 a1
     add sp, strict byte 00006h                ; 83 c4 06
     cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    je short 0745dh                           ; 74 04
+    je short 077aah                           ; 74 04
     mov al, dl                                ; 88 d0
-    jmp short 0746fh                          ; eb 12
+    jmp short 077bch                          ; eb 12
     test cx, cx                               ; 85 c9
-    jnle short 073eeh                         ; 7f 8d
-    jne short 07467h                          ; 75 04
+    jnle short 0773bh                         ; 7f 8d
+    jne short 077b4h                          ; 75 04
     test si, si                               ; 85 f6
-    jnbe short 073eeh                         ; 77 87
+    jnbe short 0773bh                         ; 77 87
     mov ax, word [bp-010h]                    ; 8b 46 f0
     push ax                                   ; 50
     popfw                                     ; 9d
@@ -10578,7 +10867,7 @@ wait_:                                       ; 0xf73c6 LB 0xb2
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-read_logo_byte_:                             ; 0xf7478 LB 0x16
+read_logo_byte_:                             ; 0xf77c5 LB 0x16
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push dx                                   ; 52
@@ -10593,7 +10882,7 @@ read_logo_byte_:                             ; 0xf7478 LB 0x16
     pop dx                                    ; 5a
     pop bp                                    ; 5d
     retn                                      ; c3
-read_logo_word_:                             ; 0xf748e LB 0x14
+read_logo_word_:                             ; 0xf77db LB 0x14
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push dx                                   ; 52
@@ -10606,7 +10895,7 @@ read_logo_word_:                             ; 0xf748e LB 0x14
     pop dx                                    ; 5a
     pop bp                                    ; 5d
     retn                                      ; c3
-print_detected_harddisks_:                   ; 0xf74a2 LB 0x130
+print_detected_harddisks_:                   ; 0xf77ef LB 0x130
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -10618,77 +10907,77 @@ print_detected_harddisks_:                   ; 0xf74a2 LB 0x130
     push ax                                   ; 50
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 b7 a1
+    call 0166ch                               ; e8 6a 9e
     mov si, ax                                ; 89 c6
     mov byte [bp-00ch], 000h                  ; c6 46 f4 00
     xor cl, cl                                ; 30 c9
     xor ch, ch                                ; 30 ed
-    mov dx, 002c0h                            ; ba c0 02
-    call 01650h                               ; e8 8b a1
+    mov dx, 00304h                            ; ba 04 03
+    call 01650h                               ; e8 3e 9e
     mov byte [bp-00eh], al                    ; 88 46 f2
     xor bl, bl                                ; 30 db
     cmp bl, byte [bp-00eh]                    ; 3a 5e f2
-    jnc near 075a4h                           ; 0f 83 d3 00
+    jnc near 078f1h                           ; 0f 83 d3 00
     movzx dx, bl                              ; 0f b6 d3
-    add dx, 002c1h                            ; 81 c2 c1 02
+    add dx, 00305h                            ; 81 c2 05 03
     mov ax, si                                ; 89 f0
-    call 01650h                               ; e8 73 a1
+    call 01650h                               ; e8 26 9e
     mov bh, al                                ; 88 c7
     cmp AL, strict byte 00ch                  ; 3c 0c
-    jc short 07507h                           ; 72 24
+    jc short 07854h                           ; 72 24
     test cl, cl                               ; 84 c9
-    jne short 074f4h                          ; 75 0d
-    push 009afh                               ; 68 af 09
+    jne short 07841h                          ; 75 0d
+    push 009a7h                               ; 68 a7 09
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 83 a4
+    call 01972h                               ; e8 36 a1
     add sp, strict byte 00004h                ; 83 c4 04
     mov CL, strict byte 001h                  ; b1 01
     movzx ax, bl                              ; 0f b6 c3
     inc ax                                    ; 40
     push ax                                   ; 50
-    push 009c4h                               ; 68 c4 09
+    push 009bch                               ; 68 bc 09
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 71 a4
+    call 01972h                               ; e8 24 a1
     add sp, strict byte 00006h                ; 83 c4 06
-    jmp near 0759fh                           ; e9 98 00
+    jmp near 078ech                           ; e9 98 00
     cmp AL, strict byte 008h                  ; 3c 08
-    jc short 0751eh                           ; 72 13
+    jc short 0786bh                           ; 72 13
     test ch, ch                               ; 84 ed
-    jne short 0751ch                          ; 75 0d
-    push 009d7h                               ; 68 d7 09
+    jne short 07869h                          ; 75 0d
+    push 009cfh                               ; 68 cf 09
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 5b a4
+    call 01972h                               ; e8 0e a1
     add sp, strict byte 00004h                ; 83 c4 04
     mov CH, strict byte 001h                  ; b5 01
-    jmp short 074f4h                          ; eb d6
+    jmp short 07841h                          ; eb d6
     cmp AL, strict byte 004h                  ; 3c 04
-    jnc short 07539h                          ; 73 17
+    jnc short 07886h                          ; 73 17
     cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    jne short 07539h                          ; 75 11
-    push 009ech                               ; 68 ec 09
+    jne short 07886h                          ; 75 11
+    push 009e4h                               ; 68 e4 09
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 42 a4
+    call 01972h                               ; e8 f5 a0
     add sp, strict byte 00004h                ; 83 c4 04
     mov byte [bp-00ch], 001h                  ; c6 46 f4 01
-    jmp short 0754fh                          ; eb 16
+    jmp short 0789ch                          ; eb 16
     cmp bh, 004h                              ; 80 ff 04
-    jc short 0754fh                           ; 72 11
+    jc short 0789ch                           ; 72 11
     test cl, cl                               ; 84 c9
-    jne short 0754fh                          ; 75 0d
-    push 009feh                               ; 68 fe 09
+    jne short 0789ch                          ; 75 0d
+    push 009f6h                               ; 68 f6 09
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 28 a4
+    call 01972h                               ; e8 db a0
     add sp, strict byte 00004h                ; 83 c4 04
     mov CL, strict byte 001h                  ; b1 01
     movzx ax, bl                              ; 0f b6 c3
     inc ax                                    ; 40
     push ax                                   ; 50
-    push 00a12h                               ; 68 12 0a
+    push 00a0ah                               ; 68 0a 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 16 a4
+    call 01972h                               ; e8 c9 a0
     add sp, strict byte 00006h                ; 83 c4 06
     cmp bh, 004h                              ; 80 ff 04
-    jc short 07567h                           ; 72 03
+    jc short 078b4h                           ; 72 03
     sub bh, 004h                              ; 80 ef 04
     movzx ax, bh                              ; 0f b6 c7
     cwd                                       ; 99
@@ -10696,41 +10985,41 @@ print_detected_harddisks_:                   ; 0xf74a2 LB 0x130
     ; sub ax, dx                                ; 2b c2
     sar ax, 1                                 ; d1 f8
     test ax, ax                               ; 85 c0
-    je short 07578h                           ; 74 05
-    push 00a1ch                               ; 68 1c 0a
-    jmp short 0757bh                          ; eb 03
-    push 00a27h                               ; 68 27 0a
+    je short 078c5h                           ; 74 05
+    push 00a14h                               ; 68 14 0a
+    jmp short 078c8h                          ; eb 03
+    push 00a1fh                               ; 68 1f 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 f2 a3
+    call 01972h                               ; e8 a5 a0
     add sp, strict byte 00004h                ; 83 c4 04
     movzx ax, bh                              ; 0f b6 c7
     mov di, strict word 00002h                ; bf 02 00
     cwd                                       ; 99
     idiv di                                   ; f7 ff
     test dx, dx                               ; 85 d2
-    je short 07595h                           ; 74 05
-    push 00a30h                               ; 68 30 0a
-    jmp short 07598h                          ; eb 03
-    push 00a36h                               ; 68 36 0a
+    je short 078e2h                           ; 74 05
+    push 00a28h                               ; 68 28 0a
+    jmp short 078e5h                          ; eb 03
+    push 00a2eh                               ; 68 2e 0a
     push di                                   ; 57
-    call 01972h                               ; e8 d6 a3
+    call 01972h                               ; e8 89 a0
     add sp, strict byte 00004h                ; 83 c4 04
     db  0feh, 0c3h
     ; inc bl                                    ; fe c3
-    jmp near 074cah                           ; e9 26 ff
+    jmp near 07817h                           ; e9 26 ff
     cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    jne short 075bdh                          ; 75 13
+    jne short 0790ah                          ; 75 13
     test cl, cl                               ; 84 c9
-    jne short 075bdh                          ; 75 0f
+    jne short 0790ah                          ; 75 0f
     test ch, ch                               ; 84 ed
-    jne short 075bdh                          ; 75 0b
-    push 00a3dh                               ; 68 3d 0a
+    jne short 0790ah                          ; 75 0b
+    push 00a35h                               ; 68 35 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 b8 a3
+    call 01972h                               ; e8 6b a0
     add sp, strict byte 00004h                ; 83 c4 04
-    push 00a51h                               ; 68 51 0a
+    push 00a49h                               ; 68 49 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 ad a3
+    call 01972h                               ; e8 60 a0
     add sp, strict byte 00004h                ; 83 c4 04
     lea sp, [bp-00ah]                         ; 8d 66 f6
     pop di                                    ; 5f
@@ -10740,7 +11029,7 @@ print_detected_harddisks_:                   ; 0xf74a2 LB 0x130
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-get_boot_drive_:                             ; 0xf75d2 LB 0x28
+get_boot_drive_:                             ; 0xf791f LB 0x28
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -10748,12 +11037,12 @@ get_boot_drive_:                             ; 0xf75d2 LB 0x28
     mov bl, al                                ; 88 c3
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 8a a0
-    mov dx, 002c0h                            ; ba c0 02
-    call 01650h                               ; e8 68 a0
+    call 0166ch                               ; e8 3d 9d
+    mov dx, 00304h                            ; ba 04 03
+    call 01650h                               ; e8 1b 9d
     sub bl, 002h                              ; 80 eb 02
     cmp bl, al                                ; 38 c3
-    jc short 075f1h                           ; 72 02
+    jc short 0793eh                           ; 72 02
     mov BL, strict byte 0ffh                  ; b3 ff
     mov al, bl                                ; 88 d8
     lea sp, [bp-004h]                         ; 8d 66 fc
@@ -10761,7 +11050,7 @@ get_boot_drive_:                             ; 0xf75d2 LB 0x28
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-show_logo_:                                  ; 0xf75fa LB 0x224
+show_logo_:                                  ; 0xf7947 LB 0x224
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -10772,7 +11061,7 @@ show_logo_:                                  ; 0xf75fa LB 0x224
     sub sp, strict byte 0000ch                ; 83 ec 0c
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 5e a0
+    call 0166ch                               ; e8 11 9d
     mov si, ax                                ; 89 c6
     xor cl, cl                                ; 30 c9
     xor dx, dx                                ; 31 d2
@@ -10783,9 +11072,9 @@ show_logo_:                                  ; 0xf75fa LB 0x224
     mov AL, strict byte 048h                  ; b0 48
     out strict byte 040h, AL                  ; e6 40
     movzx ax, dl                              ; 0f b6 c2
-    call 0748eh                               ; e8 68 fe
+    call 077dbh                               ; e8 68 fe
     cmp ax, 066bbh                            ; 3d bb 66
-    jne near 076feh                           ; 0f 85 d1 00
+    jne near 07a4bh                           ; 0f 85 d1 00
     push SS                                   ; 16
     pop ES                                    ; 07
     lea di, [bp-016h]                         ; 8d 7e ea
@@ -10793,119 +11082,119 @@ show_logo_:                                  ; 0xf75fa LB 0x224
     int 010h                                  ; cd 10
     mov word [es:di], bx                      ; 26 89 1d
     cmp ax, strict word 0004fh                ; 3d 4f 00
-    jne near 076feh                           ; 0f 85 bd 00
+    jne near 07a4bh                           ; 0f 85 bd 00
     mov al, dl                                ; 88 d0
     add AL, strict byte 004h                  ; 04 04
     xor ah, ah                                ; 30 e4
-    call 07478h                               ; e8 2e fe
+    call 077c5h                               ; e8 2e fe
     mov ch, al                                ; 88 c5
     mov byte [bp-00ch], al                    ; 88 46 f4
     mov al, dl                                ; 88 d0
     add AL, strict byte 005h                  ; 04 05
     xor ah, ah                                ; 30 e4
-    call 07478h                               ; e8 20 fe
+    call 077c5h                               ; e8 20 fe
     mov dh, al                                ; 88 c6
     mov byte [bp-010h], al                    ; 88 46 f0
     mov al, dl                                ; 88 d0
     add AL, strict byte 002h                  ; 04 02
     xor ah, ah                                ; 30 e4
-    call 0748eh                               ; e8 28 fe
+    call 077dbh                               ; e8 28 fe
     mov bx, ax                                ; 89 c3
     mov word [bp-014h], ax                    ; 89 46 ec
     mov al, dl                                ; 88 d0
     add AL, strict byte 006h                  ; 04 06
     xor ah, ah                                ; 30 e4
-    call 07478h                               ; e8 04 fe
+    call 077c5h                               ; e8 04 fe
     mov byte [bp-012h], al                    ; 88 46 ee
     test ch, ch                               ; 84 ed
-    jne short 07685h                          ; 75 0a
+    jne short 079d2h                          ; 75 0a
     test dh, dh                               ; 84 f6
-    jne short 07685h                          ; 75 06
+    jne short 079d2h                          ; 75 06
     test bx, bx                               ; 85 db
-    je near 076feh                            ; 0f 84 79 00
+    je near 07a4bh                            ; 0f 84 79 00
     mov bx, 00142h                            ; bb 42 01
     mov ax, 04f02h                            ; b8 02 4f
     int 010h                                  ; cd 10
     cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    je short 076b6h                           ; 74 23
+    je short 07a03h                           ; 74 23
     xor bx, bx                                ; 31 db
-    jmp short 0769dh                          ; eb 06
+    jmp short 079eah                          ; eb 06
     inc bx                                    ; 43
     cmp bx, strict byte 00010h                ; 83 fb 10
-    jnbe short 076bdh                         ; 77 20
+    jnbe short 07a0ah                         ; 77 20
     mov ax, bx                                ; 89 d8
     or ah, 002h                               ; 80 cc 02
     mov dx, 003b8h                            ; ba b8 03
     out DX, ax                                ; ef
     xor dx, dx                                ; 31 d2
     mov ax, strict word 00001h                ; b8 01 00
-    call 073c6h                               ; e8 18 fd
+    call 07713h                               ; e8 18 fd
     cmp AL, strict byte 086h                  ; 3c 86
-    jne short 07697h                          ; 75 e5
+    jne short 079e4h                          ; 75 e5
     mov CL, strict byte 001h                  ; b1 01
-    jmp short 076bdh                          ; eb 07
+    jmp short 07a0ah                          ; eb 07
     mov ax, 00210h                            ; b8 10 02
     mov dx, 003b8h                            ; ba b8 03
     out DX, ax                                ; ef
     test cl, cl                               ; 84 c9
-    jne short 076d3h                          ; 75 12
+    jne short 07a20h                          ; 75 12
     mov ax, word [bp-014h]                    ; 8b 46 ec
     shr ax, 004h                              ; c1 e8 04
     mov dx, strict word 00001h                ; ba 01 00
-    call 073c6h                               ; e8 f9 fc
+    call 07713h                               ; e8 f9 fc
     cmp AL, strict byte 086h                  ; 3c 86
-    jne short 076d3h                          ; 75 02
+    jne short 07a20h                          ; 75 02
     mov CL, strict byte 001h                  ; b1 01
     cmp byte [bp-010h], 000h                  ; 80 7e f0 00
-    je short 076feh                           ; 74 25
+    je short 07a4bh                           ; 74 25
     test cl, cl                               ; 84 c9
-    jne short 076feh                          ; 75 21
+    jne short 07a4bh                          ; 75 21
     mov bx, strict word 00010h                ; bb 10 00
-    jmp short 076e7h                          ; eb 05
+    jmp short 07a34h                          ; eb 05
     dec bx                                    ; 4b
     test bx, bx                               ; 85 db
-    jbe short 076feh                          ; 76 17
+    jbe short 07a4bh                          ; 76 17
     mov ax, bx                                ; 89 d8
     or ah, 002h                               ; 80 cc 02
     mov dx, 003b8h                            ; ba b8 03
     out DX, ax                                ; ef
     xor dx, dx                                ; 31 d2
     mov ax, strict word 00001h                ; b8 01 00
-    call 073c6h                               ; e8 ce fc
+    call 07713h                               ; e8 ce fc
     cmp AL, strict byte 086h                  ; 3c 86
-    jne short 076e2h                          ; 75 e6
+    jne short 07a2fh                          ; 75 e6
     mov CL, strict byte 001h                  ; b1 01
     xor bx, bx                                ; 31 db
-    mov dx, 00339h                            ; ba 39 03
+    mov dx, 0037dh                            ; ba 7d 03
     mov ax, si                                ; 89 f0
-    call 0165eh                               ; e8 56 9f
+    call 0165eh                               ; e8 09 9c
     mov AL, strict byte 003h                  ; b0 03
     mov AH, strict byte 000h                  ; b4 00
     int 010h                                  ; cd 10
     cmp byte [bp-012h], 000h                  ; 80 7e ee 00
-    je near 077ffh                            ; 0f 84 e9 00
+    je near 07b4ch                            ; 0f 84 e9 00
     cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
-    jne short 0774ch                          ; 75 30
+    jne short 07a99h                          ; 75 30
     cmp byte [bp-010h], 000h                  ; 80 7e f0 00
-    jne short 0774ch                          ; 75 2a
+    jne short 07a99h                          ; 75 2a
     cmp word [bp-014h], strict byte 00000h    ; 83 7e ec 00
-    jne short 0774ch                          ; 75 24
+    jne short 07a99h                          ; 75 24
     cmp byte [bp-012h], 002h                  ; 80 7e ee 02
-    jne short 07739h                          ; 75 0b
-    push 00a53h                               ; 68 53 0a
+    jne short 07a86h                          ; 75 0b
+    push 00a4bh                               ; 68 4b 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 3c a2
+    call 01972h                               ; e8 ef 9e
     add sp, strict byte 00004h                ; 83 c4 04
     test cl, cl                               ; 84 c9
-    jne short 0774ch                          ; 75 0f
+    jne short 07a99h                          ; 75 0f
     mov dx, strict word 00001h                ; ba 01 00
     mov ax, 000c0h                            ; b8 c0 00
-    call 073c6h                               ; e8 80 fc
+    call 07713h                               ; e8 80 fc
     cmp AL, strict byte 086h                  ; 3c 86
-    jne short 0774ch                          ; 75 02
+    jne short 07a99h                          ; 75 02
     mov CL, strict byte 001h                  ; b1 01
     test cl, cl                               ; 84 c9
-    je near 077ffh                            ; 0f 84 ad 00
+    je near 07b4ch                            ; 0f 84 ad 00
     mov byte [bp-00eh], 000h                  ; c6 46 f2 00
     mov ax, 00100h                            ; b8 00 01
     mov cx, 01000h                            ; b9 00 10
@@ -10922,56 +11211,56 @@ show_logo_:                                  ; 0xf75fa LB 0x224
     db  033h, 0d2h
     ; xor dx, dx                                ; 33 d2
     int 010h                                  ; cd 10
-    push 00a75h                               ; 68 75 0a
+    push 00a6dh                               ; 68 6d 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 f7 a1
+    call 01972h                               ; e8 aa 9e
     add sp, strict byte 00004h                ; 83 c4 04
-    call 074a2h                               ; e8 21 fd
-    push 00ab9h                               ; 68 b9 0a
+    call 077efh                               ; e8 21 fd
+    push 00ab1h                               ; 68 b1 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 e9 a1
+    call 01972h                               ; e8 9c 9e
     add sp, strict byte 00004h                ; 83 c4 04
     mov dx, strict word 00001h                ; ba 01 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 073c6h                               ; e8 31 fc
+    call 07713h                               ; e8 31 fc
     mov bl, al                                ; 88 c3
     test al, al                               ; 84 c0
-    je short 0778ch                           ; 74 f1
+    je short 07ad9h                           ; 74 f1
     cmp AL, strict byte 030h                  ; 3c 30
-    je short 077edh                           ; 74 4e
+    je short 07b3ah                           ; 74 4e
     cmp bl, 002h                              ; 80 fb 02
-    jc short 077c6h                           ; 72 22
+    jc short 07b13h                           ; 72 22
     cmp bl, 009h                              ; 80 fb 09
-    jnbe short 077c6h                         ; 77 1d
+    jnbe short 07b13h                         ; 77 1d
     movzx ax, bl                              ; 0f b6 c3
-    call 075d2h                               ; e8 23 fe
+    call 0791fh                               ; e8 23 fe
     cmp AL, strict byte 0ffh                  ; 3c ff
-    jne short 077b5h                          ; 75 02
-    jmp short 0778ch                          ; eb d7
+    jne short 07b02h                          ; 75 02
+    jmp short 07ad9h                          ; eb d7
     movzx bx, al                              ; 0f b6 d8
-    mov dx, 00338h                            ; ba 38 03
+    mov dx, 0037ch                            ; ba 7c 03
     mov ax, si                                ; 89 f0
-    call 0165eh                               ; e8 9e 9e
+    call 0165eh                               ; e8 51 9b
     mov byte [bp-00eh], 002h                  ; c6 46 f2 02
-    jmp short 077edh                          ; eb 27
+    jmp short 07b3ah                          ; eb 27
     cmp bl, 02eh                              ; 80 fb 2e
-    je short 077dbh                           ; 74 10
+    je short 07b28h                           ; 74 10
     cmp bl, 026h                              ; 80 fb 26
-    je short 077e1h                           ; 74 11
+    je short 07b2eh                           ; 74 11
     cmp bl, 021h                              ; 80 fb 21
-    jne short 077e7h                          ; 75 12
+    jne short 07b34h                          ; 75 12
     mov byte [bp-00eh], 001h                  ; c6 46 f2 01
-    jmp short 077edh                          ; eb 12
+    jmp short 07b3ah                          ; eb 12
     mov byte [bp-00eh], 003h                  ; c6 46 f2 03
-    jmp short 077edh                          ; eb 0c
+    jmp short 07b3ah                          ; eb 0c
     mov byte [bp-00eh], 004h                  ; c6 46 f2 04
-    jmp short 077edh                          ; eb 06
+    jmp short 07b3ah                          ; eb 06
     cmp byte [bp-00eh], 000h                  ; 80 7e f2 00
-    je short 0778ch                           ; 74 9f
+    je short 07ad9h                           ; 74 9f
     movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
-    mov dx, 00339h                            ; ba 39 03
+    mov dx, 0037dh                            ; ba 7d 03
     mov ax, si                                ; 89 f0
-    call 0165eh                               ; e8 65 9e
+    call 0165eh                               ; e8 18 9b
     mov AL, strict byte 003h                  ; b0 03
     mov AH, strict byte 000h                  ; b4 00
     int 010h                                  ; cd 10
@@ -10984,7 +11273,7 @@ show_logo_:                                  ; 0xf75fa LB 0x224
     pushad                                    ; 66 60
     push DS                                   ; 1e
     mov ds, ax                                ; 8e d8
-    call 0edbfh                               ; e8 ae 75
+    call 0edbfh                               ; e8 61 72
     pop DS                                    ; 1f
     popad                                     ; 66 61
     lea sp, [bp-00ah]                         ; 8d 66 f6
@@ -10995,14 +11284,14 @@ show_logo_:                                  ; 0xf75fa LB 0x224
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-delay_boot_:                                 ; 0xf781e LB 0x67
+delay_boot_:                                 ; 0xf7b6b LB 0x67
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
     push dx                                   ; 52
     mov dx, ax                                ; 89 c2
     test ax, ax                               ; 85 c0
-    je short 0787eh                           ; 74 55
+    je short 07bcbh                           ; 74 55
     mov AL, strict byte 034h                  ; b0 34
     out strict byte 043h, AL                  ; e6 43
     mov AL, strict byte 0d3h                  ; b0 d3
@@ -11010,26 +11299,26 @@ delay_boot_:                                 ; 0xf781e LB 0x67
     mov AL, strict byte 048h                  ; b0 48
     out strict byte 040h, AL                  ; e6 40
     push dx                                   ; 52
-    push 00b03h                               ; 68 03 0b
+    push 00afbh                               ; 68 fb 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 34 a1
+    call 01972h                               ; e8 e7 9d
     add sp, strict byte 00006h                ; 83 c4 06
     mov bx, dx                                ; 89 d3
     test bx, bx                               ; 85 db
-    jbe short 0785eh                          ; 76 17
+    jbe short 07babh                          ; 76 17
     push bx                                   ; 53
-    push 00b21h                               ; 68 21 0b
+    push 00b19h                               ; 68 19 0b
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 22 a1
+    call 01972h                               ; e8 d5 9d
     add sp, strict byte 00006h                ; 83 c4 06
     xor dx, dx                                ; 31 d2
     mov ax, strict word 00040h                ; b8 40 00
-    call 073c6h                               ; e8 6b fb
+    call 07713h                               ; e8 6b fb
     dec bx                                    ; 4b
-    jmp short 07843h                          ; eb e5
-    push 00a51h                               ; 68 51 0a
+    jmp short 07b90h                          ; eb e5
+    push 00a49h                               ; 68 49 0a
     push strict byte 00002h                   ; 6a 02
-    call 01972h                               ; e8 0c a1
+    call 01972h                               ; e8 bf 9d
     add sp, strict byte 00004h                ; 83 c4 04
     mov AL, strict byte 034h                  ; b0 34
     out strict byte 043h, AL                  ; e6 43
@@ -11040,7 +11329,7 @@ delay_boot_:                                 ; 0xf781e LB 0x67
     pushad                                    ; 66 60
     push DS                                   ; 1e
     mov ds, ax                                ; 8e d8
-    call 0edbfh                               ; e8 44 75
+    call 0edbfh                               ; e8 f7 71
     pop DS                                    ; 1f
     popad                                     ; 66 61
     lea sp, [bp-004h]                         ; 8d 66 fc
@@ -11048,7 +11337,7 @@ delay_boot_:                                 ; 0xf781e LB 0x67
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-scsi_cmd_data_in_:                           ; 0xf7885 LB 0xc9
+scsi_cmd_data_in_:                           ; 0xf7bd2 LB 0xd5
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -11056,24 +11345,30 @@ scsi_cmd_data_in_:                           ; 0xf7885 LB 0xc9
     sub sp, strict byte 00006h                ; 83 ec 06
     mov si, ax                                ; 89 c6
     mov byte [bp-006h], dl                    ; 88 56 fa
-    mov word [bp-008h], bx                    ; 89 5e f8
-    mov word [bp-00ah], cx                    ; 89 4e f6
+    mov word [bp-00ah], bx                    ; 89 5e f6
+    mov word [bp-008h], cx                    ; 89 4e f8
     mov bx, word [bp+00ah]                    ; 8b 5e 0a
     mov dx, si                                ; 89 f2
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 0789bh                          ; 75 f7
+    jne short 07be8h                          ; 75 f7
+    cmp byte [bp+004h], 010h                  ; 80 7e 04 10
+    jne short 07bfbh                          ; 75 04
+    xor ax, ax                                ; 31 c0
+    jmp short 07bffh                          ; eb 04
+    movzx ax, byte [bp+004h]                  ; 0f b6 46 04
+    mov di, ax                                ; 89 c7
     mov ax, bx                                ; 89 d8
     mov dx, word [bp+00ch]                    ; 8b 56 0c
     mov cx, strict word 0000ch                ; b9 0c 00
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 078ach                               ; e2 fa
-    and ax, 000f0h                            ; 25 f0 00
-    movzx cx, byte [bp+004h]                  ; 0f b6 4e 04
-    or cx, ax                                 ; 09 c1
+    loop 07c09h                               ; e2 fa
+    mov cx, ax                                ; 89 c1
+    and cx, 000f0h                            ; 81 e1 f0 00
+    or cx, di                                 ; 09 f9
     mov al, byte [bp-006h]                    ; 8a 46 fa
     mov dx, si                                ; 89 f2
     out DX, AL                                ; ee
@@ -11088,29 +11383,28 @@ scsi_cmd_data_in_:                           ; 0xf7885 LB 0xc9
     mov cx, strict word 00008h                ; b9 08 00
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 078d2h                               ; e2 fa
+    loop 07c2eh                               ; e2 fa
     mov dx, si                                ; 89 f2
     out DX, AL                                ; ee
     xor cx, cx                                ; 31 c9
     movzx ax, byte [bp+004h]                  ; 0f b6 46 04
     cmp cx, ax                                ; 39 c1
-    jnc short 078f6h                          ; 73 11
-    mov es, [bp-00ah]                         ; 8e 46 f6
-    mov di, word [bp-008h]                    ; 8b 7e f8
+    jnc short 07c4fh                          ; 73 0e
+    les di, [bp-00ah]                         ; c4 7e f6
     add di, cx                                ; 01 cf
     mov al, byte [es:di]                      ; 26 8a 05
     mov dx, si                                ; 89 f2
     out DX, AL                                ; ee
     inc cx                                    ; 41
-    jmp short 078ddh                          ; eb e7
+    jmp short 07c39h                          ; eb ea
     mov dx, si                                ; 89 f2
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 078f6h                          ; 75 f7
+    jne short 07c4fh                          ; 75 f7
     test AL, strict byte 002h                 ; a8 02
-    je short 07911h                           ; 74 0e
+    je short 07c6ah                           ; 74 0e
     lea dx, [si+003h]                         ; 8d 54 03
     xor al, al                                ; 30 c0
     out DX, AL                                ; ee
@@ -11118,12 +11412,12 @@ scsi_cmd_data_in_:                           ; 0xf7885 LB 0xc9
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov di, strict word 00004h                ; bf 04 00
-    jmp short 07943h                          ; eb 32
+    jmp short 07c9ch                          ; eb 32
     lea dx, [si+001h]                         ; 8d 54 01
     cmp word [bp+00ch], strict byte 00000h    ; 83 7e 0c 00
-    jne short 07920h                          ; 75 06
+    jne short 07c79h                          ; 75 06
     cmp bx, 08000h                            ; 81 fb 00 80
-    jbe short 0793ah                          ; 76 1a
+    jbe short 07c93h                          ; 76 1a
     mov cx, 08000h                            ; b9 00 80
     les di, [bp+006h]                         ; c4 7e 06
     rep insb                                  ; f3 6c
@@ -11132,7 +11426,7 @@ scsi_cmd_data_in_:                           ; 0xf7885 LB 0xc9
     mov ax, es                                ; 8c c0
     add ax, 00800h                            ; 05 00 08
     mov word [bp+008h], ax                    ; 89 46 08
-    jmp short 07911h                          ; eb d7
+    jmp short 07c6ah                          ; eb d7
     mov cx, bx                                ; 89 d9
     les di, [bp+006h]                         ; c4 7e 06
     rep insb                                  ; f3 6c
@@ -11143,7 +11437,7 @@ scsi_cmd_data_in_:                           ; 0xf7885 LB 0xc9
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 0000ah                               ; c2 0a 00
-scsi_cmd_data_out_:                          ; 0xf794e LB 0xc9
+scsi_cmd_data_out_:                          ; 0xf7ca7 LB 0xd5
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -11151,24 +11445,30 @@ scsi_cmd_data_out_:                          ; 0xf794e LB 0xc9
     sub sp, strict byte 00006h                ; 83 ec 06
     mov di, ax                                ; 89 c7
     mov byte [bp-006h], dl                    ; 88 56 fa
-    mov word [bp-008h], bx                    ; 89 5e f8
-    mov word [bp-00ah], cx                    ; 89 4e f6
+    mov word [bp-00ah], bx                    ; 89 5e f6
+    mov word [bp-008h], cx                    ; 89 4e f8
     mov bx, word [bp+00ah]                    ; 8b 5e 0a
     mov dx, di                                ; 89 fa
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 07964h                          ; 75 f7
+    jne short 07cbdh                          ; 75 f7
+    cmp byte [bp+004h], 010h                  ; 80 7e 04 10
+    jne short 07cd0h                          ; 75 04
+    xor ax, ax                                ; 31 c0
+    jmp short 07cd4h                          ; eb 04
+    movzx ax, byte [bp+004h]                  ; 0f b6 46 04
+    mov si, ax                                ; 89 c6
     mov ax, bx                                ; 89 d8
     mov dx, word [bp+00ch]                    ; 8b 56 0c
     mov cx, strict word 0000ch                ; b9 0c 00
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 07975h                               ; e2 fa
-    and ax, 000f0h                            ; 25 f0 00
-    movzx cx, byte [bp+004h]                  ; 0f b6 4e 04
-    or cx, ax                                 ; 09 c1
+    loop 07cdeh                               ; e2 fa
+    mov cx, ax                                ; 89 c1
+    and cx, 000f0h                            ; 81 e1 f0 00
+    or cx, si                                 ; 09 f1
     mov al, byte [bp-006h]                    ; 8a 46 fa
     mov dx, di                                ; 89 fa
     out DX, AL                                ; ee
@@ -11183,26 +11483,25 @@ scsi_cmd_data_out_:                          ; 0xf794e LB 0xc9
     mov cx, strict word 00008h                ; b9 08 00
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 0799bh                               ; e2 fa
+    loop 07d03h                               ; e2 fa
     mov dx, di                                ; 89 fa
     out DX, AL                                ; ee
     xor cx, cx                                ; 31 c9
     movzx ax, byte [bp+004h]                  ; 0f b6 46 04
     cmp cx, ax                                ; 39 c1
-    jnc short 079bfh                          ; 73 11
-    mov es, [bp-00ah]                         ; 8e 46 f6
-    mov si, word [bp-008h]                    ; 8b 76 f8
+    jnc short 07d24h                          ; 73 0e
+    les si, [bp-00ah]                         ; c4 76 f6
     add si, cx                                ; 01 ce
     mov al, byte [es:si]                      ; 26 8a 04
     mov dx, di                                ; 89 fa
     out DX, AL                                ; ee
     inc cx                                    ; 41
-    jmp short 079a6h                          ; eb e7
+    jmp short 07d0eh                          ; eb ea
     lea dx, [di+001h]                         ; 8d 55 01
     cmp word [bp+00ch], strict byte 00000h    ; 83 7e 0c 00
-    jne short 079ceh                          ; 75 06
+    jne short 07d33h                          ; 75 06
     cmp bx, 08000h                            ; 81 fb 00 80
-    jbe short 079e9h                          ; 76 1b
+    jbe short 07d4eh                          ; 76 1b
     mov cx, 08000h                            ; b9 00 80
     les si, [bp+006h]                         ; c4 76 06
     db  0f3h, 026h, 06eh
@@ -11212,7 +11511,7 @@ scsi_cmd_data_out_:                          ; 0xf794e LB 0xc9
     mov ax, es                                ; 8c c0
     add ax, 00800h                            ; 05 00 08
     mov word [bp+008h], ax                    ; 89 46 08
-    jmp short 079bfh                          ; eb d6
+    jmp short 07d24h                          ; eb d6
     mov cx, bx                                ; 89 d9
     les si, [bp+006h]                         ; c4 76 06
     db  0f3h, 026h, 06eh
@@ -11222,9 +11521,9 @@ scsi_cmd_data_out_:                          ; 0xf794e LB 0xc9
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 079f1h                          ; 75 f7
+    jne short 07d56h                          ; 75 f7
     test AL, strict byte 002h                 ; a8 02
-    je short 07a0ch                           ; 74 0e
+    je short 07d71h                           ; 74 0e
     lea dx, [di+003h]                         ; 8d 55 03
     xor al, al                                ; 30 c0
     out DX, AL                                ; ee
@@ -11232,150 +11531,176 @@ scsi_cmd_data_out_:                          ; 0xf794e LB 0xc9
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov ax, strict word 00004h                ; b8 04 00
-    jmp short 07a0eh                          ; eb 02
+    jmp short 07d73h                          ; eb 02
     xor ax, ax                                ; 31 c0
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 0000ah                               ; c2 0a 00
- at scsi_read_sectors:                          ; 0xf7a17 LB 0xb9
+ at scsi_read_sectors:                          ; 0xf7d7c LB 0xdb
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, strict byte 0000eh                ; 83 ec 0e
+    sub sp, strict byte 00016h                ; 83 ec 16
     mov si, word [bp+004h]                    ; 8b 76 04
     mov es, [bp+006h]                         ; 8e 46 06
-    mov bl, byte [es:si+008h]                 ; 26 8a 5c 08
-    sub bl, 008h                              ; 80 eb 08
-    cmp bl, 004h                              ; 80 fb 04
-    jbe short 07a43h                          ; 76 12
-    movzx ax, bl                              ; 0f b6 c3
+    mov al, byte [es:si+00ch]                 ; 26 8a 44 0c
+    sub AL, strict byte 008h                  ; 2c 08
+    mov byte [bp-006h], al                    ; 88 46 fa
+    cmp AL, strict byte 004h                  ; 3c 04
+    jbe short 07daah                          ; 76 13
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
     push ax                                   ; 50
-    push 00b26h                               ; 68 26 0b
-    push 00b38h                               ; 68 38 0b
+    push 00b1eh                               ; 68 1e 0b
+    push 00b30h                               ; 68 30 0b
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 32 9f
+    call 01972h                               ; e8 cb 9b
     add sp, strict byte 00008h                ; 83 c4 08
     mov es, [bp+006h]                         ; 8e 46 06
-    mov di, word [es:si+00ah]                 ; 26 8b 7c 0a
-    mov word [bp-012h], strict word 00028h    ; c7 46 ee 28 00
-    mov ax, word [es:si]                      ; 26 8b 04
-    mov dx, word [es:si+002h]                 ; 26 8b 54 02
+    mov di, word [es:si+00eh]                 ; 26 8b 7c 0e
+    mov word [bp-01ah], 00088h                ; c7 46 e6 88 00
+    mov ax, word [es:si+006h]                 ; 26 8b 44 06
+    mov bx, word [es:si+004h]                 ; 26 8b 5c 04
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
     xchg ah, al                               ; 86 c4
+    xchg bh, bl                               ; 86 df
+    xchg ch, cl                               ; 86 cd
     xchg dh, dl                               ; 86 d6
     xchg dx, ax                               ; 92
-    mov word [bp-010h], ax                    ; 89 46 f0
-    mov word [bp-00eh], dx                    ; 89 56 f2
+    xchg bx, cx                               ; 87 cb
+    mov word [bp-012h], ax                    ; 89 46 ee
+    mov word [bp-014h], bx                    ; 89 5e ec
+    mov word [bp-016h], cx                    ; 89 4e ea
+    mov word [bp-018h], dx                    ; 89 56 e8
     mov byte [bp-00ch], 000h                  ; c6 46 f4 00
     mov ax, di                                ; 89 f8
+    xor dx, dx                                ; 31 d2
     xchg ah, al                               ; 86 c4
-    mov word [bp-00bh], ax                    ; 89 46 f5
-    mov byte [bp-009h], 000h                  ; c6 46 f7 00
-    xor bh, bh                                ; 30 ff
-    sal bx, 002h                              ; c1 e3 02
-    add bx, si                                ; 01 f3
-    mov ax, word [es:bx+001d8h]               ; 26 8b 87 d8 01
-    mov dl, byte [es:bx+001dah]               ; 26 8a 97 da 01
-    mov word [bp-008h], di                    ; 89 7e f8
-    mov word [bp-006h], strict word 00000h    ; c7 46 fa 00 00
+    xchg dh, dl                               ; 86 d6
+    xchg dx, ax                               ; 92
+    mov word [bp-010h], ax                    ; 89 46 f0
+    mov word [bp-00eh], dx                    ; 89 56 f2
+    mov byte [bp-00bh], 000h                  ; c6 46 f5 00
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    sal ax, 002h                              ; c1 e0 02
+    mov bx, si                                ; 89 f3
+    add bx, ax                                ; 01 c3
+    mov ax, word [es:bx+0021ch]               ; 26 8b 87 1c 02
+    mov dl, byte [es:bx+0021eh]               ; 26 8a 97 1e 02
+    mov word [bp-00ah], di                    ; 89 7e f6
+    mov word [bp-008h], strict word 00000h    ; c7 46 f8 00 00
     mov cx, strict word 00009h                ; b9 09 00
-    sal word [bp-008h], 1                     ; d1 66 f8
-    rcl word [bp-006h], 1                     ; d1 56 fa
-    loop 07a8ch                               ; e2 f8
-    push dword [bp-008h]                      ; 66 ff 76 f8
-    db  066h, 026h, 0ffh, 074h, 004h
-    ; push dword [es:si+004h]                   ; 66 26 ff 74 04
-    push strict byte 0000ah                   ; 6a 0a
+    sal word [bp-00ah], 1                     ; d1 66 f6
+    rcl word [bp-008h], 1                     ; d1 56 f8
+    loop 07e13h                               ; e2 f8
+    push dword [bp-00ah]                      ; 66 ff 76 f6
+    db  066h, 026h, 0ffh, 074h, 008h
+    ; push dword [es:si+008h]                   ; 66 26 ff 74 08
+    push strict byte 00010h                   ; 6a 10
     xor dh, dh                                ; 30 f6
     mov cx, ss                                ; 8c d1
-    lea bx, [bp-012h]                         ; 8d 5e ee
-    call 07885h                               ; e8 dc fd
+    lea bx, [bp-01ah]                         ; 8d 5e e6
+    call 07bd2h                               ; e8 a2 fd
     mov ah, al                                ; 88 c4
     test al, al                               ; 84 c0
-    jne short 07ac4h                          ; 75 15
+    jne short 07e4bh                          ; 75 15
     mov es, [bp+006h]                         ; 8e 46 06
-    mov word [es:si+014h], di                 ; 26 89 7c 14
+    mov word [es:si+018h], di                 ; 26 89 7c 18
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    mov word [es:si+01ah], dx                 ; 26 89 54 1a
     mov dx, word [bp-008h]                    ; 8b 56 f8
-    mov word [es:si+016h], dx                 ; 26 89 54 16
-    mov dx, word [bp-006h]                    ; 8b 56 fa
-    mov word [es:si+018h], dx                 ; 26 89 54 18
+    mov word [es:si+01ch], dx                 ; 26 89 54 1c
     movzx ax, ah                              ; 0f b6 c4
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00004h                               ; c2 04 00
- at scsi_write_sectors:                         ; 0xf7ad0 LB 0xb9
+ at scsi_write_sectors:                         ; 0xf7e57 LB 0xdb
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, strict byte 0000eh                ; 83 ec 0e
+    sub sp, strict byte 00016h                ; 83 ec 16
     mov si, word [bp+004h]                    ; 8b 76 04
     mov es, [bp+006h]                         ; 8e 46 06
-    mov bl, byte [es:si+008h]                 ; 26 8a 5c 08
-    sub bl, 008h                              ; 80 eb 08
-    cmp bl, 004h                              ; 80 fb 04
-    jbe short 07afch                          ; 76 12
-    movzx ax, bl                              ; 0f b6 c3
+    mov al, byte [es:si+00ch]                 ; 26 8a 44 0c
+    sub AL, strict byte 008h                  ; 2c 08
+    mov byte [bp-006h], al                    ; 88 46 fa
+    cmp AL, strict byte 004h                  ; 3c 04
+    jbe short 07e85h                          ; 76 13
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
     push ax                                   ; 50
-    push 00b57h                               ; 68 57 0b
-    push 00b38h                               ; 68 38 0b
+    push 00b4fh                               ; 68 4f 0b
+    push 00b30h                               ; 68 30 0b
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 79 9e
+    call 01972h                               ; e8 f0 9a
     add sp, strict byte 00008h                ; 83 c4 08
     mov es, [bp+006h]                         ; 8e 46 06
-    mov di, word [es:si+00ah]                 ; 26 8b 7c 0a
-    mov word [bp-012h], strict word 0002ah    ; c7 46 ee 2a 00
-    mov ax, word [es:si]                      ; 26 8b 04
-    mov dx, word [es:si+002h]                 ; 26 8b 54 02
+    mov di, word [es:si+00eh]                 ; 26 8b 7c 0e
+    mov word [bp-01ah], 0008ah                ; c7 46 e6 8a 00
+    mov ax, word [es:si+006h]                 ; 26 8b 44 06
+    mov bx, word [es:si+004h]                 ; 26 8b 5c 04
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
     xchg ah, al                               ; 86 c4
+    xchg bh, bl                               ; 86 df
+    xchg ch, cl                               ; 86 cd
     xchg dh, dl                               ; 86 d6
     xchg dx, ax                               ; 92
-    mov word [bp-010h], ax                    ; 89 46 f0
-    mov word [bp-00eh], dx                    ; 89 56 f2
+    xchg bx, cx                               ; 87 cb
+    mov word [bp-012h], ax                    ; 89 46 ee
+    mov word [bp-014h], bx                    ; 89 5e ec
+    mov word [bp-016h], cx                    ; 89 4e ea
+    mov word [bp-018h], dx                    ; 89 56 e8
     mov byte [bp-00ch], 000h                  ; c6 46 f4 00
     mov ax, di                                ; 89 f8
+    xor dx, dx                                ; 31 d2
     xchg ah, al                               ; 86 c4
-    mov word [bp-00bh], ax                    ; 89 46 f5
-    mov byte [bp-009h], 000h                  ; c6 46 f7 00
-    xor bh, bh                                ; 30 ff
-    sal bx, 002h                              ; c1 e3 02
-    add bx, si                                ; 01 f3
-    mov ax, word [es:bx+001d8h]               ; 26 8b 87 d8 01
-    mov dl, byte [es:bx+001dah]               ; 26 8a 97 da 01
-    mov word [bp-008h], di                    ; 89 7e f8
-    mov word [bp-006h], strict word 00000h    ; c7 46 fa 00 00
+    xchg dh, dl                               ; 86 d6
+    xchg dx, ax                               ; 92
+    mov word [bp-010h], ax                    ; 89 46 f0
+    mov word [bp-00eh], dx                    ; 89 56 f2
+    mov byte [bp-00bh], 000h                  ; c6 46 f5 00
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    sal ax, 002h                              ; c1 e0 02
+    mov bx, si                                ; 89 f3
+    add bx, ax                                ; 01 c3
+    mov ax, word [es:bx+0021ch]               ; 26 8b 87 1c 02
+    mov dl, byte [es:bx+0021eh]               ; 26 8a 97 1e 02
+    mov word [bp-00ah], di                    ; 89 7e f6
+    mov word [bp-008h], strict word 00000h    ; c7 46 f8 00 00
     mov cx, strict word 00009h                ; b9 09 00
-    sal word [bp-008h], 1                     ; d1 66 f8
-    rcl word [bp-006h], 1                     ; d1 56 fa
-    loop 07b45h                               ; e2 f8
-    push dword [bp-008h]                      ; 66 ff 76 f8
-    db  066h, 026h, 0ffh, 074h, 004h
-    ; push dword [es:si+004h]                   ; 66 26 ff 74 04
-    push strict byte 0000ah                   ; 6a 0a
+    sal word [bp-00ah], 1                     ; d1 66 f6
+    rcl word [bp-008h], 1                     ; d1 56 f8
+    loop 07eeeh                               ; e2 f8
+    push dword [bp-00ah]                      ; 66 ff 76 f6
+    db  066h, 026h, 0ffh, 074h, 008h
+    ; push dword [es:si+008h]                   ; 66 26 ff 74 08
+    push strict byte 00010h                   ; 6a 10
     xor dh, dh                                ; 30 f6
     mov cx, ss                                ; 8c d1
-    lea bx, [bp-012h]                         ; 8d 5e ee
-    call 0794eh                               ; e8 ec fd
+    lea bx, [bp-01ah]                         ; 8d 5e e6
+    call 07ca7h                               ; e8 9c fd
     mov ah, al                                ; 88 c4
     test al, al                               ; 84 c0
-    jne short 07b7dh                          ; 75 15
+    jne short 07f26h                          ; 75 15
     mov es, [bp+006h]                         ; 8e 46 06
-    mov word [es:si+014h], di                 ; 26 89 7c 14
+    mov word [es:si+018h], di                 ; 26 89 7c 18
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    mov word [es:si+01ah], dx                 ; 26 89 54 1a
     mov dx, word [bp-008h]                    ; 8b 56 f8
-    mov word [es:si+016h], dx                 ; 26 89 54 16
-    mov dx, word [bp-006h]                    ; 8b 56 fa
-    mov word [es:si+018h], dx                 ; 26 89 54 18
+    mov word [es:si+01ch], dx                 ; 26 89 54 1c
     movzx ax, ah                              ; 0f b6 c4
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00004h                               ; c2 04 00
-scsi_cmd_packet_:                            ; 0xf7b89 LB 0x166
+scsi_cmd_packet_:                            ; 0xf7f32 LB 0x166
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -11387,42 +11712,42 @@ scsi_cmd_packet_:                            ; 0xf7b89 LB 0x166
     mov word [bp-00ah], cx                    ; 89 4e f6
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 c7 9a
+    call 0166ch                               ; e8 1e 97
     mov si, 00122h                            ; be 22 01
     mov word [bp-00eh], ax                    ; 89 46 f2
     cmp byte [bp+00ah], 002h                  ; 80 7e 0a 02
-    jne short 07bd0h                          ; 75 1f
-    mov bx, 00da2h                            ; bb a2 0d
+    jne short 07f79h                          ; 75 1f
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 75 9d
-    push 00b6ah                               ; 68 6a 0b
-    push 00b7ah                               ; 68 7a 0b
+    call 01931h                               ; e8 cc 99
+    push 00b62h                               ; 68 62 0b
+    push 00b72h                               ; 68 72 0b
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 ab 9d
+    call 01972h                               ; e8 02 9a
     add sp, strict byte 00006h                ; 83 c4 06
     mov dx, strict word 00001h                ; ba 01 00
-    jmp near 07ce4h                           ; e9 14 01
+    jmp near 0808dh                           ; e9 14 01
     sub di, strict byte 00008h                ; 83 ef 08
     sal di, 002h                              ; c1 e7 02
     sub byte [bp-006h], 002h                  ; 80 6e fa 02
     mov es, [bp-00eh]                         ; 8e 46 f2
     add di, si                                ; 01 f7
-    mov bx, word [es:di+001d8h]               ; 26 8b 9d d8 01
-    mov al, byte [es:di+001dah]               ; 26 8a 85 da 01
+    mov bx, word [es:di+0021ch]               ; 26 8b 9d 1c 02
+    mov al, byte [es:di+0021eh]               ; 26 8a 85 1e 02
     mov byte [bp-008h], al                    ; 88 46 f8
     mov dx, bx                                ; 89 da
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 07bech                          ; 75 f7
+    jne short 07f95h                          ; 75 f7
     xor ax, ax                                ; 31 c0
     mov dx, word [bp+006h]                    ; 8b 56 06
     add dx, word [bp+004h]                    ; 03 56 04
     adc ax, word [bp+008h]                    ; 13 46 08
     mov es, [bp-00eh]                         ; 8e 46 f2
-    mov cx, word [es:si+01ch]                 ; 26 8b 4c 1c
+    mov cx, word [es:si+020h]                 ; 26 8b 4c 20
     xor di, di                                ; 31 ff
     add cx, dx                                ; 01 d1
     mov word [bp-010h], cx                    ; 89 4e f0
@@ -11432,7 +11757,7 @@ scsi_cmd_packet_:                            ; 0xf7b89 LB 0x166
     mov cx, strict word 0000ch                ; b9 0c 00
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 07c17h                               ; e2 fa
+    loop 07fc0h                               ; e2 fa
     and ax, 000f0h                            ; 25 f0 00
     movzx cx, byte [bp-006h]                  ; 0f b6 4e fa
     or cx, ax                                 ; 09 c1
@@ -11450,28 +11775,28 @@ scsi_cmd_packet_:                            ; 0xf7b89 LB 0x166
     mov cx, strict word 00008h                ; b9 08 00
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 07c3eh                               ; e2 fa
+    loop 07fe7h                               ; e2 fa
     mov dx, bx                                ; 89 da
     out DX, AL                                ; ee
     xor cx, cx                                ; 31 c9
     movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
     cmp cx, ax                                ; 39 c1
-    jnc short 07c5fh                          ; 73 0e
+    jnc short 08008h                          ; 73 0e
     les di, [bp-00ch]                         ; c4 7e f4
     add di, cx                                ; 01 cf
     mov al, byte [es:di]                      ; 26 8a 05
     mov dx, bx                                ; 89 da
     out DX, AL                                ; ee
     inc cx                                    ; 41
-    jmp short 07c49h                          ; eb ea
+    jmp short 07ff2h                          ; eb ea
     mov dx, bx                                ; 89 da
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     test AL, strict byte 001h                 ; a8 01
-    jne short 07c5fh                          ; 75 f7
+    jne short 08008h                          ; 75 f7
     test AL, strict byte 002h                 ; a8 02
-    je short 07c7ah                           ; 74 0e
+    je short 08023h                           ; 74 0e
     lea dx, [bx+003h]                         ; 8d 57 03
     xor al, al                                ; 30 c0
     out DX, AL                                ; ee
@@ -11479,24 +11804,24 @@ scsi_cmd_packet_:                            ; 0xf7b89 LB 0x166
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov dx, strict word 00003h                ; ba 03 00
-    jmp short 07ce4h                          ; eb 6a
+    jmp short 0808dh                          ; eb 6a
     mov ax, word [bp+004h]                    ; 8b 46 04
     test ax, ax                               ; 85 c0
-    je short 07c89h                           ; 74 08
+    je short 08032h                           ; 74 08
     lea dx, [bx+001h]                         ; 8d 57 01
     mov cx, ax                                ; 89 c1
     in AL, DX                                 ; ec
-    loop 07c86h                               ; e2 fd
+    loop 0802fh                               ; e2 fd
     mov ax, word [bp+006h]                    ; 8b 46 06
     mov es, [bp-00eh]                         ; 8e 46 f2
-    mov word [es:si+016h], ax                 ; 26 89 44 16
+    mov word [es:si+01ah], ax                 ; 26 89 44 1a
     mov ax, word [bp+008h]                    ; 8b 46 08
-    mov word [es:si+018h], ax                 ; 26 89 44 18
+    mov word [es:si+01ch], ax                 ; 26 89 44 1c
     lea ax, [bx+001h]                         ; 8d 47 01
     cmp word [bp+008h], strict byte 00000h    ; 83 7e 08 00
-    jne short 07caah                          ; 75 07
+    jne short 08053h                          ; 75 07
     cmp word [bp+006h], 08000h                ; 81 7e 06 00 80
-    jbe short 07cc7h                          ; 76 1d
+    jbe short 08070h                          ; 76 1d
     mov dx, ax                                ; 89 c2
     mov cx, 08000h                            ; b9 00 80
     les di, [bp+00ch]                         ; c4 7e 0c
@@ -11506,17 +11831,17 @@ scsi_cmd_packet_:                            ; 0xf7b89 LB 0x166
     mov ax, es                                ; 8c c0
     add ax, 00800h                            ; 05 00 08
     mov word [bp+00eh], ax                    ; 89 46 0e
-    jmp short 07c9ah                          ; eb d3
+    jmp short 08043h                          ; eb d3
     mov dx, ax                                ; 89 c2
     mov cx, word [bp+006h]                    ; 8b 4e 06
     les di, [bp+00ch]                         ; c4 7e 0c
     rep insb                                  ; f3 6c
     mov es, [bp-00eh]                         ; 8e 46 f2
-    cmp word [es:si+01ch], strict byte 00000h ; 26 83 7c 1c 00
-    je short 07ce2h                           ; 74 07
-    mov cx, word [es:si+01ch]                 ; 26 8b 4c 1c
+    cmp word [es:si+020h], strict byte 00000h ; 26 83 7c 20 00
+    je short 0808bh                           ; 74 07
+    mov cx, word [es:si+020h]                 ; 26 8b 4c 20
     in AL, DX                                 ; ec
-    loop 07cdfh                               ; e2 fd
+    loop 08088h                               ; e2 fd
     xor dx, dx                                ; 31 d2
     mov ax, dx                                ; 89 d0
     lea sp, [bp-004h]                         ; 8d 66 fc
@@ -11524,7 +11849,7 @@ scsi_cmd_packet_:                            ; 0xf7b89 LB 0x166
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 0000ch                               ; c2 0c 00
-scsi_enumerate_attached_devices_:            ; 0xf7cef LB 0x3e4
+scsi_enumerate_attached_devices_:            ; 0xf8098 LB 0x482
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -11532,340 +11857,397 @@ scsi_enumerate_attached_devices_:            ; 0xf7cef LB 0x3e4
     push dx                                   ; 52
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, 0021eh                            ; 81 ec 1e 02
+    sub sp, 0023ch                            ; 81 ec 3c 02
     push ax                                   ; 50
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 67 99
-    mov si, 00122h                            ; be 22 01
-    mov word [bp-018h], ax                    ; 89 46 e8
-    mov word [bp-00eh], strict word 00000h    ; c7 46 f2 00 00
-    jmp near 08055h                           ; e9 42 03
+    call 0166ch                               ; e8 be 95
+    mov di, 00122h                            ; bf 22 01
+    mov word [bp-02eh], ax                    ; 89 46 d2
+    mov word [bp-01eh], strict word 00000h    ; c7 46 e2 00 00
+    jmp near 0849ch                           ; e9 e0 03
     cmp AL, strict byte 004h                  ; 3c 04
-    jnc near 080c9h                           ; 0f 83 b0 03
-    mov cx, strict word 0000ah                ; b9 0a 00
+    jnc near 08510h                           ; 0f 83 4e 04
+    mov cx, strict word 00010h                ; b9 10 00
     xor bx, bx                                ; 31 db
     mov dx, ss                                ; 8c d2
-    lea ax, [bp-028h]                         ; 8d 46 d8
-    call 097aah                               ; e8 84 1a
-    mov byte [bp-028h], 025h                  ; c6 46 d8 25
-    push dword 000000008h                     ; 66 6a 08
-    lea dx, [bp-00228h]                       ; 8d 96 d8 fd
+    lea ax, [bp-046h]                         ; 8d 46 ba
+    call 09d5ah                               ; e8 8b 1c
+    mov byte [bp-046h], 09eh                  ; c6 46 ba 9e
+    mov byte [bp-045h], 010h                  ; c6 46 bb 10
+    mov byte [bp-039h], 020h                  ; c6 46 c7 20
+    push dword 000000020h                     ; 66 6a 20
+    lea dx, [bp-00246h]                       ; 8d 96 ba fd
     push SS                                   ; 16
     push dx                                   ; 52
-    push strict byte 0000ah                   ; 6a 0a
-    movzx dx, byte [bp-00eh]                  ; 0f b6 56 f2
+    push strict byte 00010h                   ; 6a 10
+    movzx dx, byte [bp-01eh]                  ; 0f b6 56 e2
     mov cx, ss                                ; 8c d1
-    lea bx, [bp-028h]                         ; 8d 5e d8
-    mov ax, word [bp-0022ah]                  ; 8b 86 d6 fd
-    call 07885h                               ; e8 40 fb
+    lea bx, [bp-046h]                         ; 8d 5e ba
+    mov ax, word [bp-00248h]                  ; 8b 86 b8 fd
+    call 07bd2h                               ; e8 dc fa
     test al, al                               ; 84 c0
-    je short 07d57h                           ; 74 0e
-    push 00b9ah                               ; 68 9a 0b
-    push 00bd3h                               ; 68 d3 0b
+    je short 08108h                           ; 74 0e
+    push 00b92h                               ; 68 92 0b
+    push 00bcbh                               ; 68 cb 0b
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 1e 9c
+    call 01972h                               ; e8 6d 98
     add sp, strict byte 00006h                ; 83 c4 06
-    movzx ax, byte [bp-00227h]                ; 0f b6 86 d9 fd
-    movzx di, byte [bp-00228h]                ; 0f b6 be d8 fd
-    sal di, 008h                              ; c1 e7 08
+    mov ax, word [bp-00240h]                  ; 8b 86 c0 fd
+    mov bx, word [bp-00242h]                  ; 8b 9e be fd
+    mov cx, word [bp-00244h]                  ; 8b 8e bc fd
+    mov dx, word [bp-00246h]                  ; 8b 96 ba fd
+    xchg ah, al                               ; 86 c4
+    xchg bh, bl                               ; 86 df
+    xchg ch, cl                               ; 86 cd
+    xchg dh, dl                               ; 86 d6
+    xchg dx, ax                               ; 92
+    xchg bx, cx                               ; 87 cb
+    add dx, strict byte 00001h                ; 83 c2 01
+    mov word [bp-016h], dx                    ; 89 56 ea
+    adc cx, strict byte 00000h                ; 83 d1 00
+    mov word [bp-012h], cx                    ; 89 4e ee
+    adc bx, strict byte 00000h                ; 83 d3 00
+    mov word [bp-030h], bx                    ; 89 5e d0
+    adc ax, strict word 00000h                ; 15 00 00
+    mov word [bp-010h], ax                    ; 89 46 f0
+    movzx ax, byte [bp-0023eh]                ; 0f b6 86 c2 fd
+    sal ax, 008h                              ; c1 e0 08
+    movzx si, byte [bp-0023dh]                ; 0f b6 b6 c3 fd
     xor bx, bx                                ; 31 db
-    or di, ax                                 ; 09 c7
-    movzx ax, byte [bp-00226h]                ; 0f b6 86 da fd
+    or si, ax                                 ; 09 c6
+    movzx ax, byte [bp-0023ch]                ; 0f b6 86 c4 fd
     xor dx, dx                                ; 31 d2
     mov cx, strict word 00008h                ; b9 08 00
     sal ax, 1                                 ; d1 e0
     rcl dx, 1                                 ; d1 d2
-    loop 07d72h                               ; e2 fa
+    loop 08156h                               ; e2 fa
     or bx, ax                                 ; 09 c3
-    or di, dx                                 ; 09 d7
-    movzx ax, byte [bp-00225h]                ; 0f b6 86 db fd
+    or dx, si                                 ; 09 f2
+    movzx ax, byte [bp-0023bh]                ; 0f b6 86 c5 fd
     or bx, ax                                 ; 09 c3
-    mov word [bp-014h], bx                    ; 89 5e ec
-    add word [bp-014h], strict byte 00001h    ; 83 46 ec 01
-    adc di, strict byte 00000h                ; 83 d7 00
-    movzx ax, byte [bp-00224h]                ; 0f b6 86 dc fd
-    sal ax, 008h                              ; c1 e0 08
-    movzx dx, byte [bp-00223h]                ; 0f b6 96 dd fd
-    xor bx, bx                                ; 31 db
-    or ax, dx                                 ; 09 d0
-    mov word [bp-012h], ax                    ; 89 46 ee
-    movzx ax, byte [bp-00222h]                ; 0f b6 86 de fd
-    xor dx, dx                                ; 31 d2
-    mov cx, strict word 00008h                ; b9 08 00
-    sal ax, 1                                 ; d1 e0
-    rcl dx, 1                                 ; d1 d2
-    loop 07dabh                               ; e2 fa
-    or ax, bx                                 ; 09 d8
-    or dx, word [bp-012h]                     ; 0b 56 ee
-    movzx bx, byte [bp-00221h]                ; 0f b6 9e df fd
-    or ax, bx                                 ; 09 d8
-    mov word [bp-010h], ax                    ; 89 46 f0
+    mov word [bp-024h], bx                    ; 89 5e dc
     test dx, dx                               ; 85 d2
-    jne short 07dc9h                          ; 75 05
-    cmp ax, 00200h                            ; 3d 00 02
-    je short 07de9h                           ; 74 20
-    mov bx, 00da2h                            ; bb a2 0d
+    jne short 08174h                          ; 75 06
+    cmp bx, 00200h                            ; 81 fb 00 02
+    je short 08194h                           ; 74 20
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 5d 9b
+    call 01931h                               ; e8 b2 97
     push dx                                   ; 52
-    push word [bp-010h]                       ; ff 76 f0
-    push word [bp-00eh]                       ; ff 76 f2
-    push 00bf2h                               ; 68 f2 0b
+    push word [bp-024h]                       ; ff 76 dc
+    push word [bp-01eh]                       ; ff 76 e2
+    push 00beah                               ; 68 ea 0b
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 8f 9b
+    call 01972h                               ; e8 e4 97
     add sp, strict byte 0000ah                ; 83 c4 0a
-    jmp near 0804ch                           ; e9 63 02
+    jmp near 08493h                           ; e9 ff 02
     mov al, byte [bp-00ch]                    ; 8a 46 f4
     cmp AL, strict byte 001h                  ; 3c 01
-    jc short 07dfch                           ; 72 0c
-    jbe short 07e04h                          ; 76 12
+    jc short 081a7h                           ; 72 0c
+    jbe short 081afh                          ; 76 12
     cmp AL, strict byte 003h                  ; 3c 03
-    je short 07e0ch                           ; 74 16
+    je short 081b7h                           ; 74 16
     cmp AL, strict byte 002h                  ; 3c 02
-    je short 07e08h                           ; 74 0e
-    jmp short 07e5bh                          ; eb 5f
+    je short 081b3h                           ; 74 0e
+    jmp short 08200h                          ; eb 59
     test al, al                               ; 84 c0
-    jne short 07e5bh                          ; 75 5b
+    jne short 08200h                          ; 75 55
     mov BL, strict byte 090h                  ; b3 90
-    jmp short 07e0eh                          ; eb 0a
+    jmp short 081b9h                          ; eb 0a
     mov BL, strict byte 098h                  ; b3 98
-    jmp short 07e0eh                          ; eb 06
+    jmp short 081b9h                          ; eb 06
     mov BL, strict byte 0a0h                  ; b3 a0
-    jmp short 07e0eh                          ; eb 02
+    jmp short 081b9h                          ; eb 02
     mov BL, strict byte 0a8h                  ; b3 a8
     mov al, bl                                ; 88 d8
     add AL, strict byte 007h                  ; 04 07
     movzx cx, al                              ; 0f b6 c8
     mov ax, cx                                ; 89 c8
-    call 016ach                               ; e8 92 98
+    call 016ach                               ; e8 e7 94
     test al, al                               ; 84 c0
-    je short 07e5bh                           ; 74 3d
+    je short 08200h                           ; 74 37
     mov al, bl                                ; 88 d8
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     xor ah, ah                                ; 30 e4
-    call 016ach                               ; e8 85 98
-    xor ah, ah                                ; 30 e4
-    sal ax, 008h                              ; c1 e0 08
-    mov word [bp-012h], ax                    ; 89 46 ee
+    call 016ach                               ; e8 da 94
+    movzx dx, al                              ; 0f b6 d0
+    sal dx, 008h                              ; c1 e2 08
     movzx ax, bl                              ; 0f b6 c3
-    call 016ach                               ; e8 77 98
+    call 016ach                               ; e8 ce 94
     xor ah, ah                                ; 30 e4
-    add ax, word [bp-012h]                    ; 03 46 ee
+    add ax, dx                                ; 01 d0
     cwd                                       ; 99
-    mov word [bp-01eh], ax                    ; 89 46 e2
-    mov word [bp-016h], dx                    ; 89 56 ea
+    mov si, ax                                ; 89 c6
     mov al, bl                                ; 88 d8
     add AL, strict byte 002h                  ; 04 02
     xor ah, ah                                ; 30 e4
-    call 016ach                               ; e8 62 98
+    call 016ach                               ; e8 be 94
     xor ah, ah                                ; 30 e4
-    mov word [bp-01ch], ax                    ; 89 46 e4
+    mov word [bp-034h], ax                    ; 89 46 cc
     mov ax, cx                                ; 89 c8
-    call 016ach                               ; e8 58 98
+    call 016ach                               ; e8 b4 94
     xor ah, ah                                ; 30 e4
-    mov word [bp-01ah], ax                    ; 89 46 e6
-    jmp short 07e9ch                          ; eb 41
-    cmp di, strict byte 00040h                ; 83 ff 40
-    jnbe short 07e62h                         ; 77 02
-    jne short 07e6ch                          ; 75 0a
-    mov dword [bp-01ch], strict dword 0003f00ffh ; 66 c7 46 e4 ff 00 3f 00
-    jmp short 07e85h                          ; eb 19
-    cmp di, strict byte 00020h                ; 83 ff 20
-    jnbe short 07e73h                         ; 77 02
-    jne short 07e7dh                          ; 75 0a
-    mov dword [bp-01ch], strict dword 000200080h ; 66 c7 46 e4 80 00 20 00
-    jmp short 07e85h                          ; eb 08
-    mov dword [bp-01ch], strict dword 000200040h ; 66 c7 46 e4 40 00 20 00
+    mov word [bp-032h], ax                    ; 89 46 ce
+    jmp near 082e9h                           ; e9 e9 00
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov bx, word [bp-030h]                    ; 8b 5e d0
+    mov cx, word [bp-012h]                    ; 8b 4e ee
+    mov dx, word [bp-016h]                    ; 8b 56 ea
+    mov si, strict word 0000ch                ; be 0c 00
+    call 09d4ah                               ; e8 38 1b
+    mov word [bp-018h], ax                    ; 89 46 e8
+    mov word [bp-014h], bx                    ; 89 5e ec
+    mov word [bp-036h], cx                    ; 89 4e ca
+    mov word [bp-020h], dx                    ; 89 56 e0
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    test ax, ax                               ; 85 c0
+    jnbe short 0823bh                         ; 77 16
+    jne near 082aeh                           ; 0f 85 85 00
+    cmp word [bp-030h], strict byte 00000h    ; 83 7e d0 00
+    jnbe short 0823bh                         ; 77 0c
+    jne near 082aeh                           ; 0f 85 7b 00
+    cmp word [bp-012h], strict byte 00040h    ; 83 7e ee 40
+    jnbe short 0823bh                         ; 77 02
+    jne short 082aeh                          ; 75 73
+    mov dword [bp-034h], strict dword 0003f00ffh ; 66 c7 46 cc ff 00 3f 00
+    mov bx, word [bp-030h]                    ; 8b 5e d0
+    mov cx, word [bp-012h]                    ; 8b 4e ee
+    mov dx, word [bp-016h]                    ; 8b 56 ea
+    mov si, strict word 00006h                ; be 06 00
+    call 09d4ah                               ; e8 f8 1a
+    mov si, word [bp-020h]                    ; 8b 76 e0
+    add si, dx                                ; 01 d6
+    mov word [bp-02ah], si                    ; 89 76 d6
+    mov dx, word [bp-036h]                    ; 8b 56 ca
+    adc dx, cx                                ; 11 ca
+    mov word [bp-028h], dx                    ; 89 56 d8
+    mov dx, word [bp-014h]                    ; 8b 56 ec
+    adc dx, bx                                ; 11 da
+    mov word [bp-01ch], dx                    ; 89 56 e4
+    mov dx, word [bp-018h]                    ; 8b 56 e8
+    adc dx, ax                                ; 11 c2
+    mov word [bp-026h], dx                    ; 89 56 da
+    mov ax, dx                                ; 89 d0
     mov bx, word [bp-01ch]                    ; 8b 5e e4
-    imul bx, word [bp-01ah]                   ; 0f af 5e e6
-    mov ax, word [bp-014h]                    ; 8b 46 ec
-    mov dx, di                                ; 89 fa
-    xor cx, cx                                ; 31 c9
-    call 09740h                               ; e8 aa 18
-    mov word [bp-01eh], ax                    ; 89 46 e2
-    mov word [bp-016h], dx                    ; 89 56 ea
-    mov dl, byte [bp-00ch]                    ; 8a 56 f4
-    add dl, 008h                              ; 80 c2 08
-    movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
-    sal bx, 002h                              ; c1 e3 02
-    mov es, [bp-018h]                         ; 8e 46 e8
-    add bx, si                                ; 01 f3
-    mov ax, word [bp-0022ah]                  ; 8b 86 d6 fd
-    mov word [es:bx+001d8h], ax               ; 26 89 87 d8 01
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
-    mov byte [es:bx+001dah], al               ; 26 88 87 da 01
-    movzx ax, dl                              ; 0f b6 c2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov bx, si                                ; 89 f3
+    mov cx, word [bp-028h]                    ; 8b 4e d8
+    mov dx, si                                ; 89 f2
+    mov si, strict word 00008h                ; be 08 00
+    call 09d4ah                               ; e8 c8 1a
+    mov word [bp-022h], bx                    ; 89 5e de
+    mov word [bp-02ch], cx                    ; 89 4e d4
+    mov word [bp-01ah], dx                    ; 89 56 e6
+    mov ax, word [bp-026h]                    ; 8b 46 da
+    mov bx, word [bp-01ch]                    ; 8b 5e e4
+    mov cx, word [bp-028h]                    ; 8b 4e d8
+    mov dx, word [bp-02ah]                    ; 8b 56 d6
+    mov si, strict word 00010h                ; be 10 00
+    call 09d4ah                               ; e8 ad 1a
+    mov si, word [bp-01ah]                    ; 8b 76 e6
+    add si, dx                                ; 01 d6
+    mov dx, word [bp-02ch]                    ; 8b 56 d4
+    adc dx, cx                                ; 11 ca
+    mov ax, word [bp-022h]                    ; 8b 46 de
+    adc ax, bx                                ; 11 d8
+    jmp short 082e9h                          ; eb 3b
+    test ax, ax                               ; 85 c0
+    jnbe short 082c4h                         ; 77 12
+    jne short 082ceh                          ; 75 1a
+    cmp word [bp-030h], strict byte 00000h    ; 83 7e d0 00
+    jnbe short 082c4h                         ; 77 0a
+    jne short 082ceh                          ; 75 12
+    cmp word [bp-012h], strict byte 00020h    ; 83 7e ee 20
+    jnbe short 082c4h                         ; 77 02
+    jne short 082ceh                          ; 75 0a
+    mov dword [bp-034h], strict dword 000200080h ; 66 c7 46 cc 80 00 20 00
+    jmp short 082e5h                          ; eb 17
+    mov dword [bp-034h], strict dword 000200040h ; 66 c7 46 cc 40 00 20 00
+    mov bx, word [bp-030h]                    ; 8b 5e d0
+    mov cx, word [bp-012h]                    ; 8b 4e ee
+    mov dx, word [bp-016h]                    ; 8b 56 ea
+    mov si, strict word 0000bh                ; be 0b 00
+    call 09d4ah                               ; e8 65 1a
+    mov si, dx                                ; 89 d6
+    mov dx, cx                                ; 89 ca
+    mov al, byte [bp-00ch]                    ; 8a 46 f4
+    add AL, strict byte 008h                  ; 04 08
+    mov byte [bp-00eh], al                    ; 88 46 f2
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    sal ax, 002h                              ; c1 e0 02
+    mov es, [bp-02eh]                         ; 8e 46 d2
+    mov bx, di                                ; 89 fb
     add bx, ax                                ; 01 c3
-    db  066h, 026h, 0c7h, 047h, 01eh, 004h, 0ffh, 000h, 000h
-    ; mov dword [es:bx+01eh], strict dword 00000ff04h ; 66 26 c7 47 1e 04 ff 00 00
-    mov ax, word [bp-010h]                    ; 8b 46 f0
-    mov word [es:bx+024h], ax                 ; 26 89 47 24
-    mov byte [es:bx+023h], 001h               ; 26 c6 47 23 01
-    mov ax, word [bp-01ch]                    ; 8b 46 e4
-    mov word [es:bx+026h], ax                 ; 26 89 47 26
-    mov ax, word [bp-01ah]                    ; 8b 46 e6
-    mov word [es:bx+02ah], ax                 ; 26 89 47 2a
-    cmp word [bp-016h], strict byte 00000h    ; 83 7e ea 00
-    jne short 07ef9h                          ; 75 07
-    cmp word [bp-01eh], 00400h                ; 81 7e e2 00 04
-    jbe short 07f01h                          ; 76 08
-    mov word [es:bx+028h], 00400h             ; 26 c7 47 28 00 04
-    jmp short 07f08h                          ; eb 07
-    mov ax, word [bp-01eh]                    ; 8b 46 e2
+    mov ax, word [bp-00248h]                  ; 8b 86 b8 fd
+    mov word [es:bx+0021ch], ax               ; 26 89 87 1c 02
+    mov al, byte [bp-01eh]                    ; 8a 46 e2
+    mov byte [es:bx+0021eh], al               ; 26 88 87 1e 02
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov bx, di                                ; 89 fb
+    add bx, ax                                ; 01 c3
+    db  066h, 026h, 0c7h, 047h, 022h, 004h, 0ffh, 000h, 000h
+    ; mov dword [es:bx+022h], strict dword 00000ff04h ; 66 26 c7 47 22 04 ff 00 00
+    mov ax, word [bp-024h]                    ; 8b 46 dc
     mov word [es:bx+028h], ax                 ; 26 89 47 28
-    mov bx, 00da2h                            ; bb a2 0d
+    mov byte [es:bx+027h], 001h               ; 26 c6 47 27 01
+    mov ax, word [bp-034h]                    ; 8b 46 cc
+    mov word [es:bx+02ah], ax                 ; 26 89 47 2a
+    mov ax, word [bp-032h]                    ; 8b 46 ce
+    mov word [es:bx+02eh], ax                 ; 26 89 47 2e
+    mov ax, word [bp-034h]                    ; 8b 46 cc
+    mov word [es:bx+030h], ax                 ; 26 89 47 30
+    mov ax, word [bp-032h]                    ; 8b 46 ce
+    mov word [es:bx+034h], ax                 ; 26 89 47 34
+    test dx, dx                               ; 85 d2
+    jne short 08356h                          ; 75 06
+    cmp si, 00400h                            ; 81 fe 00 04
+    jbe short 08364h                          ; 76 0e
+    mov word [es:bx+02ch], 00400h             ; 26 c7 47 2c 00 04
+    mov word [es:bx+032h], 00400h             ; 26 c7 47 32 00 04
+    jmp short 0836ch                          ; eb 08
+    mov word [es:bx+02ch], si                 ; 26 89 77 2c
+    mov word [es:bx+032h], si                 ; 26 89 77 32
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 1e 9a
-    push di                                   ; 57
-    push word [bp-014h]                       ; ff 76 ec
-    push dword [bp-01ch]                      ; 66 ff 76 e4
+    call 01931h                               ; e8 ba 95
+    push word [bp-010h]                       ; ff 76 f0
+    push word [bp-030h]                       ; ff 76 d0
+    push word [bp-012h]                       ; ff 76 ee
+    push word [bp-016h]                       ; ff 76 ea
+    push dword [bp-034h]                      ; 66 ff 76 cc
+    push dx                                   ; 52
+    push si                                   ; 56
     push word [bp-01eh]                       ; ff 76 e2
-    push word [bp-00eh]                       ; ff 76 f2
     movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
     push ax                                   ; 50
-    push 00c20h                               ; 68 20 0c
+    push 00c18h                               ; 68 18 0c
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 44 9a
-    add sp, strict byte 00012h                ; 83 c4 12
-    movzx ax, dl                              ; 0f b6 c2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov es, [bp-018h]                         ; 8e 46 e8
-    mov bx, si                                ; 89 f3
-    add bx, ax                                ; 01 c3
-    mov ax, word [bp-01ch]                    ; 8b 46 e4
-    mov word [es:bx+02ch], ax                 ; 26 89 47 2c
-    mov ax, word [bp-01ah]                    ; 8b 46 e6
-    mov word [es:bx+030h], ax                 ; 26 89 47 30
-    cmp word [bp-016h], strict byte 00000h    ; 83 7e ea 00
-    jne short 07f59h                          ; 75 07
-    cmp word [bp-01eh], 00400h                ; 81 7e e2 00 04
-    jbe short 07f61h                          ; 76 08
-    mov word [es:bx+02eh], 00400h             ; 26 c7 47 2e 00 04
-    jmp short 07f68h                          ; eb 07
-    mov ax, word [bp-01eh]                    ; 8b 46 e2
-    mov word [es:bx+02eh], ax                 ; 26 89 47 2e
-    movzx ax, dl                              ; 0f b6 c2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov es, [bp-018h]                         ; 8e 46 e8
-    mov bx, si                                ; 89 f3
-    add bx, ax                                ; 01 c3
-    mov ax, word [bp-014h]                    ; 8b 46 ec
-    mov word [es:bx+032h], ax                 ; 26 89 47 32
-    mov word [es:bx+034h], di                 ; 26 89 7f 34
-    mov al, byte [es:si+0019eh]               ; 26 8a 84 9e 01
+    call 01972h                               ; e8 d9 95
+    add sp, strict byte 00018h                ; 83 c4 18
+    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
+    imul bx, bx, strict byte 0001ch           ; 6b db 1c
+    mov es, [bp-02eh]                         ; 8e 46 d2
+    add bx, di                                ; 01 fb
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov word [es:bx+03ch], ax                 ; 26 89 47 3c
+    mov ax, word [bp-030h]                    ; 8b 46 d0
+    mov word [es:bx+03ah], ax                 ; 26 89 47 3a
+    mov ax, word [bp-012h]                    ; 8b 46 ee
+    mov word [es:bx+038h], ax                 ; 26 89 47 38
+    mov ax, word [bp-016h]                    ; 8b 46 ea
+    mov word [es:bx+036h], ax                 ; 26 89 47 36
+    mov al, byte [es:di+001e2h]               ; 26 8a 85 e2 01
     mov ah, byte [bp-00ch]                    ; 8a 66 f4
     add ah, 008h                              ; 80 c4 08
     movzx bx, al                              ; 0f b6 d8
-    add bx, si                                ; 01 f3
-    mov byte [es:bx+0019fh], ah               ; 26 88 a7 9f 01
+    add bx, di                                ; 01 fb
+    mov byte [es:bx+001e3h], ah               ; 26 88 a7 e3 01
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
-    mov byte [es:si+0019eh], al               ; 26 88 84 9e 01
+    mov byte [es:di+001e2h], al               ; 26 88 85 e2 01
     mov dx, strict word 00075h                ; ba 75 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 ab 96
+    call 01650h                               ; e8 67 92
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00075h                ; ba 75 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 ab 96
+    call 0165eh                               ; e8 67 92
     inc byte [bp-00ch]                        ; fe 46 f4
-    jmp near 08041h                           ; e9 88 00
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp near 08488h                           ; e9 8b 00
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 6d 99
-    push word [bp-00eh]                       ; ff 76 f2
+    call 01931h                               ; e8 29 95
+    push word [bp-01eh]                       ; ff 76 e2
     movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
     push ax                                   ; 50
-    push 00c4ah                               ; 68 4a 0c
+    push 00c46h                               ; 68 46 0c
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 9e 99
+    call 01972h                               ; e8 5a 95
     add sp, strict byte 00008h                ; 83 c4 08
-    mov dl, byte [bp-00ch]                    ; 8a 56 f4
-    add dl, 008h                              ; 80 c2 08
-    test byte [bp-00227h], 080h               ; f6 86 d9 fd 80
+    mov al, byte [bp-00ch]                    ; 8a 46 f4
+    add AL, strict byte 008h                  ; 04 08
+    mov byte [bp-00eh], al                    ; 88 46 f2
+    test byte [bp-00245h], 080h               ; f6 86 bb fd 80
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
     xor ah, ah                                ; 30 e4
-    mov cx, ax                                ; 89 c1
+    mov dx, ax                                ; 89 c2
     movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
     sal ax, 002h                              ; c1 e0 02
-    mov es, [bp-018h]                         ; 8e 46 e8
-    mov bx, si                                ; 89 f3
+    mov es, [bp-02eh]                         ; 8e 46 d2
+    mov bx, di                                ; 89 fb
     add bx, ax                                ; 01 c3
-    mov ax, word [bp-0022ah]                  ; 8b 86 d6 fd
-    mov word [es:bx+001d8h], ax               ; 26 89 87 d8 01
-    mov al, byte [bp-00eh]                    ; 8a 46 f2
-    mov byte [es:bx+001dah], al               ; 26 88 87 da 01
-    movzx ax, dl                              ; 0f b6 c2
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov bx, si                                ; 89 f3
+    mov ax, word [bp-00248h]                  ; 8b 86 b8 fd
+    mov word [es:bx+0021ch], ax               ; 26 89 87 1c 02
+    mov al, byte [bp-01eh]                    ; 8a 46 e2
+    mov byte [es:bx+0021eh], al               ; 26 88 87 1e 02
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    mov bx, di                                ; 89 fb
     add bx, ax                                ; 01 c3
-    mov word [es:bx+01eh], 00504h             ; 26 c7 47 1e 04 05
-    mov byte [es:bx+020h], cl                 ; 26 88 4f 20
-    mov word [es:bx+024h], 00800h             ; 26 c7 47 24 00 08
-    mov al, byte [es:si+001afh]               ; 26 8a 84 af 01
+    mov word [es:bx+022h], 00504h             ; 26 c7 47 22 04 05
+    mov byte [es:bx+024h], dl                 ; 26 88 57 24
+    mov word [es:bx+028h], 00800h             ; 26 c7 47 28 00 08
+    mov al, byte [es:di+001f3h]               ; 26 8a 85 f3 01
     mov ah, byte [bp-00ch]                    ; 8a 66 f4
     add ah, 008h                              ; 80 c4 08
     movzx bx, al                              ; 0f b6 d8
-    add bx, si                                ; 01 f3
-    mov byte [es:bx+001b0h], ah               ; 26 88 a7 b0 01
+    add bx, di                                ; 01 fb
+    mov byte [es:bx+001f4h], ah               ; 26 88 a7 f4 01
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
-    mov byte [es:si+001afh], al               ; 26 88 84 af 01
+    mov byte [es:di+001f3h], al               ; 26 88 85 f3 01
     inc byte [bp-00ch]                        ; fe 46 f4
     mov al, byte [bp-00ch]                    ; 8a 46 f4
-    mov es, [bp-018h]                         ; 8e 46 e8
-    mov byte [es:si+001e8h], al               ; 26 88 84 e8 01
-    inc word [bp-00eh]                        ; ff 46 f2
-    cmp word [bp-00eh], strict byte 00010h    ; 83 7e f2 10
-    jnl short 080c9h                          ; 7d 74
-    mov byte [bp-028h], 012h                  ; c6 46 d8 12
+    mov es, [bp-02eh]                         ; 8e 46 d2
+    mov byte [es:di+0022ch], al               ; 26 88 85 2c 02
+    inc word [bp-01eh]                        ; ff 46 e2
+    cmp word [bp-01eh], strict byte 00010h    ; 83 7e e2 10
+    jnl short 08510h                          ; 7d 74
+    mov byte [bp-046h], 012h                  ; c6 46 ba 12
     xor al, al                                ; 30 c0
-    mov byte [bp-027h], al                    ; 88 46 d9
-    mov byte [bp-026h], al                    ; 88 46 da
-    mov byte [bp-025h], al                    ; 88 46 db
-    mov byte [bp-024h], 005h                  ; c6 46 dc 05
-    mov byte [bp-023h], al                    ; 88 46 dd
+    mov byte [bp-045h], al                    ; 88 46 bb
+    mov byte [bp-044h], al                    ; 88 46 bc
+    mov byte [bp-043h], al                    ; 88 46 bd
+    mov byte [bp-042h], 005h                  ; c6 46 be 05
+    mov byte [bp-041h], al                    ; 88 46 bf
     push dword 000000005h                     ; 66 6a 05
-    lea dx, [bp-00228h]                       ; 8d 96 d8 fd
+    lea dx, [bp-00246h]                       ; 8d 96 ba fd
     push SS                                   ; 16
     push dx                                   ; 52
     push strict byte 00006h                   ; 6a 06
-    movzx dx, byte [bp-00eh]                  ; 0f b6 56 f2
+    movzx dx, byte [bp-01eh]                  ; 0f b6 56 e2
     mov cx, ss                                ; 8c d1
-    lea bx, [bp-028h]                         ; 8d 5e d8
-    mov ax, word [bp-0022ah]                  ; 8b 86 d6 fd
-    call 07885h                               ; e8 ff f7
+    lea bx, [bp-046h]                         ; 8d 5e ba
+    mov ax, word [bp-00248h]                  ; 8b 86 b8 fd
+    call 07bd2h                               ; e8 05 f7
     test al, al                               ; 84 c0
-    je short 08098h                           ; 74 0e
-    push 00b9ah                               ; 68 9a 0b
-    push 00bbah                               ; 68 ba 0b
+    je short 084dfh                           ; 74 0e
+    push 00b92h                               ; 68 92 0b
+    push 00bb2h                               ; 68 b2 0b
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 dd 98
+    call 01972h                               ; e8 96 94
     add sp, strict byte 00006h                ; 83 c4 06
-    mov es, [bp-018h]                         ; 8e 46 e8
-    mov al, byte [es:si+001e8h]               ; 26 8a 84 e8 01
+    mov es, [bp-02eh]                         ; 8e 46 d2
+    mov al, byte [es:di+0022ch]               ; 26 8a 85 2c 02
     mov byte [bp-00ch], al                    ; 88 46 f4
-    test byte [bp-00228h], 0e0h               ; f6 86 d8 fd e0
-    jne short 080b3h                          ; 75 09
-    test byte [bp-00228h], 01fh               ; f6 86 d8 fd 1f
-    je near 07d13h                            ; 0f 84 60 fc
-    test byte [bp-00228h], 0e0h               ; f6 86 d8 fd e0
-    jne short 08041h                          ; 75 87
-    mov al, byte [bp-00228h]                  ; 8a 86 d8 fd
+    test byte [bp-00246h], 0e0h               ; f6 86 ba fd e0
+    jne short 084fah                          ; 75 09
+    test byte [bp-00246h], 01fh               ; f6 86 ba fd 1f
+    je near 080bch                            ; 0f 84 c2 fb
+    test byte [bp-00246h], 0e0h               ; f6 86 ba fd e0
+    jne short 08488h                          ; 75 87
+    mov al, byte [bp-00246h]                  ; 8a 86 ba fd
     and AL, strict byte 01fh                  ; 24 1f
     cmp AL, strict byte 005h                  ; 3c 05
-    je near 07fb9h                            ; 0f 84 f3 fe
-    jmp near 08041h                           ; e9 78 ff
+    je near 083fdh                            ; 0f 84 f0 fe
+    jmp near 08488h                           ; e9 78 ff
     lea sp, [bp-00ah]                         ; 8d 66 f6
     pop di                                    ; 5f
     pop si                                    ; 5e
@@ -11874,15 +12256,15 @@ scsi_enumerate_attached_devices_:            ; 0xf7cef LB 0x3e4
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-_scsi_init:                                  ; 0xf80d3 LB 0x66
+_scsi_init:                                  ; 0xf851a LB 0x66
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 8d 95
+    call 0166ch                               ; e8 46 91
     mov bx, 00122h                            ; bb 22 01
     mov es, ax                                ; 8e c0
-    mov byte [es:bx+001e8h], 000h             ; 26 c6 87 e8 01 00
+    mov byte [es:bx+0022ch], 000h             ; 26 c6 87 2c 02 00
     mov AL, strict byte 055h                  ; b0 55
     mov dx, 00432h                            ; ba 32 04
     out DX, AL                                ; ee
@@ -11890,12 +12272,12 @@ _scsi_init:                                  ; 0xf80d3 LB 0x66
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp AL, strict byte 055h                  ; 3c 55
-    jne short 08103h                          ; 75 0c
+    jne short 0854ah                          ; 75 0c
     xor al, al                                ; 30 c0
     mov dx, 00433h                            ; ba 33 04
     out DX, AL                                ; ee
     mov ax, 00430h                            ; b8 30 04
-    call 07cefh                               ; e8 ec fb
+    call 08098h                               ; e8 4e fb
     mov AL, strict byte 055h                  ; b0 55
     mov dx, 00436h                            ; ba 36 04
     out DX, AL                                ; ee
@@ -11903,12 +12285,12 @@ _scsi_init:                                  ; 0xf80d3 LB 0x66
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp AL, strict byte 055h                  ; 3c 55
-    jne short 0811ch                          ; 75 0c
+    jne short 08563h                          ; 75 0c
     xor al, al                                ; 30 c0
     mov dx, 00437h                            ; ba 37 04
     out DX, AL                                ; ee
     mov ax, 00434h                            ; b8 34 04
-    call 07cefh                               ; e8 d3 fb
+    call 08098h                               ; e8 35 fb
     mov AL, strict byte 055h                  ; b0 55
     mov dx, 0043ah                            ; ba 3a 04
     out DX, AL                                ; ee
@@ -11916,87 +12298,115 @@ _scsi_init:                                  ; 0xf80d3 LB 0x66
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp AL, strict byte 055h                  ; 3c 55
-    jne short 08135h                          ; 75 0c
+    jne short 0857ch                          ; 75 0c
     xor al, al                                ; 30 c0
     mov dx, 0043bh                            ; ba 3b 04
     out DX, AL                                ; ee
     mov ax, 00438h                            ; b8 38 04
-    call 07cefh                               ; e8 ba fb
+    call 08098h                               ; e8 1c fb
     mov sp, bp                                ; 89 ec
     pop bp                                    ; 5d
     retn                                      ; c3
-high_bits_save_:                             ; 0xf8139 LB 0x17
+ahci_ctrl_extract_bits_:                     ; 0xf8580 LB 0x1b
+    push si                                   ; 56
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
-    push bx                                   ; 53
-    mov bx, ax                                ; 89 c3
-    shr eax, 010h                             ; 66 c1 e8 10
-    mov es, dx                                ; 8e c2
-    mov word [es:bx+00268h], ax               ; 26 89 87 68 02
-    lea sp, [bp-002h]                         ; 8d 66 fe
-    pop bx                                    ; 5b
+    mov si, bx                                ; 89 de
+    and ax, bx                                ; 21 d8
+    and dx, cx                                ; 21 ca
+    movzx cx, byte [bp+006h]                  ; 0f b6 4e 06
+    jcxz 08596h                               ; e3 06
+    shr dx, 1                                 ; d1 ea
+    rcr ax, 1                                 ; d1 d8
+    loop 08590h                               ; e2 fa
     pop bp                                    ; 5d
-    retn                                      ; c3
-high_bits_restore_:                          ; 0xf8150 LB 0x17
+    pop si                                    ; 5e
+    retn 00002h                               ; c2 02 00
+ahci_addr_to_phys_:                          ; 0xf859b LB 0x1e
+    push bx                                   ; 53
+    push cx                                   ; 51
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
-    push bx                                   ; 53
     mov bx, ax                                ; 89 c3
-    mov es, dx                                ; 8e c2
-    mov ax, word [es:bx+00268h]               ; 26 8b 87 68 02
-    sal eax, 010h                             ; 66 c1 e0 10
-    lea sp, [bp-002h]                         ; 8d 66 fe
-    pop bx                                    ; 5b
+    mov ax, dx                                ; 89 d0
+    xor dx, dx                                ; 31 d2
+    mov cx, strict word 00004h                ; b9 04 00
+    sal ax, 1                                 ; d1 e0
+    rcl dx, 1                                 ; d1 d2
+    loop 085a9h                               ; e2 fa
+    xor cx, cx                                ; 31 c9
+    add ax, bx                                ; 01 d8
+    adc dx, cx                                ; 11 ca
     pop bp                                    ; 5d
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
     retn                                      ; c3
-ahci_ctrl_set_bits_:                         ; 0xf8167 LB 0x43
+ahci_port_cmd_sync_:                         ; 0xf85b9 LB 0x14b
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
+    push cx                                   ; 51
     push si                                   ; 56
     push di                                   ; 57
     push ax                                   ; 50
     mov si, ax                                ; 89 c6
-    mov ax, dx                                ; 89 d0
-    mov word [bp-006h], bx                    ; 89 5e fa
-    mov di, cx                                ; 89 cf
+    mov cx, dx                                ; 89 d1
+    mov al, bl                                ; 88 d8
+    mov es, dx                                ; 8e c2
+    mov ah, byte [es:si+00262h]               ; 26 8a a4 62 02
+    mov byte [bp-008h], ah                    ; 88 66 f8
+    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
+    cmp ah, 0ffh                              ; 80 fc ff
+    je near 086fch                            ; 0f 84 20 01
+    movzx dx, byte [es:si+00263h]             ; 26 0f b6 94 63 02
+    xor di, di                                ; 31 ff
+    or di, 00080h                             ; 81 cf 80 00
+    xor ah, ah                                ; 30 e4
+    or di, ax                                 ; 09 c7
+    mov word [es:si], di                      ; 26 89 3c
+    mov word [es:si+002h], dx                 ; 26 89 54 02
+    db  066h, 026h, 0c7h, 044h, 004h, 000h, 000h, 000h, 000h
+    ; mov dword [es:si+004h], strict dword 000000000h ; 66 26 c7 44 04 00 00 00 00
+    lea ax, [si+00080h]                       ; 8d 84 80 00
+    mov dx, cx                                ; 89 ca
+    call 0859bh                               ; e8 96 ff
+    mov es, cx                                ; 8e c1
+    mov word [es:si+008h], ax                 ; 26 89 44 08
+    mov word [es:si+00ah], dx                 ; 26 89 54 0a
+    movzx di, byte [bp-008h]                  ; 0f b6 7e f8
+    sal di, 007h                              ; c1 e7 07
+    lea ax, [di+00118h]                       ; 8d 85 18 01
     xor cx, cx                                ; 31 c9
-    mov dx, si                                ; 89 f2
+    mov dx, bx                                ; 89 da
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea bx, [si+004h]                         ; 8d 5c 04
-    mov dx, bx                                ; 89 da
+    lea si, [bx+004h]                         ; 8d 77 04
+    mov dx, si                                ; 89 f2
     in eax, DX                                ; 66 ed
     db  08bh, 0d0h
     ; mov dx, ax                                ; 8b d0
     shr eax, 010h                             ; 66 c1 e8 10
     xchg dx, ax                               ; 92
-    or ax, word [bp-006h]                     ; 0b 46 fa
+    or AL, strict byte 011h                   ; 0c 11
+    mov cx, dx                                ; 89 d1
+    mov dx, si                                ; 89 f2
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    lea ax, [di+00138h]                       ; 8d 85 38 01
+    cwd                                       ; 99
     mov cx, dx                                ; 89 d1
-    or cx, di                                 ; 09 f9
     mov dx, bx                                ; 89 da
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea sp, [bp-004h]                         ; 8d 66 fc
-    pop di                                    ; 5f
-    pop si                                    ; 5e
-    pop bp                                    ; 5d
-    retn                                      ; c3
-ahci_ctrl_clear_bits_:                       ; 0xf81aa LB 0x47
-    push bp                                   ; 55
-    mov bp, sp                                ; 89 e5
-    push si                                   ; 56
-    push di                                   ; 57
-    push ax                                   ; 50
-    mov si, ax                                ; 89 c6
-    mov ax, dx                                ; 89 d0
-    mov di, bx                                ; 89 df
-    mov word [bp-006h], cx                    ; 89 4e fa
+    mov ax, strict word 00001h                ; b8 01 00
     xor cx, cx                                ; 31 c9
     mov dx, si                                ; 89 f2
     xchg cx, ax                               ; 91
@@ -12004,323 +12414,261 @@ ahci_ctrl_clear_bits_:                       ; 0xf81aa LB 0x47
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea bx, [si+004h]                         ; 8d 5c 04
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    sal ax, 007h                              ; c1 e0 07
+    add ax, 00110h                            ; 05 10 01
+    xor cx, cx                                ; 31 c9
     mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    lea dx, [bx+004h]                         ; 8d 57 04
     in eax, DX                                ; 66 ed
     db  08bh, 0d0h
     ; mov dx, ax                                ; 8b d0
     shr eax, 010h                             ; 66 c1 e8 10
     xchg dx, ax                               ; 92
-    not di                                    ; f7 d7
-    mov cx, word [bp-006h]                    ; 8b 4e fa
-    not cx                                    ; f7 d1
-    and ax, di                                ; 21 f8
-    and cx, dx                                ; 21 d1
+    test dh, 040h                             ; f6 c6 40
+    jne short 08692h                          ; 75 04
+    test AL, strict byte 001h                 ; a8 01
+    je short 08696h                           ; 74 04
+    mov AL, strict byte 001h                  ; b0 01
+    jmp short 08698h                          ; eb 02
+    xor al, al                                ; 30 c0
+    test al, al                               ; 84 c0
+    je short 08666h                           ; 74 ca
+    movzx di, byte [bp-008h]                  ; 0f b6 7e f8
+    sal di, 007h                              ; c1 e7 07
+    lea ax, [di+00110h]                       ; 8d 85 10 01
+    xor cx, cx                                ; 31 c9
     mov dx, bx                                ; 89 da
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea sp, [bp-004h]                         ; 8d 66 fc
-    pop di                                    ; 5f
-    pop si                                    ; 5e
-    pop bp                                    ; 5d
-    retn                                      ; c3
-ahci_ctrl_is_bit_set_:                       ; 0xf81f1 LB 0x39
-    push bp                                   ; 55
-    mov bp, sp                                ; 89 e5
-    push si                                   ; 56
-    push di                                   ; 57
-    mov si, ax                                ; 89 c6
-    mov ax, dx                                ; 89 d0
-    mov di, cx                                ; 89 cf
-    xor cx, cx                                ; 31 c9
+    lea si, [bx+004h]                         ; 8d 77 04
     mov dx, si                                ; 89 f2
-    xchg cx, ax                               ; 91
-    sal eax, 010h                             ; 66 c1 e0 10
-    db  08bh, 0c1h
-    ; mov ax, cx                                ; 8b c1
-    out DX, eax                               ; 66 ef
-    lea dx, [si+004h]                         ; 8d 54 04
     in eax, DX                                ; 66 ed
     db  08bh, 0d0h
     ; mov dx, ax                                ; 8b d0
     shr eax, 010h                             ; 66 c1 e8 10
     xchg dx, ax                               ; 92
-    test dx, di                               ; 85 fa
-    jne short 0821dh                          ; 75 04
-    test ax, bx                               ; 85 d8
-    je short 08221h                           ; 74 04
-    mov AL, strict byte 001h                  ; b0 01
-    jmp short 08223h                          ; eb 02
-    xor al, al                                ; 30 c0
-    lea sp, [bp-004h]                         ; 8d 66 fc
-    pop di                                    ; 5f
-    pop si                                    ; 5e
-    pop bp                                    ; 5d
-    retn                                      ; c3
-ahci_ctrl_extract_bits_:                     ; 0xf822a LB 0x1b
-    push si                                   ; 56
-    push bp                                   ; 55
-    mov bp, sp                                ; 89 e5
-    mov si, bx                                ; 89 de
-    and ax, bx                                ; 21 d8
-    and dx, cx                                ; 21 ca
-    movzx cx, byte [bp+006h]                  ; 0f b6 4e 06
-    jcxz 08240h                               ; e3 06
-    shr dx, 1                                 ; d1 ea
-    rcr ax, 1                                 ; d1 d8
-    loop 0823ah                               ; e2 fa
-    pop bp                                    ; 5d
-    pop si                                    ; 5e
-    retn 00002h                               ; c2 02 00
-ahci_addr_to_phys_:                          ; 0xf8245 LB 0x1e
-    push bx                                   ; 53
-    push cx                                   ; 51
-    push bp                                   ; 55
-    mov bp, sp                                ; 89 e5
-    mov bx, ax                                ; 89 c3
-    mov ax, dx                                ; 89 d0
-    xor dx, dx                                ; 31 d2
-    mov cx, strict word 00004h                ; b9 04 00
-    sal ax, 1                                 ; d1 e0
-    rcl dx, 1                                 ; d1 d2
-    loop 08253h                               ; e2 fa
-    xor cx, cx                                ; 31 c9
-    add ax, bx                                ; 01 d8
-    adc dx, cx                                ; 11 ca
-    pop bp                                    ; 5d
-    pop cx                                    ; 59
-    pop bx                                    ; 5b
-    retn                                      ; c3
-ahci_port_cmd_sync_:                         ; 0xf8263 LB 0xd5
-    push bp                                   ; 55
-    mov bp, sp                                ; 89 e5
-    push cx                                   ; 51
-    push si                                   ; 56
-    push di                                   ; 57
-    sub sp, strict byte 00006h                ; 83 ec 06
-    mov si, ax                                ; 89 c6
-    mov word [bp-00ah], dx                    ; 89 56 f6
-    mov es, dx                                ; 8e c2
-    mov al, byte [es:si+00262h]               ; 26 8a 84 62 02
-    mov byte [bp-008h], al                    ; 88 46 f8
-    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
-    cmp AL, strict byte 0ffh                  ; 3c ff
-    je near 08330h                            ; 0f 84 aa 00
-    movzx cx, byte [es:si+00263h]             ; 26 0f b6 8c 63 02
-    xor dx, dx                                ; 31 d2
-    or dl, 080h                               ; 80 ca 80
-    movzx ax, bl                              ; 0f b6 c3
-    or dx, ax                                 ; 09 c2
-    mov word [es:si], dx                      ; 26 89 14
-    mov word [es:si+002h], cx                 ; 26 89 4c 02
-    db  066h, 026h, 0c7h, 044h, 004h, 000h, 000h, 000h, 000h
-    ; mov dword [es:si+004h], strict dword 000000000h ; 66 26 c7 44 04 00 00 00 00
-    lea ax, [si+00080h]                       ; 8d 84 80 00
-    mov dx, es                                ; 8c c2
-    call 08245h                               ; e8 96 ff
-    mov es, [bp-00ah]                         ; 8e 46 f6
-    mov word [es:si+008h], ax                 ; 26 89 44 08
-    mov word [es:si+00ah], dx                 ; 26 89 54 0a
-    movzx si, byte [bp-008h]                  ; 0f b6 76 f8
-    sal si, 007h                              ; c1 e6 07
-    lea dx, [si+00118h]                       ; 8d 94 18 01
-    mov bx, strict word 00011h                ; bb 11 00
-    xor cx, cx                                ; 31 c9
-    mov ax, di                                ; 89 f8
-    call 08167h                               ; e8 98 fe
-    lea ax, [si+00138h]                       ; 8d 84 38 01
-    cwd                                       ; 99
+    or AL, strict byte 001h                   ; 0c 01
     mov cx, dx                                ; 89 d1
-    mov dx, di                                ; 89 fa
+    mov dx, si                                ; 89 f2
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea dx, [di+004h]                         ; 8d 55 04
-    mov ax, strict word 00001h                ; b8 01 00
+    lea ax, [di+00118h]                       ; 8d 85 18 01
     xor cx, cx                                ; 31 c9
+    mov dx, bx                                ; 89 da
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
-    sal ax, 007h                              ; c1 e0 07
-    mov word [bp-00ch], ax                    ; 89 46 f4
-    mov si, ax                                ; 89 c6
-    add si, 00110h                            ; 81 c6 10 01
-    mov bx, strict word 00001h                ; bb 01 00
-    mov cx, 04000h                            ; b9 00 40
     mov dx, si                                ; 89 f2
-    mov ax, di                                ; 89 f8
-    call 081f1h                               ; e8 e2 fe
-    test al, al                               ; 84 c0
-    je short 082f2h                           ; 74 df
-    mov bx, strict word 00001h                ; bb 01 00
-    xor cx, cx                                ; 31 c9
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    and AL, strict byte 0feh                  ; 24 fe
+    mov cx, dx                                ; 89 d1
     mov dx, si                                ; 89 f2
-    mov ax, di                                ; 89 f8
-    call 08167h                               ; e8 48 fe
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
-    add dx, 00118h                            ; 81 c2 18 01
-    mov bx, strict word 00001h                ; bb 01 00
-    xor cx, cx                                ; 31 c9
-    mov ax, di                                ; 89 f8
-    call 081aah                               ; e8 7a fe
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
     lea sp, [bp-006h]                         ; 8d 66 fa
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
-ahci_cmd_data_:                              ; 0xf8338 LB 0x1e4
+ahci_cmd_data_:                              ; 0xf8704 LB 0x262
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push cx                                   ; 51
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, strict byte 00010h                ; 83 ec 10
-    mov di, ax                                ; 89 c7
-    mov word [bp-00ch], dx                    ; 89 56 f4
+    sub sp, strict byte 0000ch                ; 83 ec 0c
+    push ax                                   ; 50
+    push dx                                   ; 52
     mov byte [bp-008h], bl                    ; 88 5e f8
-    xor si, si                                ; 31 f6
+    xor di, di                                ; 31 ff
     mov es, dx                                ; 8e c2
-    mov ax, word [es:di+001eeh]               ; 26 8b 85 ee 01
+    mov bx, ax                                ; 89 c3
+    mov ax, word [es:bx+00232h]               ; 26 8b 87 32 02
     mov word [bp-00ah], ax                    ; 89 46 f6
-    mov word [bp-010h], si                    ; 89 76 f0
-    mov word [bp-00eh], ax                    ; 89 46 f2
-    mov ax, word [es:di+00ah]                 ; 26 8b 45 0a
-    mov word [bp-016h], ax                    ; 89 46 ea
-    mov ax, word [es:di+00ch]                 ; 26 8b 45 0c
+    mov word [bp-00eh], di                    ; 89 7e f2
+    mov word [bp-00ch], ax                    ; 89 46 f4
+    mov ax, word [es:bx+00eh]                 ; 26 8b 47 0e
     mov word [bp-012h], ax                    ; 89 46 ee
+    mov ax, word [es:bx+010h]                 ; 26 8b 47 10
+    mov word [bp-010h], ax                    ; 89 46 f0
     mov cx, strict word 00040h                ; b9 40 00
     xor bx, bx                                ; 31 db
     mov ax, 00080h                            ; b8 80 00
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 097aah                               ; e8 33 14
+    call 09d5ah                               ; e8 18 16
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov word [es:si+00080h], 08027h           ; 26 c7 84 80 00 27 80
+    mov word [es:di+00080h], 08027h           ; 26 c7 85 80 00 27 80
     mov al, byte [bp-008h]                    ; 8a 46 f8
-    mov byte [es:si+00082h], al               ; 26 88 84 82 00
-    mov byte [es:si+00083h], 000h             ; 26 c6 84 83 00 00
-    mov es, [bp-00ch]                         ; 8e 46 f4
-    mov al, byte [es:di]                      ; 26 8a 05
+    mov byte [es:di+00082h], al               ; 26 88 85 82 00
+    mov byte [es:di+00083h], 000h             ; 26 c6 85 83 00 00
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov ax, word [es:bx]                      ; 26 8b 07
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov byte [es:si+00084h], al               ; 26 88 84 84 00
-    mov es, [bp-00ch]                         ; 8e 46 f4
-    mov ax, word [es:di]                      ; 26 8b 05
-    mov bx, word [es:di+002h]                 ; 26 8b 5d 02
-    mov cx, strict word 00008h                ; b9 08 00
-    shr bx, 1                                 ; d1 eb
-    rcr ax, 1                                 ; d1 d8
-    loop 083aah                               ; e2 fa
+    mov byte [es:di+00084h], al               ; 26 88 85 84 00
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-014h]                    ; 8b 76 ec
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00008h                ; be 08 00
+    call 09d4ah                               ; e8 c4 15
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    mov byte [es:di+00085h], dl               ; 26 88 95 85 00
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-014h]                    ; 8b 76 ec
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00010h                ; be 10 00
+    call 09d4ah                               ; e8 9e 15
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    mov byte [es:di+00086h], dl               ; 26 88 95 86 00
+    mov byte [es:di+00087h], 040h             ; 26 c6 85 87 00 40
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-014h]                    ; 8b 76 ec
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00018h                ; be 18 00
+    call 09d4ah                               ; e8 72 15
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov byte [es:si+00085h], al               ; 26 88 84 85 00
-    mov es, [bp-00ch]                         ; 8e 46 f4
-    mov ax, word [es:di+002h]                 ; 26 8b 45 02
+    mov byte [es:di+00088h], dl               ; 26 88 95 88 00
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-014h]                    ; 8b 76 ec
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00020h                ; be 20 00
+    call 09d4ah                               ; e8 4c 15
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov byte [es:si+00086h], al               ; 26 88 84 86 00
-    mov byte [es:si+00087h], 040h             ; 26 c6 84 87 00 40
-    mov es, [bp-00ch]                         ; 8e 46 f4
-    mov ax, word [es:di+002h]                 ; 26 8b 45 02
-    shr ax, 008h                              ; c1 e8 08
+    mov byte [es:di+00089h], dl               ; 26 88 95 89 00
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov ax, word [es:bx+006h]                 ; 26 8b 47 06
+    mov bx, word [es:bx+004h]                 ; 26 8b 5f 04
+    mov si, word [bp-014h]                    ; 8b 76 ec
+    mov cx, word [es:si+002h]                 ; 26 8b 4c 02
+    mov dx, word [es:si]                      ; 26 8b 14
+    mov si, strict word 00028h                ; be 28 00
+    call 09d4ah                               ; e8 26 15
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov byte [es:si+00088h], al               ; 26 88 84 88 00
-    mov word [es:si+00089h], strict word 00000h ; 26 c7 84 89 00 00 00
-    mov byte [es:si+0008bh], 000h             ; 26 c6 84 8b 00 00
-    mov al, byte [bp-016h]                    ; 8a 46 ea
-    mov byte [es:si+0008ch], al               ; 26 88 84 8c 00
-    mov ax, word [bp-016h]                    ; 8b 46 ea
+    mov byte [es:di+0008ah], dl               ; 26 88 95 8a 00
+    mov byte [es:di+0008bh], 000h             ; 26 c6 85 8b 00 00
+    mov al, byte [bp-012h]                    ; 8a 46 ee
+    mov byte [es:di+0008ch], al               ; 26 88 85 8c 00
+    mov ax, word [bp-012h]                    ; 8b 46 ee
     shr ax, 008h                              ; c1 e8 08
-    mov byte [es:si+0008dh], al               ; 26 88 84 8d 00
-    mov word [es:si+00276h], strict word 00010h ; 26 c7 84 76 02 10 00
-    mov ax, word [bp-016h]                    ; 8b 46 ea
+    mov byte [es:di+0008dh], al               ; 26 88 85 8d 00
+    mov word [es:di+00276h], strict word 00010h ; 26 c7 85 76 02 10 00
+    mov ax, word [bp-012h]                    ; 8b 46 ee
     xor dx, dx                                ; 31 d2
-    mov bx, word [bp-012h]                    ; 8b 5e ee
+    mov bx, word [bp-010h]                    ; 8b 5e f0
     xor cx, cx                                ; 31 c9
-    call 09779h                               ; e8 66 13
+    call 09d09h                               ; e8 b0 14
     push dx                                   ; 52
     push ax                                   ; 50
-    mov es, [bp-00ch]                         ; 8e 46 f4
-    mov bx, word [es:di+004h]                 ; 26 8b 5d 04
-    mov cx, word [es:di+006h]                 ; 26 8b 4d 06
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    mov bx, word [es:bx+008h]                 ; 26 8b 5f 08
+    mov si, word [bp-014h]                    ; 8b 76 ec
+    mov cx, word [es:si+00ah]                 ; 26 8b 4c 0a
     mov ax, 0026ah                            ; b8 6a 02
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 09688h                               ; e8 5f 12
+    call 09c27h                               ; e8 b2 13
     mov es, [bp-00ah]                         ; 8e 46 f6
-    movzx ax, byte [es:si+00263h]             ; 26 0f b6 84 63 02
-    mov dx, word [es:si+0027eh]               ; 26 8b 94 7e 02
-    add dx, strict byte 0ffffh                ; 83 c2 ff
-    mov bx, word [es:si+00280h]               ; 26 8b 9c 80 02
-    adc bx, strict byte 0ffffh                ; 83 d3 ff
-    mov word [bp-014h], bx                    ; 89 5e ec
-    mov bx, ax                                ; 89 c3
+    mov ax, word [es:di+0027eh]               ; 26 8b 85 7e 02
+    add ax, strict word 0ffffh                ; 05 ff ff
+    mov dx, word [es:di+00280h]               ; 26 8b 95 80 02
+    adc dx, strict byte 0ffffh                ; 83 d2 ff
+    movzx bx, byte [es:di+00263h]             ; 26 0f b6 9d 63 02
     sal bx, 004h                              ; c1 e3 04
-    mov word [es:bx+0010ch], dx               ; 26 89 97 0c 01
-    mov dx, word [bp-014h]                    ; 8b 56 ec
+    mov word [es:bx+0010ch], ax               ; 26 89 87 0c 01
     mov word [es:bx+0010eh], dx               ; 26 89 97 0e 01
-    mov dx, word [es:si+0027ah]               ; 26 8b 94 7a 02
-    mov cx, word [es:si+0027ch]               ; 26 8b 8c 7c 02
-    mov word [es:bx+00100h], dx               ; 26 89 97 00 01
-    mov word [es:bx+00102h], cx               ; 26 89 8f 02 01
-    inc ax                                    ; 40
-    mov es, [bp-00ch]                         ; 8e 46 f4
-    cmp word [es:di+01ch], strict byte 00000h ; 26 83 7d 1c 00
-    je short 084a2h                           ; 74 2c
-    mov dx, word [es:di+01ch]                 ; 26 8b 55 1c
-    dec dx                                    ; 4a
-    mov bx, ax                                ; 89 c3
+    movzx bx, byte [es:di+00263h]             ; 26 0f b6 9d 63 02
     sal bx, 004h                              ; c1 e3 04
+    mov ax, word [es:di+0027ah]               ; 26 8b 85 7a 02
+    mov dx, word [es:di+0027ch]               ; 26 8b 95 7c 02
+    mov word [es:bx+00100h], ax               ; 26 89 87 00 01
+    mov word [es:bx+00102h], dx               ; 26 89 97 02 01
+    inc byte [es:di+00263h]                   ; 26 fe 85 63 02
+    mov es, [bp-016h]                         ; 8e 46 ea
+    mov bx, si                                ; 89 f3
+    mov ax, word [es:bx+020h]                 ; 26 8b 47 20
+    test ax, ax                               ; 85 c0
+    je short 08903h                           ; 74 39
+    dec ax                                    ; 48
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov word [es:bx+0010ch], dx               ; 26 89 97 0c 01
-    mov word [es:bx+0010eh], si               ; 26 89 b7 0e 01
-    mov dx, word [es:si+00264h]               ; 26 8b 94 64 02
-    mov cx, word [es:si+00266h]               ; 26 8b 8c 66 02
+    movzx bx, byte [es:di+00263h]             ; 26 0f b6 9d 63 02
+    sal bx, 004h                              ; c1 e3 04
+    mov word [es:bx+0010ch], ax               ; 26 89 87 0c 01
+    mov word [es:bx+0010eh], di               ; 26 89 bf 0e 01
+    movzx bx, byte [es:di+00263h]             ; 26 0f b6 9d 63 02
+    sal bx, 004h                              ; c1 e3 04
+    mov dx, word [es:di+00264h]               ; 26 8b 95 64 02
+    mov ax, word [es:di+00266h]               ; 26 8b 85 66 02
     mov word [es:bx+00100h], dx               ; 26 89 97 00 01
-    mov word [es:bx+00102h], cx               ; 26 89 8f 02 01
-    inc ax                                    ; 40
-    les bx, [bp-010h]                         ; c4 5e f0
-    mov byte [es:bx+00263h], al               ; 26 88 87 63 02
-    xor ax, ax                                ; 31 c0
-    les bx, [bp-010h]                         ; c4 5e f0
-    movzx dx, byte [es:bx+00263h]             ; 26 0f b6 97 63 02
-    cmp ax, dx                                ; 39 d0
-    jnc short 084bch                          ; 73 03
-    inc ax                                    ; 40
-    jmp short 084ach                          ; eb f0
+    mov word [es:bx+00102h], ax               ; 26 89 87 02 01
+    inc byte [es:di+00263h]                   ; 26 fe 85 63 02
     mov al, byte [bp-008h]                    ; 8a 46 f8
     cmp AL, strict byte 035h                  ; 3c 35
-    jne short 084c9h                          ; 75 06
+    jne short 08910h                          ; 75 06
     mov byte [bp-008h], 040h                  ; c6 46 f8 40
-    jmp short 084ddh                          ; eb 14
+    jmp short 08927h                          ; eb 17
     cmp AL, strict byte 0a0h                  ; 3c a0
-    jne short 084d9h                          ; 75 0c
+    jne short 08923h                          ; 75 0f
     or byte [bp-008h], 020h                   ; 80 4e f8 20
+    les bx, [bp-00eh]                         ; c4 5e f2
     or byte [es:bx+00083h], 001h              ; 26 80 8f 83 00 01
-    jmp short 084ddh                          ; eb 04
+    jmp short 08927h                          ; eb 04
     mov byte [bp-008h], 000h                  ; c6 46 f8 00
     or byte [bp-008h], 005h                   ; 80 4e f8 05
     movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
-    mov ax, word [bp-010h]                    ; 8b 46 f0
-    mov dx, word [bp-00eh]                    ; 8b 56 f2
-    call 08263h                               ; e8 75 fd
-    mov cx, word [bp-00eh]                    ; 8b 4e f2
-    mov bx, word [bp-010h]                    ; 8b 5e f0
+    mov ax, word [bp-00eh]                    ; 8b 46 f2
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
+    call 085b9h                               ; e8 81 fc
+    mov cx, word [bp-00ch]                    ; 8b 4e f4
+    mov bx, word [bp-00eh]                    ; 8b 5e f2
     add bx, 00240h                            ; 81 c3 40 02
-    mov ax, word [bp-010h]                    ; 8b 46 f0
+    mov ax, word [bp-00eh]                    ; 8b 46 f2
     add ax, 0026ah                            ; 05 6a 02
     mov dx, cx                                ; 89 ca
-    call 09701h                               ; e8 fe 11
+    call 09ca0h                               ; e8 53 13
     mov es, cx                                ; 8e c1
     mov al, byte [es:bx+003h]                 ; 26 8a 47 03
     test al, al                               ; 84 c0
-    je short 08512h                           ; 74 05
+    je short 0895ch                           ; 74 05
     mov ax, strict word 00004h                ; b8 04 00
-    jmp short 08514h                          ; eb 02
+    jmp short 0895eh                          ; eb 02
     xor ah, ah                                ; 30 e4
     lea sp, [bp-006h]                         ; 8d 66 fa
     pop di                                    ; 5f
@@ -12328,7 +12676,7 @@ ahci_cmd_data_:                              ; 0xf8338 LB 0x1e4
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
-ahci_port_deinit_current_:                   ; 0xf851c LB 0x144
+ahci_port_deinit_current_:                   ; 0xf8966 LB 0x17f
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -12343,41 +12691,73 @@ ahci_port_deinit_current_:                   ; 0xf851c LB 0x144
     mov al, byte [es:di+00262h]               ; 26 8a 85 62 02
     mov byte [bp-00ah], al                    ; 88 46 f6
     cmp AL, strict byte 0ffh                  ; 3c ff
-    je near 08657h                            ; 0f 84 17 01
-    movzx dx, al                              ; 0f b6 d0
-    sal dx, 007h                              ; c1 e2 07
-    add dx, 00118h                            ; 81 c2 18 01
-    mov bx, strict word 00011h                ; bb 11 00
+    je near 08adch                            ; 0f 84 52 01
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    sal ax, 007h                              ; c1 e0 07
+    add ax, 00118h                            ; 05 18 01
     xor cx, cx                                ; 31 c9
-    mov ax, si                                ; 89 f0
-    call 081aah                               ; e8 56 fc
+    mov dx, si                                ; 89 f2
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    lea bx, [si+004h]                         ; 8d 5c 04
+    mov dx, bx                                ; 89 da
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    and AL, strict byte 0eeh                  ; 24 ee
+    mov cx, dx                                ; 89 d1
+    mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
     movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
     sal ax, 007h                              ; c1 e0 07
-    mov word [bp-00eh], ax                    ; 89 46 f2
-    mov dx, ax                                ; 89 c2
-    add dx, 00118h                            ; 81 c2 18 01
-    mov bx, 0c011h                            ; bb 11 c0
+    add ax, 00118h                            ; 05 18 01
     xor cx, cx                                ; 31 c9
-    mov ax, si                                ; 89 f0
-    call 081f1h                               ; e8 83 fc
+    mov dx, si                                ; 89 f2
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    lea dx, [si+004h]                         ; 8d 54 04
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    test ax, 0c011h                           ; a9 11 c0
+    je short 089eah                           ; 74 04
+    mov AL, strict byte 001h                  ; b0 01
+    jmp short 089ech                          ; eb 02
+    xor al, al                                ; 30 c0
     cmp AL, strict byte 001h                  ; 3c 01
-    je short 08554h                           ; 74 e2
+    je short 089beh                           ; 74 ce
     mov cx, strict word 00020h                ; b9 20 00
     xor bx, bx                                ; 31 db
     mov ax, di                                ; 89 f8
     mov dx, word [bp-00ch]                    ; 8b 56 f4
-    call 097aah                               ; e8 2b 12
+    call 09d5ah                               ; e8 5d 13
     lea ax, [di+00080h]                       ; 8d 85 80 00
     mov cx, strict word 00040h                ; b9 40 00
     xor bx, bx                                ; 31 db
     mov dx, word [bp-00ch]                    ; 8b 56 f4
-    call 097aah                               ; e8 1c 12
+    call 09d5ah                               ; e8 4e 13
     lea ax, [di+00200h]                       ; 8d 85 00 02
     mov cx, strict word 00060h                ; b9 60 00
     xor bx, bx                                ; 31 db
     mov dx, word [bp-00ch]                    ; 8b 56 f4
-    call 097aah                               ; e8 0d 12
-    mov ax, word [bp-00eh]                    ; 8b 46 f2
+    call 09d5ah                               ; e8 3f 13
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    sal ax, 007h                              ; c1 e0 07
+    mov word [bp-00eh], ax                    ; 89 46 f2
     add ax, 00108h                            ; 05 08 01
     cwd                                       ; 99
     mov cx, dx                                ; 89 d1
@@ -12478,7 +12858,7 @@ ahci_port_deinit_current_:                   ; 0xf851c LB 0x144
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-ahci_port_init_:                             ; 0xf8660 LB 0x206
+ahci_port_init_:                             ; 0xf8ae5 LB 0x24a
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push cx                                   ; 51
@@ -12488,72 +12868,108 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     mov si, ax                                ; 89 c6
     mov word [bp-00ah], dx                    ; 89 56 f6
     mov byte [bp-008h], bl                    ; 88 5e f8
-    call 0851ch                               ; e8 a8 fe
-    movzx dx, bl                              ; 0f b6 d3
-    sal dx, 007h                              ; c1 e2 07
-    add dx, 00118h                            ; 81 c2 18 01
+    call 08966h                               ; e8 6d fe
+    movzx ax, bl                              ; 0f b6 c3
+    sal ax, 007h                              ; c1 e0 07
+    add ax, 00118h                            ; 05 18 01
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov ax, word [es:si+00260h]               ; 26 8b 84 60 02
-    mov bx, strict word 00011h                ; bb 11 00
+    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
     xor cx, cx                                ; 31 c9
-    call 081aah                               ; e8 1c fb
-    movzx di, byte [bp-008h]                  ; 0f b6 7e f8
-    sal di, 007h                              ; c1 e7 07
-    lea dx, [di+00118h]                       ; 8d 95 18 01
+    mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    add bx, strict byte 00004h                ; 83 c3 04
+    mov dx, bx                                ; 89 da
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    and AL, strict byte 0eeh                  ; 24 ee
+    mov cx, dx                                ; 89 d1
+    mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    sal ax, 007h                              ; c1 e0 07
+    add ax, 00118h                            ; 05 18 01
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov ax, word [es:si+00260h]               ; 26 8b 84 60 02
-    mov bx, 0c011h                            ; bb 11 c0
+    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
     xor cx, cx                                ; 31 c9
-    call 081f1h                               ; e8 48 fb
+    mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    lea dx, [bx+004h]                         ; 8d 57 04
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    test ax, 0c011h                           ; a9 11 c0
+    je short 08b68h                           ; 74 04
+    mov AL, strict byte 001h                  ; b0 01
+    jmp short 08b6ah                          ; eb 02
+    xor al, al                                ; 30 c0
     cmp AL, strict byte 001h                  ; 3c 01
-    je short 0868eh                           ; 74 e1
+    je short 08b34h                           ; 74 c6
     mov cx, strict word 00020h                ; b9 20 00
     xor bx, bx                                ; 31 db
     mov ax, si                                ; 89 f0
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 097aah                               ; e8 f0 10
+    call 09d5ah                               ; e8 df 11
     lea ax, [si+00080h]                       ; 8d 84 80 00
     mov cx, strict word 00040h                ; b9 40 00
     xor bx, bx                                ; 31 db
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 097aah                               ; e8 e1 10
-    mov ax, si                                ; 89 f0
-    add ah, 002h                              ; 80 c4 02
-    mov word [bp-00ch], ax                    ; 89 46 f4
+    call 09d5ah                               ; e8 d0 11
+    lea di, [si+00200h]                       ; 8d bc 00 02
     mov cx, strict word 00060h                ; b9 60 00
     xor bx, bx                                ; 31 db
+    mov ax, di                                ; 89 f8
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 097aah                               ; e8 ce 10
-    lea ax, [di+00108h]                       ; 8d 85 08 01
+    call 09d5ah                               ; e8 bf 11
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    sal bx, 007h                              ; c1 e3 07
+    lea ax, [bx+00108h]                       ; 8d 87 08 01
     cwd                                       ; 99
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
+    mov cx, word [es:si+00260h]               ; 26 8b 8c 60 02
+    mov word [bp-00ch], cx                    ; 89 4e f4
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, word [bp-00ch]                    ; 8b 56 f4
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    mov ax, word [bp-00ch]                    ; 8b 46 f4
+    mov ax, di                                ; 89 f8
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 08245h                               ; e8 46 fb
+    call 0859bh                               ; e8 d3 f9
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
-    add bx, strict byte 00004h                ; 83 c3 04
+    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
+    add di, strict byte 00004h                ; 83 c7 04
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, di                                ; 89 fa
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea ax, [di+0010ch]                       ; 8d 85 0c 01
+    lea ax, [bx+0010ch]                       ; 8d 87 0c 01
     cwd                                       ; 99
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
+    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, di                                ; 89 fa
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
@@ -12569,12 +12985,12 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea ax, [di+00100h]                       ; 8d 85 00 01
+    lea ax, [bx+00100h]                       ; 8d 87 00 01
     cwd                                       ; 99
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
+    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, di                                ; 89 fa
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
@@ -12582,23 +12998,23 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     out DX, eax                               ; 66 ef
     mov ax, si                                ; 89 f0
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 08245h                               ; e8 da fa
+    call 0859bh                               ; e8 67 f9
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
-    add bx, strict byte 00004h                ; 83 c3 04
+    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
+    add di, strict byte 00004h                ; 83 c7 04
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, di                                ; 89 fa
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea ax, [di+00104h]                       ; 8d 85 04 01
+    lea ax, [bx+00104h]                       ; 8d 87 04 01
     cwd                                       ; 99
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
+    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, di                                ; 89 fa
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
@@ -12614,12 +13030,12 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea ax, [di+00114h]                       ; 8d 85 14 01
+    lea ax, [bx+00114h]                       ; 8d 87 14 01
     cwd                                       ; 99
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
+    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, di                                ; 89 fa
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
@@ -12635,12 +13051,12 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea ax, [di+00110h]                       ; 8d 85 10 01
+    lea ax, [bx+00110h]                       ; 8d 87 10 01
     cwd                                       ; 99
     mov es, [bp-00ah]                         ; 8e 46 f6
-    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
+    mov di, word [es:si+00260h]               ; 26 8b bc 60 02
     mov cx, dx                                ; 89 d1
-    mov dx, bx                                ; 89 da
+    mov dx, di                                ; 89 fa
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
@@ -12656,7 +13072,7 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    lea ax, [di+00130h]                       ; 8d 85 30 01
+    lea ax, [bx+00130h]                       ; 8d 87 30 01
     cwd                                       ; 99
     mov es, [bp-00ah]                         ; 8e 46 f6
     mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
@@ -12687,46 +13103,50 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
- at ahci_read_sectors:                          ; 0xf8866 LB 0x93
+ at ahci_read_sectors:                          ; 0xf8d2f LB 0xa6
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
     push di                                   ; 57
-    les bx, [bp+004h]                         ; c4 5e 04
-    movzx bx, byte [es:bx+008h]               ; 26 0f b6 5f 08
-    sub bx, strict byte 0000ch                ; 83 eb 0c
-    cmp bx, strict byte 00004h                ; 83 fb 04
-    jbe short 0888ah                          ; 76 0f
-    push bx                                   ; 53
-    push 00c66h                               ; 68 66 0c
-    push 00c78h                               ; 68 78 0c
+    push ax                                   ; 50
+    les di, [bp+004h]                         ; c4 7e 04
+    movzx di, byte [es:di+00ch]               ; 26 0f b6 7d 0c
+    sub di, strict byte 0000ch                ; 83 ef 0c
+    cmp di, strict byte 00004h                ; 83 ff 04
+    jbe short 08d54h                          ; 76 0f
+    push di                                   ; 57
+    push 00c62h                               ; 68 62 0c
+    push 00c74h                               ; 68 74 0c
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 eb 90
+    call 01972h                               ; e8 21 8c
     add sp, strict byte 00008h                ; 83 c4 08
-    les di, [bp+004h]                         ; c4 7e 04
-    mov dx, word [es:di+001eeh]               ; 26 8b 95 ee 01
-    xor ax, ax                                ; 31 c0
-    call 08139h                               ; e8 a2 f8
+    xor bx, bx                                ; 31 db
+    les si, [bp+004h]                         ; c4 76 04
+    mov dx, word [es:si+00232h]               ; 26 8b 94 32 02
+    shr eax, 010h                             ; 66 c1 e8 10
+    mov es, dx                                ; 8e c2
+    mov word [es:bx+00268h], ax               ; 26 89 87 68 02
     mov es, [bp+006h]                         ; 8e 46 06
-    add bx, di                                ; 01 fb
-    movzx bx, byte [es:bx+001e9h]             ; 26 0f b6 9f e9 01
-    mov si, di                                ; 89 fe
-    mov dx, word [es:si+001eeh]               ; 26 8b 94 ee 01
+    add di, si                                ; 01 f7
+    movzx bx, byte [es:di+0022dh]             ; 26 0f b6 9d 2d 02
+    mov di, si                                ; 89 f7
+    mov dx, word [es:di+00232h]               ; 26 8b 95 32 02
     xor ax, ax                                ; 31 c0
-    call 08660h                               ; e8 b2 fd
+    call 08ae5h                               ; e8 65 fd
     mov bx, strict word 00025h                ; bb 25 00
-    mov ax, di                                ; 89 f8
+    mov ax, si                                ; 89 f0
     mov dx, word [bp+006h]                    ; 8b 56 06
-    call 08338h                               ; e8 7f fa
-    mov bx, ax                                ; 89 c3
+    call 08704h                               ; e8 79 f9
+    mov word [bp-006h], ax                    ; 89 46 fa
     mov es, [bp+006h]                         ; 8e 46 06
-    mov ax, word [es:di+00ah]                 ; 26 8b 45 0a
-    mov word [es:si+014h], ax                 ; 26 89 44 14
+    mov bx, si                                ; 89 f3
+    mov ax, word [es:bx+00eh]                 ; 26 8b 47 0e
+    mov word [es:bx+018h], ax                 ; 26 89 47 18
     mov cx, ax                                ; 89 c1
     sal cx, 009h                              ; c1 e1 09
     shr cx, 1                                 ; d1 e9
-    mov di, word [es:di+004h]                 ; 26 8b 7d 04
-    mov ax, word [es:si+006h]                 ; 26 8b 44 06
+    mov di, word [es:di+008h]                 ; 26 8b 7d 08
+    mov ax, word [es:bx+00ah]                 ; 26 8b 47 0a
     mov si, di                                ; 89 fe
     mov dx, ax                                ; 89 c2
     mov es, ax                                ; 8e c0
@@ -12734,60 +13154,67 @@ ahci_port_init_:                             ; 0xf8660 LB 0x206
     mov ds, dx                                ; 8e da
     rep movsw                                 ; f3 a5
     pop DS                                    ; 1f
-    les si, [bp+004h]                         ; c4 76 04
-    mov dx, word [es:si+001eeh]               ; 26 8b 94 ee 01
-    xor ax, ax                                ; 31 c0
-    call 08150h                               ; e8 62 f8
-    mov ax, bx                                ; 89 d8
+    xor bx, bx                                ; 31 db
+    les di, [bp+004h]                         ; c4 7e 04
+    mov es, [es:di+00232h]                    ; 26 8e 85 32 02
+    mov ax, word [es:bx+00268h]               ; 26 8b 87 68 02
+    sal eax, 010h                             ; 66 c1 e0 10
+    mov ax, word [bp-006h]                    ; 8b 46 fa
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00004h                               ; c2 04 00
- at ahci_write_sectors:                         ; 0xf88f9 LB 0x72
+ at ahci_write_sectors:                         ; 0xf8dd5 LB 0x84
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
+    push di                                   ; 57
     mov si, word [bp+004h]                    ; 8b 76 04
     mov cx, word [bp+006h]                    ; 8b 4e 06
     mov es, cx                                ; 8e c1
-    movzx bx, byte [es:si+008h]               ; 26 0f b6 5c 08
-    sub bx, strict byte 0000ch                ; 83 eb 0c
-    cmp bx, strict byte 00004h                ; 83 fb 04
-    jbe short 08921h                          ; 76 0f
-    push bx                                   ; 53
-    push 00c97h                               ; 68 97 0c
-    push 00c78h                               ; 68 78 0c
+    movzx dx, byte [es:si+00ch]               ; 26 0f b6 54 0c
+    sub dx, strict byte 0000ch                ; 83 ea 0c
+    cmp dx, strict byte 00004h                ; 83 fa 04
+    jbe short 08dfeh                          ; 76 0f
+    push dx                                   ; 52
+    push 00c93h                               ; 68 93 0c
+    push 00c74h                               ; 68 74 0c
     push strict byte 00007h                   ; 6a 07
-    call 01972h                               ; e8 54 90
+    call 01972h                               ; e8 77 8b
     add sp, strict byte 00008h                ; 83 c4 08
+    xor bx, bx                                ; 31 db
     mov es, cx                                ; 8e c1
-    mov dx, word [es:si+001eeh]               ; 26 8b 94 ee 01
-    xor ax, ax                                ; 31 c0
-    call 08139h                               ; e8 0c f8
+    mov di, word [es:si+00232h]               ; 26 8b bc 32 02
+    shr eax, 010h                             ; 66 c1 e8 10
+    mov es, di                                ; 8e c7
+    mov word [es:bx+00268h], ax               ; 26 89 87 68 02
     mov es, cx                                ; 8e c1
-    add bx, si                                ; 01 f3
-    movzx bx, byte [es:bx+001e9h]             ; 26 0f b6 9f e9 01
-    mov dx, word [es:si+001eeh]               ; 26 8b 94 ee 01
+    mov bx, si                                ; 89 f3
+    add bx, dx                                ; 01 d3
+    movzx bx, byte [es:bx+0022dh]             ; 26 0f b6 9f 2d 02
+    mov dx, word [es:si+00232h]               ; 26 8b 94 32 02
     xor ax, ax                                ; 31 c0
-    call 08660h                               ; e8 1f fd
+    call 08ae5h                               ; e8 bd fc
     mov bx, strict word 00035h                ; bb 35 00
     mov ax, si                                ; 89 f0
     mov dx, cx                                ; 89 ca
-    call 08338h                               ; e8 ed f9
-    mov bx, ax                                ; 89 c3
+    call 08704h                               ; e8 d2 f8
+    mov dx, ax                                ; 89 c2
     mov es, cx                                ; 8e c1
-    mov dx, word [es:si+00ah]                 ; 26 8b 54 0a
-    mov word [es:si+014h], dx                 ; 26 89 54 14
-    mov dx, word [es:si+001eeh]               ; 26 8b 94 ee 01
-    xor ax, ax                                ; 31 c0
-    call 08150h                               ; e8 ef f7
-    mov ax, bx                                ; 89 d8
-    lea sp, [bp-002h]                         ; 8d 66 fe
+    mov ax, word [es:si+00eh]                 ; 26 8b 44 0e
+    mov word [es:si+018h], ax                 ; 26 89 44 18
+    xor bx, bx                                ; 31 db
+    mov es, [es:si+00232h]                    ; 26 8e 84 32 02
+    mov ax, word [es:bx+00268h]               ; 26 8b 87 68 02
+    sal eax, 010h                             ; 66 c1 e0 10
+    mov ax, dx                                ; 89 d0
+    lea sp, [bp-004h]                         ; 8d 66 fc
+    pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00004h                               ; c2 04 00
-ahci_cmd_packet_:                            ; 0xf896b LB 0x173
+ahci_cmd_packet_:                            ; 0xf8e59 LB 0x183
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -12799,98 +13226,100 @@ ahci_cmd_packet_:                            ; 0xf896b LB 0x173
     mov word [bp-010h], cx                    ; 89 4e f0
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 e6 8c
+    call 0166ch                               ; e8 f8 87
     mov si, 00122h                            ; be 22 01
     mov word [bp-008h], ax                    ; 89 46 f8
     cmp byte [bp+00ah], 002h                  ; 80 7e 0a 02
-    jne short 089b1h                          ; 75 1f
-    mov bx, 00da2h                            ; bb a2 0d
+    jne short 08e9fh                          ; 75 1f
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 94 8f
-    push 00caah                               ; 68 aa 0c
-    push 00cbah                               ; 68 ba 0c
+    call 01931h                               ; e8 a6 8a
+    push 00ca6h                               ; 68 a6 0c
+    push 00cb6h                               ; 68 b6 0c
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 ca 8f
+    call 01972h                               ; e8 dc 8a
     add sp, strict byte 00006h                ; 83 c4 06
     mov ax, strict word 00001h                ; b8 01 00
-    jmp near 08ad5h                           ; e9 24 01
+    jmp near 08fd3h                           ; e9 34 01
     test byte [bp+004h], 001h                 ; f6 46 04 01
-    jne short 089abh                          ; 75 f4
+    jne short 08e99h                          ; 75 f4
     mov ax, word [bp+006h]                    ; 8b 46 06
     mov dx, word [bp+008h]                    ; 8b 56 08
     mov cx, strict word 00008h                ; b9 08 00
     sal ax, 1                                 ; d1 e0
     rcl dx, 1                                 ; d1 d2
-    loop 089c0h                               ; e2 fa
+    loop 08eaeh                               ; e2 fa
     mov es, [bp-008h]                         ; 8e 46 f8
     mov word [es:si], ax                      ; 26 89 04
     mov word [es:si+002h], dx                 ; 26 89 54 02
+    db  066h, 026h, 0c7h, 044h, 004h, 000h, 000h, 000h, 000h
+    ; mov dword [es:si+004h], strict dword 000000000h ; 66 26 c7 44 04 00 00 00 00
     mov ax, word [bp+00ch]                    ; 8b 46 0c
-    mov word [es:si+004h], ax                 ; 26 89 44 04
+    mov word [es:si+008h], ax                 ; 26 89 44 08
     mov ax, word [bp+00eh]                    ; 8b 46 0e
-    mov word [es:si+006h], ax                 ; 26 89 44 06
-    mov bx, word [es:si+00ch]                 ; 26 8b 5c 0c
+    mov word [es:si+00ah], ax                 ; 26 89 44 0a
+    mov bx, word [es:si+010h]                 ; 26 8b 5c 10
     mov ax, word [bp+006h]                    ; 8b 46 06
     mov dx, word [bp+008h]                    ; 8b 56 08
     xor cx, cx                                ; 31 c9
-    call 09740h                               ; e8 53 0d
-    mov word [es:si+00ah], ax                 ; 26 89 44 0a
+    call 09cd0h                               ; e8 ec 0d
+    mov word [es:si+00eh], ax                 ; 26 89 44 0e
     xor di, di                                ; 31 ff
-    mov ax, word [es:si+001eeh]               ; 26 8b 84 ee 01
+    mov ax, word [es:si+00232h]               ; 26 8b 84 32 02
     mov word [bp-00ah], ax                    ; 89 46 f6
     mov word [bp-00eh], di                    ; 89 7e f2
     mov word [bp-00ch], ax                    ; 89 46 f4
     sub word [bp-014h], strict byte 0000ch    ; 83 6e ec 0c
-    xor ax, ax                                ; 31 c0
-    mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 08139h                               ; e8 2c f7
+    shr eax, 010h                             ; 66 c1 e8 10
+    mov es, [bp-00ah]                         ; 8e 46 f6
+    mov word [es:di+00268h], ax               ; 26 89 85 68 02
     mov es, [bp-008h]                         ; 8e 46 f8
     mov bx, word [bp-014h]                    ; 8b 5e ec
     add bx, si                                ; 01 f3
-    movzx bx, byte [es:bx+001e9h]             ; 26 0f b6 9f e9 01
-    mov dx, word [es:si+001eeh]               ; 26 8b 94 ee 01
+    movzx bx, byte [es:bx+0022dh]             ; 26 0f b6 9f 2d 02
+    mov dx, word [es:si+00232h]               ; 26 8b 94 32 02
     xor ax, ax                                ; 31 c0
-    call 08660h                               ; e8 3b fc
+    call 08ae5h                               ; e8 c5 fb
     movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
     push ax                                   ; 50
     mov bx, word [bp-012h]                    ; 8b 5e ee
     mov cx, word [bp-010h]                    ; 8b 4e f0
     mov ax, 000c0h                            ; b8 c0 00
     mov dx, word [bp-00ah]                    ; 8b 56 f6
-    call 097b7h                               ; e8 7e 0d
+    call 09d67h                               ; e8 33 0e
     mov es, [bp-008h]                         ; 8e 46 f8
-    mov word [es:si+014h], di                 ; 26 89 7c 14
-    mov word [es:si+016h], di                 ; 26 89 7c 16
     mov word [es:si+018h], di                 ; 26 89 7c 18
-    mov ax, word [es:si+01ah]                 ; 26 8b 44 1a
+    mov word [es:si+01ah], di                 ; 26 89 7c 1a
+    mov word [es:si+01ch], di                 ; 26 89 7c 1c
+    mov ax, word [es:si+01eh]                 ; 26 8b 44 1e
     test ax, ax                               ; 85 c0
-    je short 08a77h                           ; 74 27
+    je short 08f72h                           ; 74 27
     dec ax                                    ; 48
     mov es, [bp-00ah]                         ; 8e 46 f6
     mov word [es:di+0010ch], ax               ; 26 89 85 0c 01
     mov word [es:di+0010eh], di               ; 26 89 bd 0e 01
-    mov ax, word [es:di+00264h]               ; 26 8b 85 64 02
-    mov dx, word [es:di+00266h]               ; 26 8b 95 66 02
-    mov word [es:di+00100h], ax               ; 26 89 85 00 01
-    mov word [es:di+00102h], dx               ; 26 89 95 02 01
+    mov dx, word [es:di+00264h]               ; 26 8b 95 64 02
+    mov ax, word [es:di+00266h]               ; 26 8b 85 66 02
+    mov word [es:di+00100h], dx               ; 26 89 95 00 01
+    mov word [es:di+00102h], ax               ; 26 89 85 02 01
     inc byte [es:di+00263h]                   ; 26 fe 85 63 02
     mov bx, 000a0h                            ; bb a0 00
     mov ax, si                                ; 89 f0
     mov dx, word [bp-008h]                    ; 8b 56 f8
-    call 08338h                               ; e8 b6 f8
+    call 08704h                               ; e8 87 f7
     les bx, [bp-00eh]                         ; c4 5e f2
     mov ax, word [es:bx+004h]                 ; 26 8b 47 04
     mov dx, word [es:bx+006h]                 ; 26 8b 57 06
     mov es, [bp-008h]                         ; 8e 46 f8
-    mov word [es:si+016h], ax                 ; 26 89 44 16
-    mov word [es:si+018h], dx                 ; 26 89 54 18
-    mov bx, word [es:si+016h]                 ; 26 8b 5c 16
+    mov word [es:si+01ah], ax                 ; 26 89 44 1a
+    mov word [es:si+01ch], dx                 ; 26 89 54 1c
+    mov bx, word [es:si+01ah]                 ; 26 8b 5c 1a
     mov cx, dx                                ; 89 d1
     shr cx, 1                                 ; d1 e9
     rcr bx, 1                                 ; d1 db
-    mov di, word [es:si+004h]                 ; 26 8b 7c 04
-    mov ax, word [es:si+006h]                 ; 26 8b 44 06
+    mov di, word [es:si+008h]                 ; 26 8b 7c 08
+    mov ax, word [es:si+00ah]                 ; 26 8b 44 0a
     mov cx, bx                                ; 89 d9
     mov si, di                                ; 89 fe
     mov dx, ax                                ; 89 c2
@@ -12899,48 +13328,48 @@ ahci_cmd_packet_:                            ; 0xf896b LB 0x173
     mov ds, dx                                ; 8e da
     rep movsw                                 ; f3 a5
     pop DS                                    ; 1f
-    mov ax, word [bp-00eh]                    ; 8b 46 f2
-    mov dx, word [bp-00ch]                    ; 8b 56 f4
-    call 08150h                               ; e8 8f f6
     les bx, [bp-00eh]                         ; c4 5e f2
+    mov ax, word [es:bx+00268h]               ; 26 8b 87 68 02
+    sal eax, 010h                             ; 66 c1 e0 10
+    mov es, [bp-00ch]                         ; 8e 46 f4
     mov ax, word [es:bx+006h]                 ; 26 8b 47 06
     or ax, word [es:bx+004h]                  ; 26 0b 47 04
-    jne short 08ad3h                          ; 75 05
+    jne short 08fd1h                          ; 75 05
     mov ax, strict word 00004h                ; b8 04 00
-    jmp short 08ad5h                          ; eb 02
+    jmp short 08fd3h                          ; eb 02
     xor ax, ax                                ; 31 c0
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 0000ch                               ; c2 0c 00
-ahci_port_detect_device_:                    ; 0xf8ade LB 0x451
+ahci_port_detect_device_:                    ; 0xf8fdc LB 0x4b1
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push cx                                   ; 51
     push si                                   ; 56
     push di                                   ; 57
-    sub sp, 00220h                            ; 81 ec 20 02
+    sub sp, 00224h                            ; 81 ec 24 02
     mov si, ax                                ; 89 c6
     mov word [bp-012h], dx                    ; 89 56 ee
-    mov byte [bp-008h], bl                    ; 88 5e f8
+    mov byte [bp-00ah], bl                    ; 88 5e f6
     movzx di, bl                              ; 0f b6 fb
     mov bx, di                                ; 89 fb
-    call 08660h                               ; e8 68 fb
+    call 08ae5h                               ; e8 ef fa
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 6b 8b
+    call 0166ch                               ; e8 6d 86
     mov word [bp-010h], 00122h                ; c7 46 f0 22 01
     mov word [bp-00eh], ax                    ; 89 46 f2
     sal di, 007h                              ; c1 e7 07
-    mov word [bp-020h], di                    ; 89 7e e0
+    mov word [bp-024h], di                    ; 89 7e dc
     lea ax, [di+0012ch]                       ; 8d 85 2c 01
     cwd                                       ; 99
-    mov di, ax                                ; 89 c7
-    mov bx, dx                                ; 89 d3
+    mov bx, ax                                ; 89 c3
+    mov di, dx                                ; 89 d7
     mov es, [bp-012h]                         ; 8e 46 ee
     mov dx, word [es:si+00260h]               ; 26 8b 94 60 02
-    mov cx, bx                                ; 89 d9
+    mov cx, di                                ; 89 f9
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
@@ -12958,8 +13387,8 @@ ahci_port_detect_device_:                    ; 0xf8ade LB 0x451
     out DX, eax                               ; 66 ef
     mov es, [bp-012h]                         ; 8e 46 ee
     mov dx, word [es:si+00260h]               ; 26 8b 94 60 02
-    mov ax, di                                ; 89 f8
-    mov cx, bx                                ; 89 d9
+    mov ax, bx                                ; 89 d8
+    mov cx, di                                ; 89 f9
     xchg cx, ax                               ; 91
     sal eax, 010h                             ; 66 c1 e0 10
     db  08bh, 0c1h
@@ -12975,7 +13404,7 @@ ahci_port_detect_device_:                    ; 0xf8ade LB 0x451
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    mov ax, word [bp-020h]                    ; 8b 46 e0
+    mov ax, word [bp-024h]                    ; 8b 46 dc
     add ax, 00128h                            ; 05 28 01
     cwd                                       ; 99
     mov es, [bp-012h]                         ; 8e 46 ee
@@ -12998,12 +13427,12 @@ ahci_port_detect_device_:                    ; 0xf8ade LB 0x451
     push strict byte 00000h                   ; 6a 00
     mov bx, strict word 0000fh                ; bb 0f 00
     xor cx, cx                                ; 31 c9
-    call 0822ah                               ; e8 7f f6
+    call 08580h                               ; e8 d7 f4
     test ax, ax                               ; 85 c0
-    je near 08f27h                            ; 0f 84 76 03
-    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    je near 09485h                            ; 0f 84 d6 03
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
     sal ax, 007h                              ; c1 e0 07
-    mov word [bp-016h], ax                    ; 89 46 ea
+    mov word [bp-018h], ax                    ; 89 46 e8
     add ax, 00128h                            ; 05 28 01
     cwd                                       ; 99
     mov es, [bp-012h]                         ; 8e 46 ee
@@ -13024,22 +13453,22 @@ ahci_port_detect_device_:                    ; 0xf8ade LB 0x451
     shr eax, 010h                             ; 66 c1 e8 10
     xchg dx, ax                               ; 92
     mov di, ax                                ; 89 c7
-    mov word [bp-01ah], dx                    ; 89 56 e6
+    mov word [bp-022h], dx                    ; 89 56 de
     push strict byte 00000h                   ; 6a 00
     mov bx, strict word 0000fh                ; bb 0f 00
     xor cx, cx                                ; 31 c9
-    call 0822ah                               ; e8 33 f6
+    call 08580h                               ; e8 8b f4
     cmp ax, strict word 00001h                ; 3d 01 00
-    je short 08bb1h                           ; 74 b5
+    je short 090afh                           ; 74 b5
     push strict byte 00000h                   ; 6a 00
     mov bx, strict word 0000fh                ; bb 0f 00
     xor cx, cx                                ; 31 c9
     mov ax, di                                ; 89 f8
-    mov dx, word [bp-01ah]                    ; 8b 56 e6
-    call 0822ah                               ; e8 1f f6
+    mov dx, word [bp-022h]                    ; 8b 56 de
+    call 08580h                               ; e8 77 f4
     cmp ax, strict word 00003h                ; 3d 03 00
-    jne near 08f27h                           ; 0f 85 15 03
-    mov ax, word [bp-016h]                    ; 8b 46 ea
+    jne near 09485h                           ; 0f 85 75 03
+    mov ax, word [bp-018h]                    ; 8b 46 e8
     add ax, 00130h                            ; 05 30 01
     cwd                                       ; 99
     mov es, [bp-012h]                         ; 8e 46 ee
@@ -13062,18 +13491,37 @@ ahci_port_detect_device_:                    ; 0xf8ade LB 0x451
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
     les bx, [bp-010h]                         ; c4 5e f0
-    mov al, byte [es:bx+001edh]               ; 26 8a 87 ed 01
-    mov byte [bp-00ch], al                    ; 88 46 f4
+    mov al, byte [es:bx+00231h]               ; 26 8a 87 31 02
+    mov byte [bp-008h], al                    ; 88 46 f8
     cmp AL, strict byte 004h                  ; 3c 04
-    jnc near 08f27h                           ; 0f 83 cf 02
-    mov dx, word [bp-016h]                    ; 8b 56 ea
-    add dx, 00118h                            ; 81 c2 18 01
+    jnc near 09485h                           ; 0f 83 2f 03
+    mov ax, word [bp-018h]                    ; 8b 46 e8
+    add ax, 00118h                            ; 05 18 01
     mov es, [bp-012h]                         ; 8e 46 ee
-    mov ax, word [es:si+00260h]               ; 26 8b 84 60 02
-    mov bx, strict word 00010h                ; bb 10 00
+    mov bx, word [es:si+00260h]               ; 26 8b 9c 60 02
     xor cx, cx                                ; 31 c9
-    call 08167h                               ; e8 f8 f4
-    mov ax, word [bp-016h]                    ; 8b 46 ea
+    mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    add bx, strict byte 00004h                ; 83 c3 04
+    mov dx, bx                                ; 89 da
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    or AL, strict byte 010h                   ; 0c 10
+    mov cx, dx                                ; 89 d1
+    mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    mov ax, word [bp-018h]                    ; 8b 46 e8
     add ax, 00124h                            ; 05 24 01
     cwd                                       ; 99
     mov es, [bp-012h]                         ; 8e 46 ee
@@ -13093,235 +13541,250 @@ ahci_port_detect_device_:                    ; 0xf8ade LB 0x451
     ; mov dx, ax                                ; 8b d0
     shr eax, 010h                             ; 66 c1 e8 10
     xchg dx, ax                               ; 92
-    mov cl, byte [bp-00ch]                    ; 8a 4e f4
+    mov di, ax                                ; 89 c7
+    mov ax, dx                                ; 89 d0
+    mov cl, byte [bp-008h]                    ; 8a 4e f8
     add cl, 00ch                              ; 80 c1 0c
     test dx, dx                               ; 85 d2
-    jne near 08e83h                           ; 0f 85 d8 01
-    cmp ax, 00101h                            ; 3d 01 01
-    jne near 08e83h                           ; 0f 85 d1 01
+    jne near 093dbh                           ; 0f 85 0d 02
+    cmp di, 00101h                            ; 81 ff 01 01
+    jne near 093dbh                           ; 0f 85 05 02
     les bx, [bp-010h]                         ; c4 5e f0
+    db  066h, 026h, 0c7h, 047h, 004h, 000h, 000h, 000h, 000h
+    ; mov dword [es:bx+004h], strict dword 000000000h ; 66 26 c7 47 04 00 00 00 00
     db  066h, 026h, 0c7h, 007h, 000h, 000h, 000h, 000h
     ; mov dword [es:bx], strict dword 000000000h ; 66 26 c7 07 00 00 00 00
-    lea dx, [bp-00226h]                       ; 8d 96 da fd
-    mov word [es:bx+004h], dx                 ; 26 89 57 04
-    mov [es:bx+006h], ss                      ; 26 8c 57 06
-    db  066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 002h
-    ; mov dword [es:bx+00ah], strict dword 002000001h ; 66 26 c7 47 0a 01 00 00 02
+    lea dx, [bp-0022ah]                       ; 8d 96 d6 fd
+    mov word [es:bx+008h], dx                 ; 26 89 57 08
+    mov [es:bx+00ah], ss                      ; 26 8c 57 0a
+    db  066h, 026h, 0c7h, 047h, 00eh, 001h, 000h, 000h, 002h
+    ; mov dword [es:bx+00eh], strict dword 002000001h ; 66 26 c7 47 0e 01 00 00 02
     mov bx, 000ech                            ; bb ec 00
     mov ax, word [bp-010h]                    ; 8b 46 f0
     mov dx, es                                ; 8c c2
-    call 08338h                               ; e8 5b f6
-    mov byte [bp-00ah], cl                    ; 88 4e f6
-    test byte [bp-00226h], 080h               ; f6 86 da fd 80
+    call 08704h                               ; e8 fa f4
+    mov byte [bp-00ch], cl                    ; 88 4e f4
+    test byte [bp-0022ah], 080h               ; f6 86 d6 fd 80
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
     xor ah, ah                                ; 30 e4
-    mov dl, al                                ; 88 c2
-    mov ax, word [bp-00224h]                  ; 8b 86 dc fd
-    mov word [bp-018h], ax                    ; 89 46 e8
-    mov ax, word [bp-00220h]                  ; 8b 86 e0 fd
-    mov word [bp-01eh], ax                    ; 89 46 e2
-    mov ax, word [bp-0021ah]                  ; 8b 86 e6 fd
-    mov word [bp-01ch], ax                    ; 89 46 e4
-    mov ax, word [bp-001aeh]                  ; 8b 86 52 fe
-    mov word [bp-014h], ax                    ; 89 46 ec
-    mov di, word [bp-001ach]                  ; 8b be 54 fe
+    mov dx, word [bp-00228h]                  ; 8b 96 d8 fd
+    mov word [bp-020h], dx                    ; 89 56 e0
+    mov dx, word [bp-00224h]                  ; 8b 96 dc fd
+    mov word [bp-01ch], dx                    ; 89 56 e4
+    mov dx, word [bp-0021eh]                  ; 8b 96 e2 fd
+    mov word [bp-01eh], dx                    ; 89 56 e2
+    mov dx, word [bp-001b2h]                  ; 8b 96 4e fe
+    mov word [bp-01ah], dx                    ; 89 56 e6
+    mov di, word [bp-001b0h]                  ; 8b be 50 fe
+    mov dword [bp-016h], strict dword 000000000h ; 66 c7 46 ea 00 00 00 00
     cmp di, 00fffh                            ; 81 ff ff 0f
-    jne short 08d22h                          ; 75 10
-    cmp ax, strict word 0ffffh                ; 3d ff ff
-    jne short 08d22h                          ; 75 0b
-    mov ax, word [bp-0015eh]                  ; 8b 86 a2 fe
-    mov word [bp-014h], ax                    ; 89 46 ec
-    mov di, word [bp-0015ch]                  ; 8b be a4 fe
-    movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
+    jne short 09263h                          ; 75 1e
+    cmp dx, strict byte 0ffffh                ; 83 fa ff
+    jne short 09263h                          ; 75 19
+    mov dx, word [bp-0015ch]                  ; 8b 96 a4 fe
+    mov word [bp-014h], dx                    ; 89 56 ec
+    mov dx, word [bp-0015eh]                  ; 8b 96 a2 fe
+    mov word [bp-016h], dx                    ; 89 56 ea
+    mov di, word [bp-00160h]                  ; 8b be a0 fe
+    mov dx, word [bp-00162h]                  ; 8b 96 9e fe
+    mov word [bp-01ah], dx                    ; 89 56 e6
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
     mov es, [bp-00eh]                         ; 8e 46 f2
     add bx, word [bp-010h]                    ; 03 5e f0
-    mov al, byte [bp-008h]                    ; 8a 46 f8
-    mov byte [es:bx+001e9h], al               ; 26 88 87 e9 01
-    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    mov ah, byte [bp-00ah]                    ; 8a 66 f6
+    mov byte [es:bx+0022dh], ah               ; 26 88 a7 2d 02
+    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    imul dx, dx, strict byte 0001ch           ; 6b d2 1c
     mov si, word [bp-010h]                    ; 8b 76 f0
-    add si, ax                                ; 01 c6
-    mov word [es:si+01eh], 0ff05h             ; 26 c7 44 1e 05 ff
-    mov byte [es:si+020h], dl                 ; 26 88 54 20
-    mov byte [es:si+021h], 000h               ; 26 c6 44 21 00
-    mov word [es:si+024h], 00200h             ; 26 c7 44 24 00 02
-    mov byte [es:si+023h], 001h               ; 26 c6 44 23 01
+    add si, dx                                ; 01 d6
+    mov word [es:si+022h], 0ff05h             ; 26 c7 44 22 05 ff
+    mov byte [es:si+024h], al                 ; 26 88 44 24
+    mov byte [es:si+025h], 000h               ; 26 c6 44 25 00
+    mov word [es:si+028h], 00200h             ; 26 c7 44 28 00 02
+    mov byte [es:si+027h], 001h               ; 26 c6 44 27 01
     mov ax, word [bp-014h]                    ; 8b 46 ec
-    mov word [es:si+032h], ax                 ; 26 89 44 32
-    mov word [es:si+034h], di                 ; 26 89 7c 34
-    mov ax, word [bp-01eh]                    ; 8b 46 e2
-    mov word [es:si+02ch], ax                 ; 26 89 44 2c
-    mov ax, word [bp-018h]                    ; 8b 46 e8
-    mov word [es:si+02eh], ax                 ; 26 89 44 2e
+    mov word [es:si+03ch], ax                 ; 26 89 44 3c
+    mov ax, word [bp-016h]                    ; 8b 46 ea
+    mov word [es:si+03ah], ax                 ; 26 89 44 3a
+    mov word [es:si+038h], di                 ; 26 89 7c 38
+    mov ax, word [bp-01ah]                    ; 8b 46 e6
+    mov word [es:si+036h], ax                 ; 26 89 44 36
     mov ax, word [bp-01ch]                    ; 8b 46 e4
     mov word [es:si+030h], ax                 ; 26 89 44 30
-    mov al, byte [bp-00ch]                    ; 8a 46 f4
+    mov ax, word [bp-020h]                    ; 8b 46 e0
+    mov word [es:si+032h], ax                 ; 26 89 44 32
+    mov ax, word [bp-01eh]                    ; 8b 46 e2
+    mov word [es:si+034h], ax                 ; 26 89 44 34
+    mov al, byte [bp-008h]                    ; 8a 46 f8
     cmp AL, strict byte 001h                  ; 3c 01
-    jc short 08d8dh                           ; 72 0c
-    jbe short 08d95h                          ; 76 12
+    jc short 092dch                           ; 72 0c
+    jbe short 092e4h                          ; 76 12
     cmp AL, strict byte 003h                  ; 3c 03
-    je short 08d9dh                           ; 74 16
+    je short 092ech                           ; 74 16
     cmp AL, strict byte 002h                  ; 3c 02
-    je short 08d99h                           ; 74 0e
-    jmp short 08de6h                          ; eb 59
+    je short 092e8h                           ; 74 0e
+    jmp short 09335h                          ; eb 59
     test al, al                               ; 84 c0
-    jne short 08de6h                          ; 75 55
+    jne short 09335h                          ; 75 55
     mov DL, strict byte 040h                  ; b2 40
-    jmp short 08d9fh                          ; eb 0a
+    jmp short 092eeh                          ; eb 0a
     mov DL, strict byte 048h                  ; b2 48
-    jmp short 08d9fh                          ; eb 06
+    jmp short 092eeh                          ; eb 06
     mov DL, strict byte 050h                  ; b2 50
-    jmp short 08d9fh                          ; eb 02
+    jmp short 092eeh                          ; eb 02
     mov DL, strict byte 058h                  ; b2 58
     mov al, dl                                ; 88 d0
     add AL, strict byte 007h                  ; 04 07
     movzx bx, al                              ; 0f b6 d8
     mov ax, bx                                ; 89 d8
-    call 016ach                               ; e8 01 89
+    call 016ach                               ; e8 b2 83
     test al, al                               ; 84 c0
-    je short 08de6h                           ; 74 37
+    je short 09335h                           ; 74 37
     mov al, dl                                ; 88 d0
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     xor ah, ah                                ; 30 e4
-    call 016ach                               ; e8 f4 88
+    call 016ach                               ; e8 a5 83
     xor ah, ah                                ; 30 e4
     mov si, ax                                ; 89 c6
     sal si, 008h                              ; c1 e6 08
     movzx ax, dl                              ; 0f b6 c2
-    call 016ach                               ; e8 e7 88
+    call 016ach                               ; e8 98 83
     xor ah, ah                                ; 30 e4
     add ax, si                                ; 01 f0
-    mov word [bp-024h], ax                    ; 89 46 dc
+    mov word [bp-028h], ax                    ; 89 46 d8
     mov al, dl                                ; 88 d0
     add AL, strict byte 002h                  ; 04 02
     xor ah, ah                                ; 30 e4
-    call 016ach                               ; e8 d7 88
+    call 016ach                               ; e8 88 83
     xor ah, ah                                ; 30 e4
-    mov word [bp-026h], ax                    ; 89 46 da
+    mov word [bp-02ah], ax                    ; 89 46 d6
     mov ax, bx                                ; 89 d8
-    call 016ach                               ; e8 cd 88
+    call 016ach                               ; e8 7e 83
     xor ah, ah                                ; 30 e4
-    mov word [bp-022h], ax                    ; 89 46 de
-    jmp short 08df3h                          ; eb 0d
-    mov bx, word [bp-014h]                    ; 8b 5e ec
-    mov cx, di                                ; 89 f9
+    mov word [bp-026h], ax                    ; 89 46 da
+    jmp short 09345h                          ; eb 10
+    push dword [bp-016h]                      ; 66 ff 76 ea
+    push di                                   ; 57
+    push word [bp-01ah]                       ; ff 76 e6
     mov dx, ss                                ; 8c d2
-    lea ax, [bp-026h]                         ; 8d 46 da
-    call 055b6h                               ; e8 c3 c7
-    mov bx, 00da2h                            ; bb a2 0d
+    lea ax, [bp-02ah]                         ; 8d 46 d6
+    call 0588bh                               ; e8 46 c5
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 33 8b
+    call 01931h                               ; e8 e1 85
+    push dword [bp-016h]                      ; 66 ff 76 ea
     push di                                   ; 57
-    push word [bp-014h]                       ; ff 76 ec
-    mov ax, word [bp-022h]                    ; 8b 46 de
-    push ax                                   ; 50
+    push word [bp-01ah]                       ; ff 76 e6
     mov ax, word [bp-026h]                    ; 8b 46 da
     push ax                                   ; 50
-    mov ax, word [bp-024h]                    ; 8b 46 dc
+    mov ax, word [bp-02ah]                    ; 8b 46 d6
     push ax                                   ; 50
-    push dword [bp-01eh]                      ; 66 ff 76 e2
-    push word [bp-018h]                       ; ff 76 e8
-    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    mov ax, word [bp-028h]                    ; 8b 46 d8
     push ax                                   ; 50
-    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    push word [bp-01eh]                       ; ff 76 e2
+    push word [bp-01ch]                       ; ff 76 e4
+    push word [bp-020h]                       ; ff 76 e0
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    push ax                                   ; 50
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     push ax                                   ; 50
-    push 00cdah                               ; 68 da 0c
+    push 00cd6h                               ; 68 d6 0c
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 4b 8b
-    add sp, strict byte 00018h                ; 83 c4 18
-    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
+    call 01972h                               ; e8 f3 85
+    add sp, strict byte 0001ch                ; 83 c4 1c
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
     mov di, word [bp-010h]                    ; 8b 7e f0
     add di, ax                                ; 01 c7
     mov es, [bp-00eh]                         ; 8e 46 f2
-    lea di, [di+026h]                         ; 8d 7d 26
+    lea di, [di+02ah]                         ; 8d 7d 2a
     push DS                                   ; 1e
     push SS                                   ; 16
     pop DS                                    ; 1f
-    lea si, [bp-026h]                         ; 8d 76 da
+    lea si, [bp-02ah]                         ; 8d 76 d6
     movsw                                     ; a5
     movsw                                     ; a5
     movsw                                     ; a5
     pop DS                                    ; 1f
     mov bx, word [bp-010h]                    ; 8b 5e f0
-    mov al, byte [es:bx+0019eh]               ; 26 8a 87 9e 01
-    mov ah, byte [bp-00ch]                    ; 8a 66 f4
+    mov al, byte [es:bx+001e2h]               ; 26 8a 87 e2 01
+    mov ah, byte [bp-008h]                    ; 8a 66 f8
     add ah, 00ch                              ; 80 c4 0c
     movzx bx, al                              ; 0f b6 d8
     add bx, word [bp-010h]                    ; 03 5e f0
-    mov byte [es:bx+0019fh], ah               ; 26 88 a7 9f 01
+    mov byte [es:bx+001e3h], ah               ; 26 88 a7 e3 01
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     mov bx, word [bp-010h]                    ; 8b 5e f0
-    mov byte [es:bx+0019eh], al               ; 26 88 87 9e 01
+    mov byte [es:bx+001e2h], al               ; 26 88 87 e2 01
     mov dx, strict word 00075h                ; ba 75 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 01650h                               ; e8 de 87
+    call 01650h                               ; e8 86 82
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     movzx bx, al                              ; 0f b6 d8
     mov dx, strict word 00075h                ; ba 75 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0165eh                               ; e8 de 87
-    jmp near 08f19h                           ; e9 96 00
+    call 0165eh                               ; e8 86 82
+    jmp near 09477h                           ; e9 9c 00
     cmp dx, 0eb14h                            ; 81 fa 14 eb
-    jne near 08f19h                           ; 0f 85 8e 00
-    cmp ax, 00101h                            ; 3d 01 01
-    jne near 08f19h                           ; 0f 85 87 00
+    jne near 09477h                           ; 0f 85 94 00
+    cmp di, 00101h                            ; 81 ff 01 01
+    jne near 09477h                           ; 0f 85 8c 00
     les bx, [bp-010h]                         ; c4 5e f0
+    db  066h, 026h, 0c7h, 047h, 004h, 000h, 000h, 000h, 000h
+    ; mov dword [es:bx+004h], strict dword 000000000h ; 66 26 c7 47 04 00 00 00 00
     db  066h, 026h, 0c7h, 007h, 000h, 000h, 000h, 000h
     ; mov dword [es:bx], strict dword 000000000h ; 66 26 c7 07 00 00 00 00
-    lea dx, [bp-00226h]                       ; 8d 96 da fd
-    mov word [es:bx+004h], dx                 ; 26 89 57 04
-    mov [es:bx+006h], ss                      ; 26 8c 57 06
-    db  066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 002h
-    ; mov dword [es:bx+00ah], strict dword 002000001h ; 66 26 c7 47 0a 01 00 00 02
+    lea dx, [bp-0022ah]                       ; 8d 96 d6 fd
+    mov word [es:bx+008h], dx                 ; 26 89 57 08
+    mov [es:bx+00ah], ss                      ; 26 8c 57 0a
+    db  066h, 026h, 0c7h, 047h, 00eh, 001h, 000h, 000h, 002h
+    ; mov dword [es:bx+00eh], strict dword 002000001h ; 66 26 c7 47 0e 01 00 00 02
     mov bx, 000a1h                            ; bb a1 00
     mov ax, word [bp-010h]                    ; 8b 46 f0
     mov dx, es                                ; 8c c2
-    call 08338h                               ; e8 7b f4
-    test byte [bp-00226h], 080h               ; f6 86 da fd 80
+    call 08704h                               ; e8 e5 f2
+    test byte [bp-0022ah], 080h               ; f6 86 d6 fd 80
     db  00fh, 095h, 0c0h
     ; setne al                                  ; 0f 95 c0
     xor ah, ah                                ; 30 e4
-    mov dx, ax                                ; 89 c2
-    movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
     mov es, [bp-00eh]                         ; 8e 46 f2
     add bx, word [bp-010h]                    ; 03 5e f0
-    mov al, byte [bp-008h]                    ; 8a 46 f8
-    mov byte [es:bx+001e9h], al               ; 26 88 87 e9 01
-    movzx ax, cl                              ; 0f b6 c1
-    imul ax, ax, strict byte 00018h           ; 6b c0 18
-    mov si, word [bp-010h]                    ; 8b 76 f0
-    add si, ax                                ; 01 c6
-    mov word [es:si+01eh], 00505h             ; 26 c7 44 1e 05 05
-    mov byte [es:si+020h], dl                 ; 26 88 54 20
-    mov word [es:si+024h], 00800h             ; 26 c7 44 24 00 08
+    mov ah, byte [bp-00ah]                    ; 8a 66 f6
+    mov byte [es:bx+0022dh], ah               ; 26 88 a7 2d 02
+    movzx si, cl                              ; 0f b6 f1
+    imul si, si, strict byte 0001ch           ; 6b f6 1c
+    add si, word [bp-010h]                    ; 03 76 f0
+    mov word [es:si+022h], 00505h             ; 26 c7 44 22 05 05
+    mov byte [es:si+024h], al                 ; 26 88 44 24
+    mov word [es:si+028h], 00800h             ; 26 c7 44 28 00 08
     mov bx, word [bp-010h]                    ; 8b 5e f0
-    mov al, byte [es:bx+001afh]               ; 26 8a 87 af 01
-    mov ah, byte [bp-00ch]                    ; 8a 66 f4
+    mov al, byte [es:bx+001f3h]               ; 26 8a 87 f3 01
+    mov ah, byte [bp-008h]                    ; 8a 66 f8
     add ah, 00ch                              ; 80 c4 0c
     movzx bx, al                              ; 0f b6 d8
     add bx, word [bp-010h]                    ; 03 5e f0
-    mov byte [es:bx+001b0h], ah               ; 26 88 a7 b0 01
+    mov byte [es:bx+001f4h], ah               ; 26 88 a7 f4 01
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     mov bx, word [bp-010h]                    ; 8b 5e f0
-    mov byte [es:bx+001afh], al               ; 26 88 87 af 01
-    inc byte [bp-00ch]                        ; fe 46 f4
-    mov al, byte [bp-00ch]                    ; 8a 46 f4
+    mov byte [es:bx+001f3h], al               ; 26 88 87 f3 01
+    inc byte [bp-008h]                        ; fe 46 f8
+    mov al, byte [bp-008h]                    ; 8a 46 f8
     les bx, [bp-010h]                         ; c4 5e f0
-    mov byte [es:bx+001edh], al               ; 26 88 87 ed 01
+    mov byte [es:bx+00231h], al               ; 26 88 87 31 02
     lea sp, [bp-006h]                         ; 8d 66 fa
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
-ahci_mem_alloc_:                             ; 0xf8f2f LB 0x43
+ahci_mem_alloc_:                             ; 0xf948d LB 0x43
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -13331,25 +13794,25 @@ ahci_mem_alloc_:                             ; 0xf8f2f LB 0x43
     push di                                   ; 57
     mov dx, 00413h                            ; ba 13 04
     xor ax, ax                                ; 31 c0
-    call 0166ch                               ; e8 2d 87
+    call 0166ch                               ; e8 cf 81
     test ax, ax                               ; 85 c0
-    je short 08f68h                           ; 74 25
+    je short 094c6h                           ; 74 25
     dec ax                                    ; 48
     mov bx, ax                                ; 89 c3
     xor dx, dx                                ; 31 d2
     mov cx, strict word 0000ah                ; b9 0a 00
     sal ax, 1                                 ; d1 e0
     rcl dx, 1                                 ; d1 d2
-    loop 08f4bh                               ; e2 fa
+    loop 094a9h                               ; e2 fa
     mov si, ax                                ; 89 c6
     mov di, dx                                ; 89 d7
     mov cx, strict word 00004h                ; b9 04 00
     shr di, 1                                 ; d1 ef
     rcr si, 1                                 ; d1 de
-    loop 08f58h                               ; e2 fa
+    loop 094b6h                               ; e2 fa
     mov dx, 00413h                            ; ba 13 04
     xor ax, ax                                ; 31 c0
-    call 0167ah                               ; e8 14 87
+    call 0167ah                               ; e8 b6 81
     mov ax, si                                ; 89 f0
     lea sp, [bp-00ah]                         ; 8d 66 f6
     pop di                                    ; 5f
@@ -13359,7 +13822,7 @@ ahci_mem_alloc_:                             ; 0xf8f2f LB 0x43
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-ahci_hba_init_:                              ; 0xf8f72 LB 0x125
+ahci_hba_init_:                              ; 0xf94d0 LB 0x166
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -13371,9 +13834,9 @@ ahci_hba_init_:                              ; 0xf8f72 LB 0x125
     mov si, ax                                ; 89 c6
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, strict word 00040h                ; b8 40 00
-    call 0166ch                               ; e8 e4 86
+    call 0166ch                               ; e8 86 81
     mov bx, 00122h                            ; bb 22 01
-    mov word [bp-010h], ax                    ; 89 46 f0
+    mov di, ax                                ; 89 c7
     mov ax, strict word 00010h                ; b8 10 00
     xor cx, cx                                ; 31 c9
     mov dx, si                                ; 89 f2
@@ -13388,24 +13851,43 @@ ahci_hba_init_:                              ; 0xf8f72 LB 0x125
     ; mov dx, ax                                ; 8b d0
     shr eax, 010h                             ; 66 c1 e8 10
     xchg dx, ax                               ; 92
-    call 08f2fh                               ; e8 82 ff
-    mov di, ax                                ; 89 c7
+    call 0948dh                               ; e8 83 ff
+    mov word [bp-010h], ax                    ; 89 46 f0
     test ax, ax                               ; 85 c0
-    je near 09076h                            ; 0f 84 c1 00
-    mov es, [bp-010h]                         ; 8e 46 f0
-    mov word [es:bx+001eeh], di               ; 26 89 bf ee 01
-    mov byte [es:bx+001edh], 000h             ; 26 c6 87 ed 01 00
-    xor bx, bx                                ; 31 db
+    je near 09615h                            ; 0f 84 02 01
+    mov ax, word [bp-010h]                    ; 8b 46 f0
     mov es, di                                ; 8e c7
+    mov word [es:bx+00232h], ax               ; 26 89 87 32 02
+    mov byte [es:bx+00231h], 000h             ; 26 c6 87 31 02 00
+    xor bx, bx                                ; 31 db
+    mov es, ax                                ; 8e c0
     mov byte [es:bx+00262h], 0ffh             ; 26 c6 87 62 02 ff
     mov word [es:bx+00260h], si               ; 26 89 b7 60 02
     db  066h, 026h, 0c7h, 087h, 064h, 002h, 000h, 0c0h, 00ch, 000h
     ; mov dword [es:bx+00264h], strict dword 0000cc000h ; 66 26 c7 87 64 02 00 c0 0c 00
-    mov bx, strict word 00001h                ; bb 01 00
+    mov ax, strict word 00004h                ; b8 04 00
     xor cx, cx                                ; 31 c9
-    mov dx, strict word 00004h                ; ba 04 00
-    mov ax, si                                ; 89 f0
-    call 08167h                               ; e8 7e f1
+    mov dx, si                                ; 89 f2
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    lea bx, [si+004h]                         ; 8d 5c 04
+    mov dx, bx                                ; 89 da
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    or AL, strict byte 001h                   ; 0c 01
+    mov cx, dx                                ; 89 d1
+    mov dx, bx                                ; 89 da
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
     mov ax, strict word 00004h                ; b8 04 00
     xor cx, cx                                ; 31 c9
     mov dx, si                                ; 89 f2
@@ -13422,7 +13904,7 @@ ahci_hba_init_:                              ; 0xf8f72 LB 0x125
     shr eax, 010h                             ; 66 c1 e8 10
     xchg dx, ax                               ; 92
     test AL, strict byte 001h                 ; a8 01
-    jne short 08fe9h                          ; 75 de
+    jne short 09569h                          ; 75 de
     xor ax, ax                                ; 31 c0
     xor cx, cx                                ; 31 c9
     mov dx, si                                ; 89 f2
@@ -13440,35 +13922,51 @@ ahci_hba_init_:                              ; 0xf8f72 LB 0x125
     push strict byte 00000h                   ; 6a 00
     mov bx, strict word 0001fh                ; bb 1f 00
     xor cx, cx                                ; 31 c9
-    call 0822ah                               ; e8 fb f1
+    call 08580h                               ; e8 d1 ef
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     mov byte [bp-00eh], al                    ; 88 46 f2
     mov byte [bp-00ch], 000h                  ; c6 46 f4 00
-    jmp short 09043h                          ; eb 09
-    inc byte [bp-00ch]                        ; fe 46 f4
-    cmp byte [bp-00ch], 020h                  ; 80 7e f4 20
-    jnc short 09074h                          ; 73 31
-    movzx cx, byte [bp-00ch]                  ; 0f b6 4e f4
-    mov ax, strict word 00001h                ; b8 01 00
-    xor dx, dx                                ; 31 d2
-    jcxz 09054h                               ; e3 06
-    sal ax, 1                                 ; d1 e0
-    rcl dx, 1                                 ; d1 d2
-    loop 0904eh                               ; e2 fa
-    mov bx, ax                                ; 89 c3
-    mov cx, dx                                ; 89 d1
-    mov dx, strict word 0000ch                ; ba 0c 00
-    mov ax, si                                ; 89 f0
-    call 081f1h                               ; e8 91 f1
+    jmp short 095dah                          ; eb 20
+    xor al, al                                ; 30 c0
     test al, al                               ; 84 c0
-    je short 0903ah                           ; 74 d6
+    je short 095d1h                           ; 74 11
     movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
     xor ax, ax                                ; 31 c0
-    mov dx, di                                ; 89 fa
-    call 08adeh                               ; e8 6f fa
+    mov dx, word [bp-010h]                    ; 8b 56 f0
+    call 08fdch                               ; e8 10 fa
     dec byte [bp-00eh]                        ; fe 4e f2
-    jne short 0903ah                          ; 75 c6
+    je short 09613h                           ; 74 42
+    inc byte [bp-00ch]                        ; fe 46 f4
+    cmp byte [bp-00ch], 020h                  ; 80 7e f4 20
+    jnc short 09613h                          ; 73 39
+    movzx cx, byte [bp-00ch]                  ; 0f b6 4e f4
+    mov bx, strict word 00001h                ; bb 01 00
+    xor di, di                                ; 31 ff
+    jcxz 095ebh                               ; e3 06
+    sal bx, 1                                 ; d1 e3
+    rcl di, 1                                 ; d1 d7
+    loop 095e5h                               ; e2 fa
+    mov ax, strict word 0000ch                ; b8 0c 00
+    xor cx, cx                                ; 31 c9
+    mov dx, si                                ; 89 f2
+    xchg cx, ax                               ; 91
+    sal eax, 010h                             ; 66 c1 e0 10
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    out DX, eax                               ; 66 ef
+    lea dx, [si+004h]                         ; 8d 54 04
+    in eax, DX                                ; 66 ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    shr eax, 010h                             ; 66 c1 e8 10
+    xchg dx, ax                               ; 92
+    test dx, di                               ; 85 fa
+    jne short 0960fh                          ; 75 04
+    test ax, bx                               ; 85 d8
+    je short 095bah                           ; 74 ab
+    mov AL, strict byte 001h                  ; b0 01
+    jmp short 095bch                          ; eb a9
     xor ax, ax                                ; 31 c0
     lea sp, [bp-00ah]                         ; 8d 66 f6
     pop di                                    ; 5f
@@ -13478,9 +13976,9 @@ ahci_hba_init_:                              ; 0xf8f72 LB 0x125
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-    db  00bh, 005h, 004h, 003h, 002h, 001h, 000h, 066h, 091h, 044h, 091h, 04ah, 091h, 050h, 091h, 056h
-    db  091h, 05ch, 091h, 062h, 091h, 066h, 091h
-_ahci_init:                                  ; 0xf9097 LB 0xfe
+    db  00bh, 005h, 004h, 003h, 002h, 001h, 000h, 005h, 097h, 0e3h, 096h, 0e9h, 096h, 0efh, 096h, 0f5h
+    db  096h, 0fbh, 096h, 001h, 097h, 005h, 097h
+_ahci_init:                                  ; 0xf9636 LB 0xfe
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -13488,10 +13986,10 @@ _ahci_init:                                  ; 0xf9097 LB 0xfe
     sub sp, strict byte 00006h                ; 83 ec 06
     mov ax, 00601h                            ; b8 01 06
     mov dx, strict word 00001h                ; ba 01 00
-    call 095b5h                               ; e8 0d 05
+    call 09b54h                               ; e8 0d 05
     mov dx, ax                                ; 89 c2
     cmp ax, strict word 0ffffh                ; 3d ff ff
-    je near 0918eh                            ; 0f 84 dd 00
+    je near 0972dh                            ; 0f 84 dd 00
     xor al, al                                ; 30 c0
     shr ax, 008h                              ; c1 e8 08
     mov byte [bp-00ah], al                    ; 88 46 f6
@@ -13499,128 +13997,124 @@ _ahci_init:                                  ; 0xf9097 LB 0xfe
     xor dh, dh                                ; 30 f6
     xor ah, ah                                ; 30 e4
     mov bx, strict word 00034h                ; bb 34 00
-    call 095e0h                               ; e8 1a 05
+    call 09b7fh                               ; e8 1a 05
     mov cl, al                                ; 88 c1
     test cl, cl                               ; 84 c9
-    je short 090efh                           ; 74 23
+    je short 0968eh                           ; 74 23
     movzx bx, cl                              ; 0f b6 d9
     movzx di, byte [bp-008h]                  ; 0f b6 7e f8
     movzx si, byte [bp-00ah]                  ; 0f b6 76 f6
     mov dx, di                                ; 89 fa
     mov ax, si                                ; 89 f0
-    call 095e0h                               ; e8 02 05
+    call 09b7fh                               ; e8 02 05
     cmp AL, strict byte 012h                  ; 3c 12
-    je short 090efh                           ; 74 0d
+    je short 0968eh                           ; 74 0d
     mov al, cl                                ; 88 c8
     db  0feh, 0c0h
     ; inc al                                    ; fe c0
     movzx bx, al                              ; 0f b6 d8
     mov dx, di                                ; 89 fa
     mov ax, si                                ; 89 f0
-    jmp short 090c3h                          ; eb d4
+    jmp short 09662h                          ; eb d4
     test cl, cl                               ; 84 c9
-    je near 0918eh                            ; 0f 84 99 00
+    je near 0972dh                            ; 0f 84 99 00
     add cl, 002h                              ; 80 c1 02
     movzx bx, cl                              ; 0f b6 d9
     movzx di, byte [bp-008h]                  ; 0f b6 7e f8
     movzx si, byte [bp-00ah]                  ; 0f b6 76 f6
     mov dx, di                                ; 89 fa
     mov ax, si                                ; 89 f0
-    call 095e0h                               ; e8 d6 04
+    call 09b7fh                               ; e8 d6 04
     cmp AL, strict byte 010h                  ; 3c 10
-    jne near 0918eh                           ; 0f 85 7e 00
+    jne near 0972dh                           ; 0f 85 7e 00
     mov byte [bp-006h], 000h                  ; c6 46 fa 00
     mov al, cl                                ; 88 c8
     add AL, strict byte 002h                  ; 04 02
     movzx bx, al                              ; 0f b6 d8
     mov dx, di                                ; 89 fa
     mov ax, si                                ; 89 f0
-    call 09604h                               ; e8 e2 04
+    call 09ba3h                               ; e8 e2 04
     mov dx, ax                                ; 89 c2
     and ax, strict word 0000fh                ; 25 0f 00
     sub ax, strict word 00004h                ; 2d 04 00
     cmp ax, strict word 0000bh                ; 3d 0b 00
-    jnbe short 09166h                         ; 77 37
+    jnbe short 09705h                         ; 77 37
     push CS                                   ; 0e
     pop ES                                    ; 07
     mov cx, strict word 00008h                ; b9 08 00
-    mov di, 09080h                            ; bf 80 90
+    mov di, 0961fh                            ; bf 1f 96
     repne scasb                               ; f2 ae
     sal cx, 1                                 ; d1 e1
     mov di, cx                                ; 89 cf
-    mov ax, word [cs:di-06f79h]               ; 2e 8b 85 87 90
+    mov ax, word [cs:di-069dah]               ; 2e 8b 85 26 96
     jmp ax                                    ; ff e0
     mov byte [bp-006h], 010h                  ; c6 46 fa 10
-    jmp short 09166h                          ; eb 1c
+    jmp short 09705h                          ; eb 1c
     mov byte [bp-006h], 014h                  ; c6 46 fa 14
-    jmp short 09166h                          ; eb 16
+    jmp short 09705h                          ; eb 16
     mov byte [bp-006h], 018h                  ; c6 46 fa 18
-    jmp short 09166h                          ; eb 10
+    jmp short 09705h                          ; eb 10
     mov byte [bp-006h], 01ch                  ; c6 46 fa 1c
-    jmp short 09166h                          ; eb 0a
+    jmp short 09705h                          ; eb 0a
     mov byte [bp-006h], 020h                  ; c6 46 fa 20
-    jmp short 09166h                          ; eb 04
+    jmp short 09705h                          ; eb 04
     mov byte [bp-006h], 024h                  ; c6 46 fa 24
     mov si, dx                                ; 89 d6
     shr si, 004h                              ; c1 ee 04
     sal si, 002h                              ; c1 e6 02
     mov al, byte [bp-006h]                    ; 8a 46 fa
     test al, al                               ; 84 c0
-    je short 0918eh                           ; 74 19
+    je short 0972dh                           ; 74 19
     movzx bx, al                              ; 0f b6 d8
     movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
     movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
-    call 09626h                               ; e8 a3 04
+    call 09bc5h                               ; e8 a3 04
     test AL, strict byte 001h                 ; a8 01
-    je short 0918eh                           ; 74 07
+    je short 0972dh                           ; 74 07
     and AL, strict byte 0f0h                  ; 24 f0
     add ax, si                                ; 01 f0
-    call 08f72h                               ; e8 e4 fd
+    call 094d0h                               ; e8 a3 fd
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-apm_out_str_:                                ; 0xf9195 LB 0x39
+apm_out_str_:                                ; 0xf9734 LB 0x39
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
     mov bx, ax                                ; 89 c3
     cmp byte [bx], 000h                       ; 80 3f 00
-    je short 091aah                           ; 74 0a
+    je short 09749h                           ; 74 0a
     mov al, byte [bx]                         ; 8a 07
     out DX, AL                                ; ee
     inc bx                                    ; 43
     mov al, byte [bx]                         ; 8a 07
     db  00ah, 0c0h
     ; or al, al                                 ; 0a c0
-    jne short 091a2h                          ; 75 f8
+    jne short 09741h                          ; 75 f8
     lea sp, [bp-002h]                         ; 8d 66 fe
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-    db  0f1h
-    xchg cx, ax                               ; 91
-    mov bp, 00392h                            ; bd 92 03
-    xchg dx, ax                               ; 92
-    push DS                                   ; 1e
-    xchg dx, ax                               ; 92
-    mov bp, 04992h                            ; bd 92 49
-    xchg dx, ax                               ; 92
-    mov bp, 04e92h                            ; bd 92 4e
-    xchg dx, ax                               ; 92
-    xchg dx, ax                               ; 92
-    xchg dx, ax                               ; 92
-    xchg dx, ax                               ; 92
-    xchg dx, ax                               ; 92
-    xchg dx, ax                               ; 92
-    xchg dx, ax                               ; 92
-    lea dx, [bp+si-06d6eh]                    ; 8d 92 92 92
-    xchg dx, ax                               ; 92
-    xchg dx, ax                               ; 92
-    db  086h
-    xchg dx, ax                               ; 92
-_apm_function:                               ; 0xf91ce LB 0xf5
+    nop                                       ; 90
+    xchg di, ax                               ; 97
+    pop sp                                    ; 5c
+    cbw                                       ; 98
+    mov byte [0bd97h], AL                     ; a2 97 bd
+    xchg di, ax                               ; 97
+    pop sp                                    ; 5c
+    cbw                                       ; 98
+    call 0f3f3h                               ; e8 97 5c
+    cbw                                       ; 98
+    in ax, DX                                 ; ed
+    xchg di, ax                               ; 97
+    xor word [bx+si-067cfh], bx               ; 31 98 31 98
+    xor word [bx+si-067d4h], bx               ; 31 98 2c 98
+    xor word [bx+si-067cfh], bx               ; 31 98 31 98
+    db  025h
+    cbw                                       ; 98
+_apm_function:                               ; 0xf976d LB 0xf5
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -13628,23 +14122,23 @@ _apm_function:                               ; 0xf91ce LB 0xf5
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
     cmp ax, strict word 0000eh                ; 3d 0e 00
-    jnbe near 09292h                          ; 0f 87 b0 00
+    jnbe near 09831h                          ; 0f 87 b0 00
     mov bx, ax                                ; 89 c3
     add bx, ax                                ; 01 c3
     mov dx, word [bp+018h]                    ; 8b 56 18
     or dl, 001h                               ; 80 ca 01
-    jmp word [cs:bx-06e50h]                   ; 2e ff a7 b0 91
+    jmp word [cs:bx-068b1h]                   ; 2e ff a7 4f 97
     mov word [bp+012h], 00102h                ; c7 46 12 02 01
     mov word [bp+00ch], 0504dh                ; c7 46 0c 4d 50
     mov word [bp+010h], strict word 00003h    ; c7 46 10 03 00
-    jmp near 092bdh                           ; e9 ba 00
+    jmp near 0985ch                           ; e9 ba 00
     mov word [bp+012h], 0f000h                ; c7 46 12 00 f0
-    mov word [bp+00ch], 09824h                ; c7 46 0c 24 98
+    mov word [bp+00ch], 09dd4h                ; c7 46 0c d4 9d
     mov word [bp+010h], 0f000h                ; c7 46 10 00 f0
     mov ax, strict word 0fff0h                ; b8 f0 ff
     mov word [bp+006h], ax                    ; 89 46 06
     mov word [bp+004h], ax                    ; 89 46 04
-    jmp near 092bdh                           ; e9 9f 00
+    jmp near 0985ch                           ; e9 9f 00
     mov word [bp+012h], 0f000h                ; c7 46 12 00 f0
     mov word [bp+00ch], 0da40h                ; c7 46 0c 40 da
     mov ax, 0f000h                            ; b8 00 f0
@@ -13657,43 +14151,43 @@ _apm_function:                               ; 0xf91ce LB 0xf5
     sal ebx, 010h                             ; 66 c1 e3 10
     mov si, ax                                ; 89 c6
     sal esi, 010h                             ; 66 c1 e6 10
-    jmp near 092bdh                           ; e9 74 00
+    jmp near 0985ch                           ; e9 74 00
     sti                                       ; fb
     hlt                                       ; f4
-    jmp near 092bdh                           ; e9 6f 00
+    jmp near 0985ch                           ; e9 6f 00
     cmp word [bp+010h], strict byte 00003h    ; 83 7e 10 03
-    je short 09273h                           ; 74 1f
+    je short 09812h                           ; 74 1f
     cmp word [bp+010h], strict byte 00002h    ; 83 7e 10 02
-    je short 0926bh                           ; 74 11
+    je short 0980ah                           ; 74 11
     cmp word [bp+010h], strict byte 00001h    ; 83 7e 10 01
-    jne short 0927bh                          ; 75 1b
+    jne short 0981ah                          ; 75 1b
     mov dx, 08900h                            ; ba 00 89
-    mov ax, 00d12h                            ; b8 12 0d
-    call 09195h                               ; e8 2c ff
-    jmp short 092bdh                          ; eb 52
+    mov ax, 00d10h                            ; b8 10 0d
+    call 09734h                               ; e8 2c ff
+    jmp short 0985ch                          ; eb 52
     mov dx, 08900h                            ; ba 00 89
-    mov ax, 00d1ah                            ; b8 1a 0d
-    jmp short 09266h                          ; eb f3
+    mov ax, 00d18h                            ; b8 18 0d
+    jmp short 09805h                          ; eb f3
     mov dx, 08900h                            ; ba 00 89
-    mov ax, 00d22h                            ; b8 22 0d
-    jmp short 09266h                          ; eb eb
+    mov ax, 00d20h                            ; b8 20 0d
+    jmp short 09805h                          ; eb eb
     or ah, 00ah                               ; 80 cc 0a
     mov word [bp+012h], ax                    ; 89 46 12
     mov word [bp+018h], dx                    ; 89 56 18
-    jmp short 092bdh                          ; eb 37
+    jmp short 0985ch                          ; eb 37
     mov word [bp+012h], 00102h                ; c7 46 12 02 01
-    jmp short 092bdh                          ; eb 30
+    jmp short 0985ch                          ; eb 30
     or ah, 080h                               ; 80 cc 80
-    jmp short 0927eh                          ; eb ec
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp short 0981dh                          ; eb ec
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 94 86
+    call 01931h                               ; e8 f5 80
     push word [bp+00ch]                       ; ff 76 0c
     push word [bp+012h]                       ; ff 76 12
-    push 00d2bh                               ; 68 2b 0d
+    push 00d29h                               ; 68 29 0d
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 c7 86
+    call 01972h                               ; e8 28 81
     add sp, strict byte 00008h                ; 83 c4 08
     mov ax, word [bp+012h]                    ; 8b 46 12
     xor ah, ah                                ; 30 e4
@@ -13704,7 +14198,7 @@ _apm_function:                               ; 0xf91ce LB 0xf5
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-pci16_select_reg_:                           ; 0xf92c3 LB 0x24
+pci16_select_reg_:                           ; 0xf9862 LB 0x24
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -13721,7 +14215,7 @@ pci16_select_reg_:                           ; 0xf92c3 LB 0x24
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-pci16_find_device_:                          ; 0xf92e7 LB 0xf7
+pci16_find_device_:                          ; 0xf9886 LB 0xf7
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -13735,49 +14229,49 @@ pci16_find_device_:                          ; 0xf92e7 LB 0xf7
     xor bx, bx                                ; 31 db
     mov byte [bp-008h], 000h                  ; c6 46 f8 00
     test bl, 007h                             ; f6 c3 07
-    jne short 0932fh                          ; 75 2d
+    jne short 098ceh                          ; 75 2d
     mov dx, strict word 0000eh                ; ba 0e 00
     mov ax, bx                                ; 89 d8
-    call 092c3h                               ; e8 b9 ff
+    call 09862h                               ; e8 b9 ff
     mov dx, 00cfeh                            ; ba fe 0c
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     mov byte [bp-006h], al                    ; 88 46 fa
     cmp AL, strict byte 0ffh                  ; 3c ff
-    jne short 0931dh                          ; 75 06
+    jne short 098bch                          ; 75 06
     add bx, strict byte 00008h                ; 83 c3 08
-    jmp near 093b0h                           ; e9 93 00
+    jmp near 0994fh                           ; e9 93 00
     test byte [bp-006h], 080h                 ; f6 46 fa 80
-    je short 0932ah                           ; 74 07
+    je short 098c9h                           ; 74 07
     mov word [bp-00ah], strict word 00001h    ; c7 46 f6 01 00
-    jmp short 0932fh                          ; eb 05
+    jmp short 098ceh                          ; eb 05
     mov word [bp-00ah], strict word 00008h    ; c7 46 f6 08 00
     mov al, byte [bp-006h]                    ; 8a 46 fa
     and AL, strict byte 007h                  ; 24 07
     cmp AL, strict byte 001h                  ; 3c 01
-    jne short 09357h                          ; 75 1f
+    jne short 098f6h                          ; 75 1f
     mov ax, bx                                ; 89 d8
     shr ax, 008h                              ; c1 e8 08
     test ax, ax                               ; 85 c0
-    jne short 09357h                          ; 75 16
+    jne short 098f6h                          ; 75 16
     mov dx, strict word 0001ah                ; ba 1a 00
     mov ax, bx                                ; 89 d8
-    call 092c3h                               ; e8 7a ff
+    call 09862h                               ; e8 7a ff
     mov dx, 00cfeh                            ; ba fe 0c
     in AL, DX                                 ; ec
     db  02ah, 0e4h
     ; sub ah, ah                                ; 2a e4
     cmp al, byte [bp-008h]                    ; 3a 46 f8
-    jbe short 09357h                          ; 76 03
+    jbe short 098f6h                          ; 76 03
     mov byte [bp-008h], al                    ; 88 46 f8
     test di, di                               ; 85 ff
-    je short 09360h                           ; 74 05
+    je short 098ffh                           ; 74 05
     mov dx, strict word 00008h                ; ba 08 00
-    jmp short 09362h                          ; eb 02
+    jmp short 09901h                          ; eb 02
     xor dx, dx                                ; 31 d2
     mov ax, bx                                ; 89 d8
-    call 092c3h                               ; e8 5c ff
+    call 09862h                               ; e8 5c ff
     mov dx, 00cfch                            ; ba fc 0c
     in eax, DX                                ; 66 ed
     db  08bh, 0d0h
@@ -13788,46 +14282,47 @@ pci16_find_device_:                          ; 0xf92e7 LB 0xf7
     mov word [bp-00ch], dx                    ; 89 56 f4
     mov word [bp-010h], strict word 00000h    ; c7 46 f0 00 00
     test di, di                               ; 85 ff
-    je short 09391h                           ; 74 0f
+    je short 09930h                           ; 74 0f
     mov cx, strict word 00008h                ; b9 08 00
     shr dx, 1                                 ; d1 ea
     rcr ax, 1                                 ; d1 d8
-    loop 09385h                               ; e2 fa
+    loop 09924h                               ; e2 fa
     mov word [bp-00eh], ax                    ; 89 46 f2
     mov word [bp-00ch], dx                    ; 89 56 f4
     mov ax, word [bp-00ch]                    ; 8b 46 f4
     cmp ax, word [bp-014h]                    ; 3b 46 ec
-    jne short 093a1h                          ; 75 08
+    jne short 09940h                          ; 75 08
     mov ax, word [bp-00eh]                    ; 8b 46 f2
     cmp ax, word [bp-012h]                    ; 3b 46 ee
-    je short 093a7h                           ; 74 06
+    je short 09946h                           ; 74 06
     cmp word [bp-010h], strict byte 00000h    ; 83 7e f0 00
-    je short 093adh                           ; 74 06
+    je short 0994ch                           ; 74 06
     dec si                                    ; 4e
     cmp si, strict byte 0ffffh                ; 83 fe ff
-    je short 093bfh                           ; 74 12
+    je short 0995eh                           ; 74 12
     add bx, word [bp-00ah]                    ; 03 5e f6
     mov dx, bx                                ; 89 da
     shr dx, 008h                              ; c1 ea 08
     movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
     cmp dx, ax                                ; 39 c2
-    jbe near 092fdh                           ; 0f 86 3e ff
+    jbe near 0989ch                           ; 0f 86 3e ff
     cmp si, strict byte 0ffffh                ; 83 fe ff
-    jne short 093c8h                          ; 75 04
+    jne short 09967h                          ; 75 04
     mov ax, bx                                ; 89 d8
-    jmp short 093cbh                          ; eb 03
+    jmp short 0996ah                          ; eb 03
     mov ax, strict word 0ffffh                ; b8 ff ff
     lea sp, [bp-004h]                         ; 8d 66 fc
     pop di                                    ; 5f
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-    rcl byte [si-06b26h], 0edh                ; c0 94 da 94 ed
-    xchg sp, ax                               ; 94
-    add dl, byte [di-06aebh]                  ; 02 95 15 95
-    db  028h
-    xchg bp, ax                               ; 95
-_pci16_function:                             ; 0xf93de LB 0x1d7
+    pop di                                    ; 5f
+    call far 09a8ch:09a79h                    ; 9a 79 9a 8c 9a
+    mov ax, word [0b49ah]                     ; a1 9a b4
+    db  09ah
+    db  0c7h
+    db  09ah
+_pci16_function:                             ; 0xf997d LB 0x1d7
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -13841,69 +14336,69 @@ _pci16_function:                             ; 0xf93de LB 0x1d7
     mov ax, word [bp+020h]                    ; 8b 46 20
     xor ah, ah                                ; 30 e4
     cmp bx, strict byte 00003h                ; 83 fb 03
-    jc short 09417h                           ; 72 1a
-    jbe short 0946fh                          ; 76 70
+    jc short 099b6h                           ; 72 1a
+    jbe short 09a0eh                          ; 76 70
     cmp bx, strict byte 0000eh                ; 83 fb 0e
-    je near 0953ch                            ; 0f 84 36 01
+    je near 09adbh                            ; 0f 84 36 01
     cmp bx, strict byte 00008h                ; 83 fb 08
-    jc near 09581h                            ; 0f 82 74 01
+    jc near 09b20h                            ; 0f 82 74 01
     cmp bx, strict byte 0000dh                ; 83 fb 0d
-    jbe near 09494h                           ; 0f 86 80 00
-    jmp near 09581h                           ; e9 6a 01
+    jbe near 09a33h                           ; 0f 86 80 00
+    jmp near 09b20h                           ; e9 6a 01
     cmp bx, strict byte 00002h                ; 83 fb 02
-    je short 0943fh                           ; 74 23
+    je short 099deh                           ; 74 23
     cmp bx, strict byte 00001h                ; 83 fb 01
-    jne near 09581h                           ; 0f 85 5e 01
+    jne near 09b20h                           ; 0f 85 5e 01
     mov word [bp+020h], strict word 00001h    ; c7 46 20 01 00
     mov word [bp+014h], 00210h                ; c7 46 14 10 02
     mov word [bp+01ch], strict word 00000h    ; c7 46 1c 00 00
     mov word [bp+018h], 04350h                ; c7 46 18 50 43
     mov word [bp+01ah], 02049h                ; c7 46 1a 49 20
-    jmp near 095aeh                           ; e9 6f 01
+    jmp near 09b4dh                           ; e9 6f 01
     cmp word [bp+018h], strict byte 0ffffh    ; 83 7e 18 ff
-    jne short 0944bh                          ; 75 06
+    jne short 099eah                          ; 75 06
     or ah, 083h                               ; 80 cc 83
-    jmp near 095a7h                           ; e9 5c 01
+    jmp near 09b46h                           ; e9 5c 01
     mov bx, word [bp+008h]                    ; 8b 5e 08
     mov dx, word [bp+01ch]                    ; 8b 56 1c
     mov ax, word [bp+018h]                    ; 8b 46 18
     xor cx, cx                                ; 31 c9
-    call 092e7h                               ; e8 8e fe
+    call 09886h                               ; e8 8e fe
     cmp ax, strict word 0ffffh                ; 3d ff ff
-    jne short 09469h                          ; 75 0b
+    jne short 09a08h                          ; 75 0b
     mov ax, word [bp+020h]                    ; 8b 46 20
     xor ah, ah                                ; 30 e4
     or ah, 086h                               ; 80 cc 86
-    jmp near 095a7h                           ; e9 3e 01
+    jmp near 09b46h                           ; e9 3e 01
     mov word [bp+014h], ax                    ; 89 46 14
-    jmp near 095aeh                           ; e9 3f 01
+    jmp near 09b4dh                           ; e9 3f 01
     mov bx, word [bp+008h]                    ; 8b 5e 08
     mov ax, word [bp+01ch]                    ; 8b 46 1c
     mov dx, word [bp+01eh]                    ; 8b 56 1e
     mov cx, strict word 00001h                ; b9 01 00
-    call 092e7h                               ; e8 69 fe
+    call 09886h                               ; e8 69 fe
     cmp ax, strict word 0ffffh                ; 3d ff ff
-    jne short 0948eh                          ; 75 0b
+    jne short 09a2dh                          ; 75 0b
     mov ax, word [bp+020h]                    ; 8b 46 20
     xor ah, ah                                ; 30 e4
     or ah, 086h                               ; 80 cc 86
-    jmp near 095a7h                           ; e9 19 01
+    jmp near 09b46h                           ; e9 19 01
     mov word [bp+014h], ax                    ; 89 46 14
-    jmp near 095aeh                           ; e9 1a 01
+    jmp near 09b4dh                           ; e9 1a 01
     cmp word [bp+004h], 00100h                ; 81 7e 04 00 01
-    jc short 094a1h                           ; 72 06
+    jc short 09a40h                           ; 72 06
     or ah, 087h                               ; 80 cc 87
-    jmp near 095a7h                           ; e9 06 01
+    jmp near 09b46h                           ; e9 06 01
     mov dx, word [bp+004h]                    ; 8b 56 04
     mov ax, word [bp+014h]                    ; 8b 46 14
-    call 092c3h                               ; e8 19 fe
+    call 09862h                               ; e8 19 fe
     mov bx, word [bp+020h]                    ; 8b 5e 20
     xor bh, bh                                ; 30 ff
     sub bx, strict byte 00008h                ; 83 eb 08
     cmp bx, strict byte 00005h                ; 83 fb 05
-    jnbe near 095aeh                          ; 0f 87 f5 00
+    jnbe near 09b4dh                          ; 0f 87 f5 00
     add bx, bx                                ; 01 db
-    jmp word [cs:bx-06c2eh]                   ; 2e ff a7 d2 93
+    jmp word [cs:bx-0668fh]                   ; 2e ff a7 71 99
     mov bx, word [bp+01ch]                    ; 8b 5e 1c
     xor bl, bl                                ; 30 db
     mov dx, word [bp+004h]                    ; 8b 56 04
@@ -13914,14 +14409,14 @@ _pci16_function:                             ; 0xf93de LB 0x1d7
     ; sub ah, ah                                ; 2a e4
     or bx, ax                                 ; 09 c3
     mov word [bp+01ch], bx                    ; 89 5e 1c
-    jmp near 095aeh                           ; e9 d4 00
+    jmp near 09b4dh                           ; e9 d4 00
     mov dx, word [bp+004h]                    ; 8b 56 04
     xor dh, dh                                ; 30 f6
     and dl, 002h                              ; 80 e2 02
     add dx, 00cfch                            ; 81 c2 fc 0c
     in ax, DX                                 ; ed
     mov word [bp+01ch], ax                    ; 89 46 1c
-    jmp near 095aeh                           ; e9 c1 00
+    jmp near 09b4dh                           ; e9 c1 00
     mov dx, 00cfch                            ; ba fc 0c
     in eax, DX                                ; 66 ed
     db  08bh, 0d0h
@@ -13930,21 +14425,21 @@ _pci16_function:                             ; 0xf93de LB 0x1d7
     xchg dx, ax                               ; 92
     mov word [bp+01ch], ax                    ; 89 46 1c
     mov word [bp+01eh], dx                    ; 89 56 1e
-    jmp near 095aeh                           ; e9 ac 00
+    jmp near 09b4dh                           ; e9 ac 00
     mov ax, word [bp+01ch]                    ; 8b 46 1c
     mov dx, word [bp+004h]                    ; 8b 56 04
     xor dh, dh                                ; 30 f6
     and dl, 003h                              ; 80 e2 03
     add dx, 00cfch                            ; 81 c2 fc 0c
     out DX, AL                                ; ee
-    jmp near 095aeh                           ; e9 99 00
+    jmp near 09b4dh                           ; e9 99 00
     mov ax, word [bp+01ch]                    ; 8b 46 1c
     mov dx, word [bp+004h]                    ; 8b 56 04
     xor dh, dh                                ; 30 f6
     and dl, 002h                              ; 80 e2 02
     add dx, 00cfch                            ; 81 c2 fc 0c
     out DX, ax                                ; ef
-    jmp near 095aeh                           ; e9 86 00
+    jmp near 09b4dh                           ; e9 86 00
     mov ax, word [bp+01ch]                    ; 8b 46 1c
     mov cx, word [bp+01eh]                    ; 8b 4e 1e
     mov dx, 00cfch                            ; ba fc 0c
@@ -13953,20 +14448,20 @@ _pci16_function:                             ; 0xf93de LB 0x1d7
     db  08bh, 0c1h
     ; mov ax, cx                                ; 8b c1
     out DX, eax                               ; 66 ef
-    jmp short 095aeh                          ; eb 72
+    jmp short 09b4dh                          ; eb 72
     mov bx, word [bp+004h]                    ; 8b 5e 04
     mov es, [bp+026h]                         ; 8e 46 26
     mov word [bp-008h], bx                    ; 89 5e f8
     mov [bp-006h], es                         ; 8c 46 fa
     mov cx, word [0f4a0h]                     ; 8b 0e a0 f4
     cmp cx, word [es:bx]                      ; 26 3b 0f
-    jbe short 09562h                          ; 76 11
+    jbe short 09b01h                          ; 76 11
     mov ax, word [bp+020h]                    ; 8b 46 20
     xor ah, ah                                ; 30 e4
     or ah, 089h                               ; 80 cc 89
     mov word [bp+020h], ax                    ; 89 46 20
     or word [bp+02ch], strict byte 00001h     ; 83 4e 2c 01
-    jmp short 09576h                          ; eb 14
+    jmp short 09b15h                          ; eb 14
     les di, [es:bx+002h]                      ; 26 c4 7f 02
     mov si, 0f2c0h                            ; be c0 f2
     mov dx, ds                                ; 8c da
@@ -13978,18 +14473,18 @@ _pci16_function:                             ; 0xf93de LB 0x1d7
     mov ax, word [0f4a0h]                     ; a1 a0 f4
     les bx, [bp-008h]                         ; c4 5e f8
     mov word [es:bx], ax                      ; 26 89 07
-    jmp short 095aeh                          ; eb 2d
-    mov bx, 00da2h                            ; bb a2 0d
+    jmp short 09b4dh                          ; eb 2d
+    mov bx, 00da0h                            ; bb a0 0d
     mov cx, ds                                ; 8c d9
     mov ax, strict word 00004h                ; b8 04 00
-    call 01931h                               ; e8 a5 83
+    call 01931h                               ; e8 06 7e
     mov ax, word [bp+014h]                    ; 8b 46 14
     push ax                                   ; 50
     mov ax, word [bp+020h]                    ; 8b 46 20
     push ax                                   ; 50
-    push 00d5eh                               ; 68 5e 0d
+    push 00d5ch                               ; 68 5c 0d
     push strict byte 00004h                   ; 6a 04
-    call 01972h                               ; e8 d6 83
+    call 01972h                               ; e8 37 7e
     add sp, strict byte 00008h                ; 83 c4 08
     mov ax, word [bp+020h]                    ; 8b 46 20
     xor ah, ah                                ; 30 e4
@@ -14001,7 +14496,7 @@ _pci16_function:                             ; 0xf93de LB 0x1d7
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn                                      ; c3
-pci_find_classcode_:                         ; 0xf95b5 LB 0x2b
+pci_find_classcode_:                         ; 0xf9b54 LB 0x2b
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
@@ -14016,7 +14511,7 @@ pci_find_classcode_:                         ; 0xf95b5 LB 0x2b
     ; mov cx, dx                                ; 8b ca
     int 01ah                                  ; cd 1a
     cmp ah, 000h                              ; 80 fc 00
-    je near 095d6h                            ; 0f 84 03 00
+    je near 09b75h                            ; 0f 84 03 00
     mov bx, strict word 0ffffh                ; bb ff ff
     mov ax, bx                                ; 89 d8
     lea sp, [bp-006h]                         ; 8d 66 fa
@@ -14025,7 +14520,7 @@ pci_find_classcode_:                         ; 0xf95b5 LB 0x2b
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-pci_read_config_byte_:                       ; 0xf95e0 LB 0x24
+pci_read_config_byte_:                       ; 0xf9b7f LB 0x24
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push cx                                   ; 51
@@ -14044,7 +14539,7 @@ pci_read_config_byte_:                       ; 0xf95e0 LB 0x24
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
-pci_read_config_word_:                       ; 0xf9604 LB 0x22
+pci_read_config_word_:                       ; 0xf9ba3 LB 0x22
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push cx                                   ; 51
@@ -14063,7 +14558,7 @@ pci_read_config_word_:                       ; 0xf9604 LB 0x22
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
-pci_read_config_dword_:                      ; 0xf9626 LB 0x27
+pci_read_config_dword_:                      ; 0xf9bc5 LB 0x27
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push cx                                   ; 51
@@ -14084,7 +14579,7 @@ pci_read_config_dword_:                      ; 0xf9626 LB 0x27
     pop cx                                    ; 59
     pop bp                                    ; 5d
     retn                                      ; c3
-vds_is_present_:                             ; 0xf964d LB 0x1d
+vds_is_present_:                             ; 0xf9bec LB 0x1d
     push bx                                   ; 53
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
@@ -14092,7 +14587,7 @@ vds_is_present_:                             ; 0xf964d LB 0x1d
     mov ax, strict word 00040h                ; b8 40 00
     mov es, ax                                ; 8e c0
     test byte [es:bx], 020h                   ; 26 f6 07 20
-    je short 09665h                           ; 74 06
+    je short 09c04h                           ; 74 06
     mov ax, strict word 00001h                ; b8 01 00
     pop bp                                    ; 5d
     pop bx                                    ; 5b
@@ -14101,7 +14596,7 @@ vds_is_present_:                             ; 0xf964d LB 0x1d
     pop bp                                    ; 5d
     pop bx                                    ; 5b
     retn                                      ; c3
-vds_real_to_lin_:                            ; 0xf966a LB 0x1e
+vds_real_to_lin_:                            ; 0xf9c09 LB 0x1e
     push bx                                   ; 53
     push cx                                   ; 51
     push bp                                   ; 55
@@ -14112,7 +14607,7 @@ vds_real_to_lin_:                            ; 0xf966a LB 0x1e
     mov cx, strict word 00004h                ; b9 04 00
     sal ax, 1                                 ; d1 e0
     rcl dx, 1                                 ; d1 d2
-    loop 09678h                               ; e2 fa
+    loop 09c17h                               ; e2 fa
     xor cx, cx                                ; 31 c9
     add ax, bx                                ; 01 d8
     adc dx, cx                                ; 11 ca
@@ -14120,7 +14615,7 @@ vds_real_to_lin_:                            ; 0xf966a LB 0x1e
     pop cx                                    ; 59
     pop bx                                    ; 5b
     retn                                      ; c3
-vds_build_sg_list_:                          ; 0xf9688 LB 0x79
+vds_build_sg_list_:                          ; 0xf9c27 LB 0x79
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push si                                   ; 56
@@ -14134,23 +14629,23 @@ vds_build_sg_list_:                          ; 0xf9688 LB 0x79
     mov word [es:di], bx                      ; 26 89 1d
     mov bx, word [bp+006h]                    ; 8b 5e 06
     mov word [es:di+002h], bx                 ; 26 89 5d 02
-    call 0966ah                               ; e8 c3 ff
+    call 09c09h                               ; e8 c3 ff
     mov es, si                                ; 8e c6
     mov word [es:di+004h], ax                 ; 26 89 45 04
     mov word [es:di+006h], dx                 ; 26 89 55 06
     mov word [es:di+008h], strict word 00000h ; 26 c7 45 08 00 00
-    call 0964dh                               ; e8 93 ff
+    call 09bech                               ; e8 93 ff
     test ax, ax                               ; 85 c0
-    je short 096d1h                           ; 74 13
+    je short 09c70h                           ; 74 13
     mov es, si                                ; 8e c6
     mov ax, 08105h                            ; b8 05 81
     mov dx, strict word 00000h                ; ba 00 00
     int 04bh                                  ; cd 4b
-    jc near 096ceh                            ; 0f 82 02 00
+    jc near 09c6dh                            ; 0f 82 02 00
     db  032h, 0c0h
     ; xor al, al                                ; 32 c0
     cbw                                       ; 98
-    jmp short 096f8h                          ; eb 27
+    jmp short 09c97h                          ; eb 27
     mov es, si                                ; 8e c6
     mov word [es:di+00eh], strict word 00001h ; 26 c7 45 0e 01 00
     mov dx, word [es:di+004h]                 ; 26 8b 55 04
@@ -14167,21 +14662,21 @@ vds_build_sg_list_:                          ; 0xf9688 LB 0x79
     pop si                                    ; 5e
     pop bp                                    ; 5d
     retn 00004h                               ; c2 04 00
-vds_free_sg_list_:                           ; 0xf9701 LB 0x3f
+vds_free_sg_list_:                           ; 0xf9ca0 LB 0x30
     push bp                                   ; 55
     mov bp, sp                                ; 89 e5
     push bx                                   ; 53
     push di                                   ; 57
     mov bx, ax                                ; 89 c3
-    call 0964dh                               ; e8 42 ff
+    call 09bech                               ; e8 42 ff
     test ax, ax                               ; 85 c0
-    je short 09722h                           ; 74 13
+    je short 09cc1h                           ; 74 13
     mov di, bx                                ; 89 df
     mov es, dx                                ; 8e c2
     mov ax, 08106h                            ; b8 06 81
     mov dx, strict word 00000h                ; ba 00 00
     int 04bh                                  ; cd 4b
-    jc near 09721h                            ; 0f 82 02 00
+    jc near 09cc0h                            ; 0f 82 02 00
     db  032h, 0c0h
     ; xor al, al                                ; 32 c0
     cbw                                       ; 98
@@ -14192,8 +14687,7 @@ vds_free_sg_list_:                           ; 0xf9701 LB 0x3f
     pop bx                                    ; 5b
     pop bp                                    ; 5d
     retn                                      ; c3
-    times 0xf db 0
-__U4D:                                       ; 0xf9740 LB 0x39
+__U4D:                                       ; 0xf9cd0 LB 0x39
     pushfw                                    ; 9c
     push eax                                  ; 66 50
     push edx                                  ; 66 52
@@ -14223,7 +14717,7 @@ __U4D:                                       ; 0xf9740 LB 0x39
     rol eax, 010h                             ; 66 c1 c0 10
     popfw                                     ; 9d
     retn                                      ; c3
-__U4M:                                       ; 0xf9779 LB 0x31
+__U4M:                                       ; 0xf9d09 LB 0x31
     pushfw                                    ; 9c
     push eax                                  ; 66 50
     push edx                                  ; 66 52
@@ -14248,7 +14742,27 @@ __U4M:                                       ; 0xf9779 LB 0x31
     rol eax, 010h                             ; 66 c1 c0 10
     popfw                                     ; 9d
     retn                                      ; c3
-_fmemset_:                                   ; 0xf97aa LB 0xd
+__U8LS:                                      ; 0xf9d3a LB 0x10
+    test si, si                               ; 85 f6
+    je short 09d49h                           ; 74 0b
+    sal dx, 1                                 ; d1 e2
+    rcl cx, 1                                 ; d1 d1
+    rcl bx, 1                                 ; d1 d3
+    rcl ax, 1                                 ; d1 d0
+    dec si                                    ; 4e
+    jne short 09d3eh                          ; 75 f5
+    retn                                      ; c3
+__U8RS:                                      ; 0xf9d4a LB 0x10
+    test si, si                               ; 85 f6
+    je short 09d59h                           ; 74 0b
+    shr ax, 1                                 ; d1 e8
+    rcr bx, 1                                 ; d1 db
+    rcr cx, 1                                 ; d1 d9
+    rcr dx, 1                                 ; d1 da
+    dec si                                    ; 4e
+    jne short 09d4eh                          ; 75 f5
+    retn                                      ; c3
+_fmemset_:                                   ; 0xf9d5a LB 0xd
     push di                                   ; 57
     mov es, dx                                ; 8e c2
     db  08bh, 0f8h
@@ -14258,7 +14772,7 @@ _fmemset_:                                   ; 0xf97aa LB 0xd
     xchg al, bl                               ; 86 d8
     pop di                                    ; 5f
     retn                                      ; c3
-_fmemcpy_:                                   ; 0xf97b7 LB 0x33
+_fmemcpy_:                                   ; 0xf9d67 LB 0x33
     push bp                                   ; 55
     db  08bh, 0ech
     ; mov bp, sp                                ; 8b ec
@@ -14278,21 +14792,19 @@ _fmemcpy_:                                   ; 0xf97b7 LB 0x33
     pop di                                    ; 5f
     leave                                     ; c9
     retn                                      ; c3
-    add byte [bx+si], al                      ; 00 00
-    cbw                                       ; 98
-    add bl, byte [bx+si-067fah]               ; 02 98 06 98
-    push ES                                   ; 06
-    cbw                                       ; 98
-    push ES                                   ; 06
-    cbw                                       ; 98
-    or byte [bx+si-067f8h], bl                ; 08 98 08 98
-    or bl, byte [bx+si-067f2h]                ; 0a 98 0e 98
-    push CS                                   ; 0e
-    cbw                                       ; 98
-    adc byte [bx+si-067ebh], bl               ; 10 98 15 98
-    pop SS                                    ; 17
-    cbw                                       ; 98
-apm_worker:                                  ; 0xf97ea LB 0x3a
+    add byte [bx+si-04d63h], dh               ; 00 b0 9d b2
+    popfw                                     ; 9d
+    mov DH, strict byte 09dh                  ; b6 9d
+    mov DH, strict byte 09dh                  ; b6 9d
+    mov DH, strict byte 09dh                  ; b6 9d
+    mov ax, 0b89dh                            ; b8 9d b8
+    popfw                                     ; 9d
+    mov dx, 0be9dh                            ; ba 9d be
+    popfw                                     ; 9d
+    mov si, 0c09dh                            ; be 9d c0
+    popfw                                     ; 9d
+    lds bx, [di-06239h]                       ; c5 9d c7 9d
+apm_worker:                                  ; 0xf9d9a LB 0x3a
     sti                                       ; fb
     push ax                                   ; 50
     db  032h, 0e4h
@@ -14304,29 +14816,29 @@ apm_worker:                                  ; 0xf97ea LB 0x3a
     cmp AL, strict byte 00dh                  ; 3c 0d
     pop ax                                    ; 58
     mov AH, strict byte 053h                  ; b4 53
-    jnc short 09820h                          ; 73 25
-    jmp word [cs:bp-06830h]                   ; 2e ff a6 d0 97
-    jmp short 0981eh                          ; eb 1c
+    jnc short 09dd0h                          ; 73 25
+    jmp word [cs:bp-06280h]                   ; 2e ff a6 80 9d
+    jmp short 09dceh                          ; eb 1c
     sti                                       ; fb
     hlt                                       ; f4
-    jmp short 0981eh                          ; eb 18
-    jmp short 0981eh                          ; eb 16
-    jmp short 09820h                          ; eb 16
+    jmp short 09dceh                          ; eb 18
+    jmp short 09dceh                          ; eb 16
+    jmp short 09dd0h                          ; eb 16
     mov AH, strict byte 080h                  ; b4 80
-    jmp short 09822h                          ; eb 14
-    jmp short 09820h                          ; eb 10
+    jmp short 09dd2h                          ; eb 14
+    jmp short 09dd0h                          ; eb 10
     mov ax, 00102h                            ; b8 02 01
-    jmp short 0981eh                          ; eb 09
-    jmp short 0981eh                          ; eb 07
+    jmp short 09dceh                          ; eb 09
+    jmp short 09dceh                          ; eb 07
     mov BL, strict byte 000h                  ; b3 00
     mov cx, strict word 00000h                ; b9 00 00
-    jmp short 0981eh                          ; eb 00
+    jmp short 09dceh                          ; eb 00
     clc                                       ; f8
     retn                                      ; c3
     mov AH, strict byte 009h                  ; b4 09
     stc                                       ; f9
     retn                                      ; c3
-apm_pm16_entry:                              ; 0xf9824 LB 0x11
+apm_pm16_entry:                              ; 0xf9dd4 LB 0x11
     mov AH, strict byte 002h                  ; b4 02
     push DS                                   ; 1e
     push bp                                   ; 55
@@ -14334,13 +14846,13 @@ apm_pm16_entry:                              ; 0xf9824 LB 0x11
     pop bp                                    ; 5d
     add bp, strict byte 00008h                ; 83 c5 08
     mov ds, bp                                ; 8e dd
-    call 097eah                               ; e8 b8 ff
+    call 09d9ah                               ; e8 b8 ff
     pop bp                                    ; 5d
     pop DS                                    ; 1f
     retf                                      ; cb
 
-  ; Padding 0x41cb bytes at 0xf9835
-  times 16843 db 0
+  ; Padding 0x3c1b bytes at 0xf9de5
+  times 15387 db 0
 
 section BIOS32 progbits vstart=0xda00 align=1 ; size=0x3cb class=CODE group=AUTO
 bios32_service:                              ; 0xfda00 LB 0x26
@@ -14387,7 +14899,7 @@ apm_pm32_entry:                              ; 0xfda40 LB 0x21
     pop bp                                    ; 5d
     add bp, strict byte 00008h                ; 83 c5 08
     push ebp                                  ; 66 55
-    mov bp, 09826h                            ; bd 26 98
+    mov bp, 09dd6h                            ; bd d6 9d
     add byte [bx+si], al                      ; 00 00
     push ebp                                  ; 66 55
     mov AH, strict byte 003h                  ; b4 03
@@ -14993,7 +15505,7 @@ normal_post:                                 ; 0xfe0c0 LB 0x203
     mov ax, 0c000h                            ; b8 00 c0
     mov dx, 0c800h                            ; ba 00 c8
     call 01600h                               ; e8 e7 33
-    call 04b77h                               ; e8 5b 69
+    call 04e4ch                               ; e8 30 6c
     pop DS                                    ; 1f
     mov ax, 0ff53h                            ; b8 53 ff
     mov word [0003ch], ax                     ; a3 3c 00
@@ -15107,10 +15619,10 @@ hard_drive_post:                             ; 0xfe2d2 LB 0x12c
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 01badh                               ; e8 71 38
-    call 01fa7h                               ; e8 68 3c
-    call 09097h                               ; e8 55 ad
-    call 080d3h                               ; e8 8e 9d
+    call 01cafh                               ; e8 73 39
+    call 0213ch                               ; e8 fd 3d
+    call 09636h                               ; e8 f4 b2
+    call 0851ah                               ; e8 d5 a1
     call 0ed2fh                               ; e8 e7 09
     call 0e2d2h                               ; e8 87 ff
     push CS                                   ; 0e
@@ -15120,7 +15632,7 @@ hard_drive_post:                             ; 0xfe2d2 LB 0x12c
     mov dx, 0f000h                            ; ba 00 f0
     call 01600h                               ; e8 a9 32
     call 01797h                               ; e8 3d 34
-    call 0385bh                               ; e8 fe 54
+    call 03b30h                               ; e8 d3 57
     sti                                       ; fb
     int 019h                                  ; cd 19
     sti                                       ; fb
@@ -15218,7 +15730,7 @@ int19_handler:                               ; 0xfe6f2 LB 0x61
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 05f61h                               ; e8 1f 78
+    call 062aeh                               ; e8 6c 7b
     popaw                                     ; 61
     pop ES                                    ; 07
     pop DS                                    ; 1f
@@ -15293,7 +15805,7 @@ ebda_post:                                   ; 0xfe778 LB 0xec
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 052cfh                               ; e8 8d 6a
+    call 055a4h                               ; e8 62 6d
     popaw                                     ; 61
     pop DS                                    ; 1f
     pop ES                                    ; 07
@@ -15310,7 +15822,7 @@ ebda_post:                                   ; 0xfe778 LB 0xec
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 052cfh                               ; e8 6f 6a
+    call 055a4h                               ; e8 44 6d
     popaw                                     ; 61
     pop DS                                    ; 1f
     pop ES                                    ; 07
@@ -15412,7 +15924,7 @@ pmode_setup:                                 ; 0xfe8e0 LB 0x37b
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 04e74h                               ; e8 a5 64
+    call 05149h                               ; e8 7a 67
     pop ES                                    ; 07
     popaw                                     ; 61
     pop DS                                    ; 1f
@@ -15428,7 +15940,7 @@ pmode_setup:                                 ; 0xfe8e0 LB 0x37b
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 069b9h                               ; e8 d4 7f
+    call 06d06h                               ; e8 21 83
     pop DS                                    ; 1f
     pop ES                                    ; 07
     popaw                                     ; 61
@@ -15449,16 +15961,16 @@ int13_relocated:                             ; 0xfec5b LB 0x55
     pop DS                                    ; 1f
     cld                                       ; fc
     push 0ece9h                               ; 68 e9 ec
-    jmp near 0389fh                           ; e9 2e 4c
+    jmp near 03b74h                           ; e9 03 4f
     push ES                                   ; 06
     push ax                                   ; 50
     push bx                                   ; 53
     push cx                                   ; 51
     push dx                                   ; 52
-    call 03873h                               ; e8 fa 4b
+    call 03b48h                               ; e8 cf 4e
     cmp AL, strict byte 000h                  ; 3c 00
     je short 0ecabh                           ; 74 2e
-    call 03889h                               ; e8 09 4c
+    call 03b5eh                               ; e8 de 4e
     pop dx                                    ; 5a
     push dx                                   ; 52
     db  03ah, 0c2h
@@ -15476,7 +15988,7 @@ int13_relocated:                             ; 0xfec5b LB 0x55
     pop DS                                    ; 1f
     cld                                       ; fc
     push 0ece9h                               ; 68 e9 ec
-    jmp near 03e73h                           ; e9 dc 51
+    jmp near 04148h                           ; e9 b1 54
     and dl, 0e0h                              ; 80 e2 e0
     db  03ah, 0c2h
     ; cmp al, dl                                ; 3a c2
@@ -15516,22 +16028,22 @@ int13_legacy:                                ; 0xfecb4 LB 0x14
     test dl, 080h                             ; f6 c2 80
     jne short 0ecc8h                          ; 75 06
     push 0ece9h                               ; 68 e9 ec
-    jmp near 02f2eh                           ; e9 66 42
+    jmp near 03203h                           ; e9 3b 45
 int13_notfloppy:                             ; 0xfecc8 LB 0x14
     cmp dl, 0e0h                              ; 80 fa e0
     jc short 0ecdch                           ; 72 0f
     shr ebx, 010h                             ; 66 c1 eb 10
     push bx                                   ; 53
-    call 042a7h                               ; e8 d2 55
+    call 0457ch                               ; e8 a7 58
     pop bx                                    ; 5b
     sal ebx, 010h                             ; 66 c1 e3 10
     jmp short 0ece9h                          ; eb 0d
 int13_disk:                                  ; 0xfecdc LB 0xd
     cmp ah, 040h                              ; 80 fc 40
     jnbe short 0ece6h                         ; 77 05
-    call 05654h                               ; e8 70 69
+    call 05970h                               ; e8 8c 6c
     jmp short 0ece9h                          ; eb 03
-    call 05a95h                               ; e8 ac 6d
+    call 05dbah                               ; e8 d1 70
 int13_out:                                   ; 0xfece9 LB 0x4
     pop DS                                    ; 1f
     pop ES                                    ; 07
@@ -15744,7 +16256,7 @@ int17_handler:                               ; 0xfefd4 LB 0xd
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 07313h                               ; e8 36 83
+    call 07660h                               ; e8 83 86
     popaw                                     ; 61
     pop ES                                    ; 07
     pop DS                                    ; 1f
@@ -15792,28 +16304,28 @@ int19_relocated:                             ; 0xff0ac LB 0x90
     ; mov bp, sp                                ; 8b ec
     mov ax, strict word 00001h                ; b8 01 00
     push ax                                   ; 50
-    call 0490eh                               ; e8 3e 58
+    call 04be3h                               ; e8 13 5b
     inc sp                                    ; 44
     inc sp                                    ; 44
     test ax, ax                               ; 85 c0
     jne short 0f0feh                          ; 75 28
     mov ax, strict word 00002h                ; b8 02 00
     push ax                                   ; 50
-    call 0490eh                               ; e8 31 58
+    call 04be3h                               ; e8 06 5b
     inc sp                                    ; 44
     inc sp                                    ; 44
     test ax, ax                               ; 85 c0
     jne short 0f0feh                          ; 75 1b
     mov ax, strict word 00003h                ; b8 03 00
     push strict byte 00003h                   ; 6a 03
-    call 0490eh                               ; e8 23 58
+    call 04be3h                               ; e8 f8 5a
     inc sp                                    ; 44
     inc sp                                    ; 44
     test ax, ax                               ; 85 c0
     jne short 0f0feh                          ; 75 0d
     mov ax, strict word 00004h                ; b8 04 00
     push ax                                   ; 50
-    call 0490eh                               ; e8 16 58
+    call 04be3h                               ; e8 eb 5a
     inc sp                                    ; 44
     inc sp                                    ; 44
     test ax, ax                               ; 85 c0
@@ -16104,20 +16616,20 @@ int15_handler:                               ; 0xff859 LB 0x2e
     je short 0f882h                           ; 74 0e
     cmp ah, 0c2h                              ; 80 fc c2
     je short 0f887h                           ; 74 0e
-    call 0616eh                               ; e8 f2 68
+    call 064bbh                               ; e8 3f 6c
     popaw                                     ; 61
     pop ES                                    ; 07
     pop DS                                    ; 1f
     popfw                                     ; 9d
     jmp short 0f895h                          ; eb 13
-    call 091ceh                               ; e8 49 99
+    call 0976dh                               ; e8 e8 9e
     jmp short 0f87ch                          ; eb f5
 int15_handler_mouse:                         ; 0xff887 LB 0x5
-    call 06f88h                               ; e8 fe 76
+    call 072d5h                               ; e8 4b 7a
     jmp short 0f87ch                          ; eb f0
 int15_handler32:                             ; 0xff88c LB 0x9
     pushad                                    ; 66 60
-    call 0663bh                               ; e8 aa 6d
+    call 06988h                               ; e8 f7 70
     popad                                     ; 66 61
     jmp short 0f87dh                          ; eb e8
 iret_modify_cf:                              ; 0xff895 LB 0x14
@@ -16147,7 +16659,7 @@ int74_handler:                               ; 0xff8a9 LB 0x2e
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 06ebeh                               ; e8 01 76
+    call 0720bh                               ; e8 4e 79
     pop cx                                    ; 59
     jcxz 0f8cch                               ; e3 0c
     push strict byte 00000h                   ; 6a 00
@@ -16239,8 +16751,8 @@ font8x8:                                     ; 0xffa6e LB 0x421
     db  000h, 000h, 0fch, 098h, 030h, 064h, 0fch, 000h, 01ch, 030h, 030h, 0e0h, 030h, 030h, 01ch, 000h
     db  018h, 018h, 018h, 000h, 018h, 018h, 018h, 000h, 0e0h, 030h, 030h, 01ch, 030h, 030h, 0e0h, 000h
     db  076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h
-    db  080h, 0fch, 0b1h, 075h, 00fh, 006h, 01eh, 00eh, 01fh, 0fch, 066h, 060h, 0e8h, 061h, 095h, 066h
-    db  061h, 01fh, 007h, 0cfh, 006h, 01eh, 060h, 00eh, 01fh, 0fch, 0e8h, 0cah, 06dh, 061h, 01fh, 007h
+    db  080h, 0fch, 0b1h, 075h, 00fh, 006h, 01eh, 00eh, 01fh, 0fch, 066h, 060h, 0e8h, 000h, 09bh, 066h
+    db  061h, 01fh, 007h, 0cfh, 006h, 01eh, 060h, 00eh, 01fh, 0fch, 0e8h, 017h, 071h, 061h, 01fh, 007h
     db  0cfh
 int70_handler:                               ; 0xffe8f LB 0x16
     push ES                                   ; 06
@@ -16249,7 +16761,7 @@ int70_handler:                               ; 0xffe8f LB 0x16
     push CS                                   ; 0e
     pop DS                                    ; 1f
     cld                                       ; fc
-    call 06b97h                               ; e8 ff 6c
+    call 06ee4h                               ; e8 4c 70
     popaw                                     ; 61
     pop DS                                    ; 1f
     pop ES                                    ; 07
@@ -16348,4 +16860,4 @@ dummy_iret:                                  ; 0xfff53 LB 0x9d
     db  'XM'
 cpu_reset:                                   ; 0xffff0 LB 0x10
     jmp far 0f000h:0e05bh                     ; ea 5b e0 00 f0
-    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 058h
+    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 085h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
index edc149c..e28c48d 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
@@ -1 +1 @@
-9aa652a74769c1118ad5a74e4c98bf7f *VBoxPcBios.rom
+244d851aac4423711b2f89b92f9e26e9 *VBoxPcBios.rom
diff --git a/src/VBox/Devices/PC/BIOS/ahci.c b/src/VBox/Devices/PC/BIOS/ahci.c
index 1e2434f..6d160a2 100644
--- a/src/VBox/Devices/PC/BIOS/ahci.c
+++ b/src/VBox/Devices/PC/BIOS/ahci.c
@@ -234,12 +234,12 @@ void eax_hi_wr(uint16_t);
     "shl    eax, 16"    \
     parm [ax] modify nomemory;
 
-void high_bits_save(ahci_t __far *ahci)
+void inline high_bits_save(ahci_t __far *ahci)
 {
     ahci->saved_eax_hi = eax_hi_rd();
 }
 
-void high_bits_restore(ahci_t __far *ahci)
+void inline high_bits_restore(ahci_t __far *ahci)
 {
     eax_hi_wr(ahci->saved_eax_hi);
 }
@@ -247,7 +247,7 @@ void high_bits_restore(ahci_t __far *ahci)
 /**
  * Sets a given set of bits in a register.
  */
-static void ahci_ctrl_set_bits(uint16_t iobase, uint16_t reg, uint32_t mask)
+static void inline ahci_ctrl_set_bits(uint16_t iobase, uint16_t reg, uint32_t mask)
 {
     outpd(iobase + AHCI_REG_IDX, reg);
     outpd(iobase + AHCI_REG_DATA, inpd(iobase + AHCI_REG_DATA) | mask);
@@ -256,7 +256,7 @@ static void ahci_ctrl_set_bits(uint16_t iobase, uint16_t reg, uint32_t mask)
 /**
  * Clears a given set of bits in a register.
  */
-static void ahci_ctrl_clear_bits(uint16_t iobase, uint16_t reg, uint32_t mask)
+static void inline ahci_ctrl_clear_bits(uint16_t iobase, uint16_t reg, uint32_t mask)
 {
     outpd(iobase + AHCI_REG_IDX, reg);
     outpd(iobase + AHCI_REG_DATA, inpd(iobase + AHCI_REG_DATA) & ~mask);
@@ -266,7 +266,7 @@ static void ahci_ctrl_clear_bits(uint16_t iobase, uint16_t reg, uint32_t mask)
  * Returns whether at least one of the bits in the given mask is set
  * for a register.
  */
-static uint8_t ahci_ctrl_is_bit_set(uint16_t iobase, uint16_t reg, uint32_t mask)
+static uint8_t inline ahci_ctrl_is_bit_set(uint16_t iobase, uint16_t reg, uint32_t mask)
 {
     outpd(iobase + AHCI_REG_IDX, reg);
     return (inpd(iobase + AHCI_REG_DATA) & mask) != 0;
@@ -342,7 +342,6 @@ static uint16_t ahci_cmd_data(bio_dsk_t __far *bios_dsk, uint8_t cmd)
     ahci_t __far    *ahci  = bios_dsk->ahci_seg :> 0;
     uint16_t        n_sect = bios_dsk->drqp.nsect;
     uint16_t        sectsz = bios_dsk->drqp.sect_sz;
-    uint16_t        prdt_idx;
     fis_d2h __far   *d2h;
 
     _fmemset(&ahci->abCmd[0], 0, sizeof(ahci->abCmd));
@@ -359,8 +358,8 @@ static uint16_t ahci_cmd_data(bio_dsk_t __far *bios_dsk, uint8_t cmd)
     ahci->abCmd[7]  = RT_BIT_32(6); /* LBA access. */
 
     ahci->abCmd[8]  = (bios_dsk->drqp.lba >> 24) & 0xff;
-    ahci->abCmd[9]  = 0;
-    ahci->abCmd[10] = 0;
+    ahci->abCmd[9]  = (bios_dsk->drqp.lba >> 32) & 0xff;
+    ahci->abCmd[10] = (bios_dsk->drqp.lba >> 40) & 0xff;
     ahci->abCmd[11] = 0;
 
     ahci->abCmd[12] = (uint8_t)(n_sect & 0xff);
@@ -372,25 +371,25 @@ static uint16_t ahci_cmd_data(bio_dsk_t __far *bios_dsk, uint8_t cmd)
              (uint32_t)n_sect * sectsz, bios_dsk->drqp.skip_a);
     vds_build_sg_list(&ahci->edds, bios_dsk->drqp.buffer, (uint32_t)n_sect * sectsz);
 
-    prdt_idx = ahci->cur_prd;
-
     /* Set up the PRDT. */
-    ahci->aPrdt[prdt_idx].len       = ahci->edds.u.sg[0].size - 1;
-    ahci->aPrdt[prdt_idx].phys_addr = ahci->edds.u.sg[0].phys_addr;
-    ++prdt_idx;
+    ahci->aPrdt[ahci->cur_prd].len       = ahci->edds.u.sg[0].size - 1;
+    ahci->aPrdt[ahci->cur_prd].phys_addr = ahci->edds.u.sg[0].phys_addr;
+    ++ahci->cur_prd;
 
     if (bios_dsk->drqp.skip_a) {
-        ahci->aPrdt[prdt_idx].len       = bios_dsk->drqp.skip_a - 1;
-        ahci->aPrdt[prdt_idx].phys_addr = ahci->sink_buf_phys;
-        ++prdt_idx;
+        ahci->aPrdt[ahci->cur_prd].len       = bios_dsk->drqp.skip_a - 1;
+        ahci->aPrdt[ahci->cur_prd].phys_addr = ahci->sink_buf_phys;
+        ++ahci->cur_prd;
     }
 
-    ahci->cur_prd = prdt_idx;
+#if DEBUG_AHCI
+    {
+        uint16_t     prdt_idx;
 
-#ifdef DEBUG_AHCI
-    for (prdt_idx = 0; prdt_idx < ahci->cur_prd; ++prdt_idx) {
-        DBG_AHCI("S/G entry %u: %5lu bytes @ %08lX\n", prdt_idx,
-                 ahci->aPrdt[prdt_idx].len + 1, ahci->aPrdt[prdt_idx].phys_addr);
+        for (prdt_idx = 0; prdt_idx < ahci->cur_prd; ++prdt_idx) {
+            DBG_AHCI("S/G entry %u: %5lu bytes @ %08lX\n", prdt_idx,
+                     ahci->aPrdt[prdt_idx].len + 1, ahci->aPrdt[prdt_idx].phys_addr);
+        }
     }
 #endif
 
@@ -524,9 +523,9 @@ int ahci_read_sectors(bio_dsk_t __far *bios_dsk)
     if (device_id > BX_MAX_AHCI_DEVICES)
         BX_PANIC("%s: device_id out of range %d\n", __func__, device_id);
 
-    DBG_AHCI("%s: %u sectors @ LBA %lu, device %d, port %d\n", __func__,
-             bios_dsk->drqp.nsect, bios_dsk->drqp.lba, device_id,
-             bios_dsk->ahcidev[device_id].port);
+    DBG_AHCI("%s: %u sectors @ LBA 0x%llx, device %d, port %d\n", __func__,
+             bios_dsk->drqp.nsect, bios_dsk->drqp.lba,
+             device_id, bios_dsk->ahcidev[device_id].port);
 
     high_bits_save(bios_dsk->ahci_seg :> 0);
     ahci_port_init(bios_dsk->ahci_seg :> 0, bios_dsk->ahcidev[device_id].port);
@@ -556,7 +555,7 @@ int ahci_write_sectors(bio_dsk_t __far *bios_dsk)
     if (device_id > BX_MAX_AHCI_DEVICES)
         BX_PANIC("%s: device_id out of range %d\n", __func__, device_id);
 
-    DBG_AHCI("%s: %u sectors @ LBA %lu, device %d, port %d\n", __func__,
+    DBG_AHCI("%s: %u sectors @ LBA 0x%llx, device %d, port %d\n", __func__,
              bios_dsk->drqp.nsect, bios_dsk->drqp.lba, device_id,
              bios_dsk->ahcidev[device_id].port);
 
@@ -601,7 +600,7 @@ uint16_t ahci_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
     DBG_AHCI("%s: reading %u %u-byte sectors\n", __func__,
              bios_dsk->drqp.nsect, bios_dsk->drqp.sect_sz);
 
-    bios_dsk->drqp.lba     = (uint32_t)length << 8;     //@todo: xfer length limit
+    bios_dsk->drqp.lba     = length << 8;     //@todo: xfer length limit
     bios_dsk->drqp.buffer  = buffer;
     bios_dsk->drqp.nsect   = length / bios_dsk->drqp.sect_sz;
 //    bios_dsk->drqp.sect_sz = 2048;
@@ -689,7 +688,7 @@ void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
             VBOXAHCI_PORT_READ_REG(ahci->iobase, u8Port, AHCI_REG_PORT_SIG, val);
             if (val == 0x101)
             {
-                uint32_t    sectors;
+                uint64_t    sectors;
                 uint16_t    cylinders, heads, spt;
                 chs_t       lgeo;
                 uint8_t     idxCmosChsBase;
@@ -712,11 +711,10 @@ void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
                 spt       = *(uint16_t *)(abBuffer+(6*2));  // word 6
                 sectors   = *(uint32_t *)(abBuffer+(60*2)); // word 60 and word 61
 
-                /** @todo update sectors to be a 64 bit number (also lba...). */
                 if (sectors == 0x0FFFFFFF)  /* For disks bigger than ~128GB */
-                    sectors = *(uint32_t *)(abBuffer+(100*2)); // words 100 to 103 (someday)
+                    sectors = *(uint64_t *)(abBuffer+(100*2)); // words 100 to 103
 
-                DBG_AHCI("AHCI: %ld sectors\n", sectors);
+                DBG_AHCI("AHCI: 0x%llx sectors\n", sectors);
 
                 bios_dsk->ahcidev[devcount_ahci].port = u8Port;
                 bios_dsk->devices[hd_index].type        = DSK_TYPE_AHCI;
@@ -758,8 +756,9 @@ void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
                 else
                     set_geom_lba(&lgeo, sectors);   /* Default EDD-style translated LBA geometry. */
 
-                BX_INFO("AHCI %d-P#%d: PCHS=%u/%u/%u LCHS=%u/%u/%u %lu sectors\n", devcount_ahci,
-                        u8Port, cylinders, heads, spt, lgeo.cylinders, lgeo.heads, lgeo.spt, sectors);
+                BX_INFO("AHCI %d-P#%d: PCHS=%u/%u/%u LCHS=%u/%u/%u 0x%llx sectors\n", devcount_ahci,
+                        u8Port, cylinders, heads, spt, lgeo.cylinders, lgeo.heads, lgeo.spt,
+                        sectors);
 
                 bios_dsk->devices[hd_index].lchs = lgeo;
 
diff --git a/src/VBox/Devices/PC/BIOS/ata.c b/src/VBox/Devices/PC/BIOS/ata.c
index 45b79e9..ed664a7 100644
--- a/src/VBox/Devices/PC/BIOS/ata.c
+++ b/src/VBox/Devices/PC/BIOS/ata.c
@@ -108,7 +108,7 @@ void BIOSCALL ata_init(void)
         bios_dsk->devices[device].pchs.heads     = 0;
         bios_dsk->devices[device].pchs.cylinders = 0;
         bios_dsk->devices[device].pchs.spt       = 0;
-        bios_dsk->devices[device].sectors     = 0;
+        bios_dsk->devices[device].sectors        = 0;
     }
 
     // hdidmap  and cdidmap init.
@@ -206,22 +206,18 @@ void   ata_reset(uint16_t device)
       // 7 : more sectors to write
 uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t count)
 {
-    uint32_t        lba;
     uint16_t        iobase1, iobase2, blksize, mult_blk_cnt;
     uint16_t        cylinder;
-    uint16_t        head;
-    uint16_t        sector;
-    uint16_t        device;
-    uint8_t         channel, slave;
+    uint8_t         head;
+    uint8_t         sector;
+    uint8_t         device;
     uint8_t         status, mode;
     char __far      *buffer;
 
     device  = bios_dsk->drqp.dev_id;
-    channel = device / 2;
-    slave   = device % 2;
 
-    iobase1 = bios_dsk->channels[channel].iobase1;
-    iobase2 = bios_dsk->channels[channel].iobase2;
+    iobase1 = bios_dsk->channels[device / 2].iobase1;
+    iobase2 = bios_dsk->channels[device / 2].iobase2;
     mode    = bios_dsk->devices[device].mode;
     blksize = bios_dsk->devices[device].blksize;
     if (blksize == 0) {   /* If transfer size is exactly 64K */
@@ -245,7 +241,6 @@ uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t c
         return 1;
     }
 
-    lba      = bios_dsk->drqp.lba;
     buffer   = bios_dsk->drqp.buffer;
     sector   = bios_dsk->drqp.sector;
     cylinder = bios_dsk->drqp.cylinder;
@@ -253,23 +248,20 @@ uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t c
 
     // sector will be 0 only on lba access. Convert to lba-chs
     if (sector == 0) {
-        if (lba + count >= 268435456)
+        if (bios_dsk->drqp.lba + count >= 268435456)
         {
-            sector = (lba & 0xff000000L) >> 24;
-            cylinder = 0; /* The parameter lba is just a 32 bit value. */
+            sector = (bios_dsk->drqp.lba >> 24) & 0x00ff;
+            cylinder = (bios_dsk->drqp.lba >> 32) & 0xffff;
             outb(iobase1 + ATA_CB_SC, (count & 0xff00) >> 8);
             outb(iobase1 + ATA_CB_SN, sector);
             outb(iobase1 + ATA_CB_CL, cylinder & 0x00ff);
             outb(iobase1 + ATA_CB_CH, cylinder >> 8);
             /* Leave the bottom 24 bits as is, they are treated correctly by the
             * LBA28 code path. */
-            lba &= 0xffffff;
         }
-        sector = (uint16_t) (lba & 0x000000ffL);
-        lba >>= 8;
-        cylinder = (uint16_t) (lba & 0x0000ffffL);
-        lba >>= 16;
-        head = ((uint16_t) (lba & 0x0000000fL)) | 0x40;
+        sector   = bios_dsk->drqp.lba & 0x000000ffL;
+        cylinder = (bios_dsk->drqp.lba >> 8) & 0x0000ffffL;
+        head     = ((bios_dsk->drqp.lba >> 24) & 0x0000000fL) | 0x40;
     }
 
     outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN);
@@ -278,7 +270,7 @@ uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t c
     outb(iobase1 + ATA_CB_SN, sector);
     outb(iobase1 + ATA_CB_CL, cylinder & 0x00ff);
     outb(iobase1 + ATA_CB_CH, cylinder >> 8);
-    outb(iobase1 + ATA_CB_DH, (slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0) | (uint8_t) head );
+    outb(iobase1 + ATA_CB_DH, ((device & 1) ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0) | head );
     outb(iobase1 + ATA_CB_CMD, command);
 
     if (command == ATA_CMD_READ_MULTIPLE || command == ATA_CMD_READ_MULTIPLE_EXT) {
@@ -459,7 +451,7 @@ void BIOSCALL ata_detect(void)
 
         // Now we send a IDENTIFY command to ATA device
         if (type == DSK_TYPE_ATA) {
-            uint32_t    sectors;
+            uint64_t    sectors;
             uint16_t    cylinders, heads, spt, blksize;
             chs_t       lgeo;
             uint8_t     chsgeo_base;
@@ -483,9 +475,8 @@ void BIOSCALL ata_detect(void)
             spt       = *(uint16_t *)(buffer+(6*2)); // word 6
 
             sectors   = *(uint32_t *)(buffer+(60*2)); // word 60 and word 61
-            /** @todo update sectors to be a 64 bit number (also lba...). */
             if (sectors == 0x0FFFFFFF)  /* For disks bigger than ~128GB */
-                sectors = *(uint32_t *)(buffer+(100*2)); // words 100 to 103 (someday)
+                sectors = *(uint64_t *)(buffer+(100*2)); // words 100 to 103
             switch (device)
             {
             case 0:
@@ -594,8 +585,7 @@ void BIOSCALL ata_detect(void)
 
             switch (type) {
             case DSK_TYPE_ATA:
-                sizeinmb = bios_dsk->devices[device].sectors;
-                sizeinmb >>= 11;
+                sizeinmb = (bios_dsk->devices[device].sectors >> 11);
             case DSK_TYPE_ATAPI:
                 // Read ATA/ATAPI version
                 ataversion = ((uint16_t)(*(buffer+161))<<8) | *(buffer+160);
@@ -682,7 +672,7 @@ void BIOSCALL ata_detect(void)
       // 7 : more sectors to write
 uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t count)
 {
-    uint32_t        lba;
+    uint64_t        lba;
     char __far      *buffer;
     uint16_t        iobase1, iobase2, blksize;
     uint16_t        cylinder;
@@ -723,8 +713,8 @@ uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t
     if (sector == 0) {
         if (lba + count >= 268435456)
         {
-            sector = (lba & 0xff000000L) >> 24;
-            cylinder = 0; /* The parameter lba is just a 32 bit value. */
+            sector = (lba >> 24) & 0x00ff;
+            cylinder = (lba >> 32) & 0xffff;
             outb(iobase1 + ATA_CB_SC, (count & 0xff00) >> 8);
             outb(iobase1 + ATA_CB_SN, sector);
             outb(iobase1 + ATA_CB_CL, cylinder & 0x00ff);
@@ -836,14 +826,17 @@ int ata_read_sectors(bio_dsk_t __far *bios_dsk)
     if (bios_dsk->drqp.sector) {
         /* CHS addressing. */
         bios_dsk->devices[device_id].blksize = n_sect * 0x200;
+        BX_DEBUG_ATA("%s: reading %u sectors (CHS)\n", __func__, n_sect);
         status = ata_cmd_data_in(bios_dsk, ATA_CMD_READ_MULTIPLE, n_sect);
         bios_dsk->devices[device_id].blksize = 0x200;
     } else {
         /* LBA addressing. */
-        if (bios_dsk->drqp.lba + n_sect >= 268435456)
+        if (bios_dsk->drqp.lba + n_sect >= 268435456) {
+            BX_DEBUG_ATA("%s: reading %u sector (LBA,EXT)\n", __func__, n_sect);
             status = ata_cmd_data_in(bios_dsk, ATA_CMD_READ_SECTORS_EXT, n_sect);
-        else {
+        } else {
             bios_dsk->devices[device_id].blksize = n_sect * 0x200;
+            BX_DEBUG_ATA("%s: reading %u sector (LBA,MULT)\n", __func__, n_sect);
             status = ata_cmd_data_in(bios_dsk, ATA_CMD_READ_MULTIPLE, n_sect);
             bios_dsk->devices[device_id].blksize = 0x200;
         }
diff --git a/src/VBox/Devices/PC/BIOS/boot.c b/src/VBox/Devices/PC/BIOS/boot.c
index b3ed205..344bf9a 100644
--- a/src/VBox/Devices/PC/BIOS/boot.c
+++ b/src/VBox/Devices/PC/BIOS/boot.c
@@ -337,3 +337,4 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
     // return the boot segment
     return (((uint32_t)bootdrv) << 16) + bootseg;
 }
+
diff --git a/src/VBox/Devices/PC/BIOS/disk.c b/src/VBox/Devices/PC/BIOS/disk.c
index 355a976..ecfb49f 100644
--- a/src/VBox/Devices/PC/BIOS/disk.c
+++ b/src/VBox/Devices/PC/BIOS/disk.c
@@ -98,12 +98,14 @@ dsk_acc_t   dskacc[DSKTYP_CNT] = {
  * Phoenix EDD 3.0. This is used as a fallback to generate sane logical
  * geometry in case none was provided in CMOS.
  */
-void set_geom_lba(chs_t __far *lgeo, uint32_t nsectors)
+void set_geom_lba(chs_t __far *lgeo, uint64_t nsectors64)
 {
     uint32_t    limit = 8257536;    /* 1024 * 128 * 63 */
+    uint32_t    nsectors;
     unsigned    heads = 255;
     int         i;
 
+    nsectors = (nsectors64 >> 32) ? 0xFFFFFFFFL : (uint32_t)nsectors64;
     /* Start with ~4GB limit, go down to 504MB. */
     for (i = 0; i < 4; ++i) {
         if (nsectors <= limit)
@@ -330,7 +332,7 @@ int13_success_noah:
 
 void BIOSCALL int13_harddisk_ext(disk_regs_t r)
 {
-    uint32_t            lba;
+    uint64_t            lba;
     uint16_t            ebda_seg = read_word(0x0040,0x000E);
     uint16_t            segment, offset;
     uint16_t            npc, nph, npspt;
@@ -383,18 +385,13 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
         segment = i13_ext->segment;
         offset  = i13_ext->offset;
 
-        BX_DEBUG_INT13_HD("%s: %d sectors from lba %lu @ %04x:%04x\n", __func__,
-                          count, i13_ext->lba1, segment, offset);
-
-        // Can't use 64 bits lba
+        // Get 64 bits lba and check
         lba = i13_ext->lba2;
-        if (lba != 0L) {
-            BX_PANIC("%s: function %02x. Can't use 64bits lba\n", __func__, GET_AH());
-            goto int13x_fail;
-        }
+        lba <<= 32;
+        lba |= i13_ext->lba1;
 
-        // Get 32 bits lba and check
-        lba = i13_ext->lba1;
+        BX_DEBUG_INT13_HD("%s: %d sectors from LBA 0x%llx @ %04x:%04x\n", __func__,
+                          count, lba, segment, offset);
 
         type = bios_dsk->devices[device].type;
         if (lba >= bios_dsk->devices[device].sectors) {
@@ -466,8 +463,8 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
             dpt->heads     = nph;
             dpt->spt       = npspt;
             dpt->blksize   = blksize;
-            dpt->sector_count1 = lba;   // FIXME should be Bit64
-            dpt->sector_count2 = 0;
+            dpt->sector_count1 = lba;
+            dpt->sector_count2 = lba >> 32;
         }
 
         /* Fill in EDD 2.x table. */
diff --git a/src/VBox/Devices/PC/BIOS/ebda.h b/src/VBox/Devices/PC/BIOS/ebda.h
index dd9352d..a1cd5df 100644
--- a/src/VBox/Devices/PC/BIOS/ebda.h
+++ b/src/VBox/Devices/PC/BIOS/ebda.h
@@ -192,7 +192,7 @@ typedef struct {
     uint16_t    blksize;      /* Disk block size. */
     chs_t       lchs;         /* Logical CHS geometry. */
     chs_t       pchs;         /* Physical CHS geometry. */
-    uint32_t    sectors;      /* Total sector count. */
+    uint64_t    sectors;      /* Total sector count. */
 } disk_dev_t;
 
 /* A structure for passing disk request information around. This structure
@@ -200,7 +200,7 @@ typedef struct {
  * one such structure is sufficient.
  */
 typedef struct {
-    uint32_t    lba;                /* Starting LBA. */
+    uint64_t    lba;                /* Starting LBA. */
     void __far  *buffer;            /* Read/write data buffer pointer. */
     uint8_t     dev_id;             /* Device ID; index into devices array. */
     uint16_t    nsect;              /* Number of sectors to be transferred. */
@@ -317,7 +317,7 @@ int __fastcall scsi_write_sectors(bio_dsk_t __far *bios_dsk);
 int __fastcall ahci_read_sectors(bio_dsk_t __far *bios_dsk);
 int __fastcall ahci_write_sectors(bio_dsk_t __far *bios_dsk);
 
-extern void set_geom_lba(chs_t __far *lgeo, uint32_t nsectors);
+extern void set_geom_lba(chs_t __far *lgeo, uint64_t nsectors);
 
 // @todo: put this elsewhere (and change/eliminate?)
 #define SET_DISK_RET_STATUS(status) write_byte(0x0040, 0x0074, status)
diff --git a/src/VBox/Devices/PC/BIOS/eltorito.c b/src/VBox/Devices/PC/BIOS/eltorito.c
index 85c8d44..b1eb5b0 100644
--- a/src/VBox/Devices/PC/BIOS/eltorito.c
+++ b/src/VBox/Devices/PC/BIOS/eltorito.c
@@ -1049,3 +1049,4 @@ int13_success_noah:
 // ---------------------------------------------------------------------------
 // End of int13 for cdrom
 // ---------------------------------------------------------------------------
+
diff --git a/src/VBox/Devices/PC/BIOS/inlines.h b/src/VBox/Devices/PC/BIOS/inlines.h
index 2a7b4f9..f15ace3 100644
--- a/src/VBox/Devices/PC/BIOS/inlines.h
+++ b/src/VBox/Devices/PC/BIOS/inlines.h
@@ -117,14 +117,24 @@ char __far *rep_outsw(char __far *buffer, unsigned nwords, unsigned port);
 char __far *rep_outsd(char __far *buffer, unsigned ndwords, unsigned port);
 #pragma aux rep_outsd = ".386" "rep outs dx,dword ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
 
-uint16_t __far swap_16(uint16_t val);
+uint16_t swap_16(uint16_t val);
 #pragma aux swap_16 = "xchg ah,al" parm [ax] value [ax] modify exact [ax] nomemory;
 
-uint32_t __far swap_32(uint32_t val);
+uint32_t swap_32(uint32_t val);
 #pragma aux swap_32 =   \
     "xchg   ah, al"     \
     "xchg   dh, dl"     \
     "xchg   ax, dx"     \
     parm [dx ax] value [dx ax] modify exact [dx ax] nomemory;
 
+uint64_t swap_64(uint64_t val);
+#pragma aux swap_64 =   \
+    "xchg   ah, al"     \
+    "xchg   bh, bl"     \
+    "xchg   ch, cl"     \
+    "xchg   dh, dl"     \
+    "xchg   ax, dx"     \
+    "xchg   bx, cx"     \
+    parm [ax bx cx dx] value [ax bx cx dx] modify exact [ax bx cx dx] nomemory;
+
 #endif
diff --git a/src/VBox/Devices/PC/BIOS/logo.c b/src/VBox/Devices/PC/BIOS/logo.c
index cf597a9..766517b 100644
--- a/src/VBox/Devices/PC/BIOS/logo.c
+++ b/src/VBox/Devices/PC/BIOS/logo.c
@@ -522,3 +522,4 @@ void delay_boot(uint16_t secs)
     // Restore PIT ticks
     wait_uninit();
 }
+
diff --git a/src/VBox/Devices/PC/BIOS/print.c b/src/VBox/Devices/PC/BIOS/print.c
index af5e85f..bc41bf7 100644
--- a/src/VBox/Devices/PC/BIOS/print.c
+++ b/src/VBox/Devices/PC/BIOS/print.c
@@ -144,7 +144,9 @@ void put_str_near(uint16_t action, const char __near *s)
 //
 //   Supports %[format_width][length]format
 //   where format can be x,X,u,d,s,S,c
-//   and the optional length modifier is l (ell)
+//   and the optional length modifier is l (ell, long 32-bit) or ll
+//   (long long, 64-bit).
+//   Only x,X work with ll
 //--------------------------------------------------------------------------
 void bios_printf(uint16_t action, const char *s, ...)
 {
@@ -189,6 +191,32 @@ void bios_printf(uint16_t action, const char *s, ...)
                 else if (c == 'u') {
                     put_uint(action, arg, format_width, 0);
                 }
+                else if (c == 'l' && s[1] == 'l') {
+                    uint64_t llval;
+                    uint16_t *cp16;
+
+                    s += 2;
+                    c = *s;
+                    cp16 = (uint16_t *)&llval;
+                    cp16[0] = arg;
+                    cp16[1] = va_arg( args, uint16_t );
+                    cp16[2] = va_arg( args, uint16_t );
+                    cp16[3] = va_arg( args, uint16_t );
+                    if (c == 'x' || c == 'X') {
+                        if (format_width == 0)
+                            format_width = 16;
+                        if (c == 'x')
+                            hexadd = 'a';
+                        else
+                            hexadd = 'A';
+                        for (i=format_width-1; i>=0; i--) {
+                            nibble =  (llval >> (i * 4)) & 0x000f;
+                            send (action, (nibble<=9)? (nibble+'0') : (nibble-10+hexadd));
+                        }
+                    } else {
+                        BX_PANIC("bios_printf: unknown %ll format\n");
+                    }
+                }
                 else if (c == 'l') {
                     s++;
                     c = *s; /* is it ld,lx,lu? */
@@ -252,3 +280,4 @@ void bios_printf(uint16_t action, const char *s, ...)
 }
 
 // End of printf support
+
diff --git a/src/VBox/Devices/PC/BIOS/scsi.c b/src/VBox/Devices/PC/BIOS/scsi.c
index 36393de..25243d0 100644
--- a/src/VBox/Devices/PC/BIOS/scsi.c
+++ b/src/VBox/Devices/PC/BIOS/scsi.c
@@ -48,10 +48,14 @@
 #define VBSCSI_MAX_DEVICES 16 /* Maximum number of devices a SCSI device can have. */
 
 /* Command opcodes. */
+#define SCSI_SERVICE_ACT   0x9e
 #define SCSI_INQUIRY       0x12
-#define SCSI_READ_CAPACITY 0x25
+#define SCSI_READ_CAP_10   0x25
 #define SCSI_READ_10       0x28
 #define SCSI_WRITE_10      0x2a
+#define SCSI_READ_CAP_16   0x10    /* Not an opcode by itself, sub-action for the "Service Action" */
+#define SCSI_READ_16       0x88
+#define SCSI_WRITE_16      0x8a
 
 /* Data transfer direction. */
 #define SCSI_TXDIR_FROM_DEVICE 0
@@ -68,10 +72,19 @@ typedef struct {
     uint8_t     pad2;       /* Unused. */
 } cdb_rw10;
 
+/* READ_16/WRITE_16 CDB layout. */
+typedef struct {
+    uint16_t    command;    /* Command. */
+    uint64_t    lba;        /* LBA, MSB first! */
+    uint32_t    nsect32;    /* Sector count, MSB first! */
+    uint8_t     pad1;       /* Unused. */
+    uint8_t     pad2;       /* Unused. */
+} cdb_rw16;
+
 #pragma pack()
 
 ct_assert(sizeof(cdb_rw10) == 10);
-
+ct_assert(sizeof(cdb_rw16) == 16);
 
 void insb_discard(unsigned nbytes, unsigned port);
 #pragma aux insb_discard =  \
@@ -93,8 +106,7 @@ int scsi_cmd_data_in(uint16_t io_base, uint8_t target_id, uint8_t __far *aCDB,
         status = inb(io_base + VBSCSI_REGISTER_STATUS);
     while (status & VBSCSI_BUSY);
 
-
-    sizes = ((length >> 12) & 0xF0) | cbCDB;
+    sizes = ((length >> 12) & 0xF0) | ((cbCDB == 16) ? 0 : cbCDB);
     outb(io_base + VBSCSI_REGISTER_COMMAND, target_id);                 /* Write the target ID. */
     outb(io_base + VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_FROM_DEVICE);    /* Write the transfer direction. */
     outb(io_base + VBSCSI_REGISTER_COMMAND, sizes);                     /* Write CDB size and top bufsize bits. */
@@ -145,7 +157,7 @@ int scsi_cmd_data_out(uint16_t io_base, uint8_t target_id, uint8_t __far *aCDB,
     while (status & VBSCSI_BUSY);
 
 
-    sizes = ((length >> 12) & 0xF0) | cbCDB;
+    sizes = ((length >> 12) & 0xF0) | ((cbCDB == 16) ? 0 : cbCDB);
     outb(io_base + VBSCSI_REGISTER_COMMAND, target_id);                 /* Write the target ID. */
     outb(io_base + VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_TO_DEVICE);      /* Write the transfer direction. */
     outb(io_base + VBSCSI_REGISTER_COMMAND, sizes);                     /* Write CDB size and top bufsize bits. */
@@ -194,8 +206,8 @@ int scsi_cmd_data_out(uint16_t io_base, uint8_t target_id, uint8_t __far *aCDB,
 int scsi_read_sectors(bio_dsk_t __far *bios_dsk)
 {
     uint8_t             rc;
-    cdb_rw10            cdb;
-    uint16_t            count;
+    cdb_rw16            cdb;
+    uint32_t            count;
     uint16_t            io_base;
     uint8_t             target_id;
     uint8_t             device_id;
@@ -207,10 +219,10 @@ int scsi_read_sectors(bio_dsk_t __far *bios_dsk)
     count    = bios_dsk->drqp.nsect;
 
     /* Prepare a CDB. */
-    cdb.command = SCSI_READ_10;
-    cdb.lba     = swap_32(bios_dsk->drqp.lba);
+    cdb.command = SCSI_READ_16;
+    cdb.lba     = swap_64(bios_dsk->drqp.lba);
     cdb.pad1    = 0;
-    cdb.nsect   = swap_16(count);
+    cdb.nsect32 = swap_32(count);
     cdb.pad2    = 0;
 
 
@@ -220,7 +232,7 @@ int scsi_read_sectors(bio_dsk_t __far *bios_dsk)
     DBG_SCSI("%s: reading %u sectors, device %d, target %d\n", __func__,
              count, device_id, bios_dsk->scsidev[device_id].target_id);
 
-    rc = scsi_cmd_data_in(io_base, target_id, (void __far *)&cdb, 10,
+    rc = scsi_cmd_data_in(io_base, target_id, (void __far *)&cdb, 16,
                           bios_dsk->drqp.buffer, (count * 512L));
 
     if (!rc)
@@ -243,8 +255,8 @@ int scsi_read_sectors(bio_dsk_t __far *bios_dsk)
 int scsi_write_sectors(bio_dsk_t __far *bios_dsk)
 {
     uint8_t             rc;
-    cdb_rw10            cdb;
-    uint16_t            count;
+    cdb_rw16            cdb;
+    uint32_t            count;
     uint16_t            io_base;
     uint8_t             target_id;
     uint8_t             device_id;
@@ -256,10 +268,10 @@ int scsi_write_sectors(bio_dsk_t __far *bios_dsk)
     count    = bios_dsk->drqp.nsect;
 
     /* Prepare a CDB. */
-    cdb.command = SCSI_WRITE_10;
-    cdb.lba     = swap_32(bios_dsk->drqp.lba);
+    cdb.command = SCSI_WRITE_16;
+    cdb.lba     = swap_64(bios_dsk->drqp.lba);
     cdb.pad1    = 0;
-    cdb.nsect   = swap_16(count);
+    cdb.nsect32 = swap_32(count);
     cdb.pad2    = 0;
 
     io_base   = bios_dsk->scsidev[device_id].io_base;
@@ -268,7 +280,7 @@ int scsi_write_sectors(bio_dsk_t __far *bios_dsk)
     DBG_SCSI("%s: writing %u sectors, device %d, target %d\n", __func__,
              count, device_id, bios_dsk->scsidev[device_id].target_id);
 
-    rc = scsi_cmd_data_out(io_base, target_id, (void __far *)&cdb, 10,
+    rc = scsi_cmd_data_out(io_base, target_id, (void __far *)&cdb, 16,
                            bios_dsk->drqp.buffer, (count * 512L));
 
     if (!rc)
@@ -402,7 +414,7 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
     for (i = 0; i < VBSCSI_MAX_DEVICES; i++)
     {
         uint8_t     rc;
-        uint8_t     aCDB[10];
+        uint8_t     aCDB[16];
         uint8_t     hd_index, devcount_scsi;
 
         aCDB[0] = SCSI_INQUIRY;
@@ -427,31 +439,31 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
             /* We add the disk only if the maximum is not reached yet. */
             if (devcount_scsi < BX_MAX_SCSI_DEVICES)
             {
-                uint32_t    sectors, sector_size, cylinders;
+                uint64_t    sectors, t;
+                uint32_t    sector_size, cylinders;
                 uint16_t    heads, sectors_per_track;
                 uint8_t     hdcount;
                 uint8_t     cmos_base;
 
                 /* Issue a read capacity command now. */
                 _fmemset(aCDB, 0, sizeof(aCDB));
-                aCDB[0] = SCSI_READ_CAPACITY;
+                aCDB[0] = SCSI_SERVICE_ACT;
+                aCDB[1] = SCSI_READ_CAP_16;
+                aCDB[13] = 32; /* Allocation length. */
 
-                rc = scsi_cmd_data_in(io_base, i, aCDB, 10, buffer, 8);
+                rc = scsi_cmd_data_in(io_base, i, aCDB, 16, buffer, 32);
                 if (rc != 0)
                     BX_PANIC("%s: SCSI_READ_CAPACITY failed\n", __func__);
 
-                /* Build sector number and size from the buffer. */
-                //@todo: byte swapping for dword sized items should be farmed out...
-                sectors =   ((uint32_t)buffer[0] << 24)
-                          | ((uint32_t)buffer[1] << 16)
-                          | ((uint32_t)buffer[2] << 8)
-                          | ((uint32_t)buffer[3]);
-                ++sectors;  /* Returned value is the last LBA, zero-based. */
+                /* The value returned is the last addressable LBA, not
+                 * the size, which what "+ 1" is for.
+                 */
+                sectors = swap_64(*(uint64_t *)buffer) + 1;
 
-                sector_size =   ((uint32_t)buffer[4] << 24)
-                              | ((uint32_t)buffer[5] << 16)
-                              | ((uint32_t)buffer[6] << 8)
-                              | ((uint32_t)buffer[7]);
+                sector_size =   ((uint32_t)buffer[8] << 24)
+                              | ((uint32_t)buffer[9] << 16)
+                              | ((uint32_t)buffer[10] << 8)
+                              | ((uint32_t)buffer[11]);
 
                 /* We only support the disk if sector size is 512 bytes. */
                 if (sector_size != 512)
@@ -496,18 +508,22 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
                     {
                         heads = 255;
                         sectors_per_track = 63;
+                        /* Approximate x / (255 * 63) using shifts */
+                        t = (sectors >> 6) + (sectors >> 12);
+                        cylinders = (t >> 8) + (t >> 16);
                     }
                     else if (sectors >= (uint32_t)2 * 1024 * 1024)
                     {
                         heads = 128;
                         sectors_per_track = 32;
+                        cylinders = sectors >> 12;
                     }
                     else
                     {
                         heads = 64;
                         sectors_per_track = 32;
+                        cylinders = sectors >> 11;
                     }
-                    cylinders = (uint32_t)(sectors / (heads * sectors_per_track));
                 }
 
                 /* Calculate index into the generic disk table. */
@@ -522,24 +538,22 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
                 bios_dsk->devices[hd_index].blksize     = sector_size;
                 bios_dsk->devices[hd_index].translation = GEO_TRANSLATION_LBA;
 
-                /* Write LCHS values. */
+                /* Write LCHS/PCHS values. */
                 bios_dsk->devices[hd_index].lchs.heads = heads;
                 bios_dsk->devices[hd_index].lchs.spt   = sectors_per_track;
-                if (cylinders > 1024)
-                    bios_dsk->devices[hd_index].lchs.cylinders = 1024;
-                else
-                    bios_dsk->devices[hd_index].lchs.cylinders = (uint16_t)cylinders;
-
-                BX_INFO("SCSI %d-ID#%d: LCHS=%u/%u/%u %lu sectors\n", devcount_scsi,
-                        i, (uint16_t)cylinders, heads, sectors_per_track, sectors);
-
-                /* Write PCHS values. */
                 bios_dsk->devices[hd_index].pchs.heads = heads;
                 bios_dsk->devices[hd_index].pchs.spt   = sectors_per_track;
-                if (cylinders > 1024)
+
+                if (cylinders > 1024) {
+                    bios_dsk->devices[hd_index].lchs.cylinders = 1024;
                     bios_dsk->devices[hd_index].pchs.cylinders = 1024;
-                else
+                } else {
+                    bios_dsk->devices[hd_index].lchs.cylinders = (uint16_t)cylinders;
                     bios_dsk->devices[hd_index].pchs.cylinders = (uint16_t)cylinders;
+                }
+
+                BX_INFO("SCSI %d-ID#%d: LCHS=%lu/%u/%u 0x%llx sectors\n", devcount_scsi,
+                        i, (uint32_t)cylinders, heads, sectors_per_track, sectors);
 
                 bios_dsk->devices[hd_index].sectors = sectors;
 
@@ -659,3 +673,4 @@ void BIOSCALL scsi_init(void)
         DBG_SCSI("%s: LSI Logic SAS adapter not detected\n", __func__);
     }
 }
+
diff --git a/src/VBox/Devices/Storage/DrvSCSI.cpp b/src/VBox/Devices/Storage/DrvSCSI.cpp
index 4aa5802..ab006c4 100644
--- a/src/VBox/Devices/Storage/DrvSCSI.cpp
+++ b/src/VBox/Devices/Storage/DrvSCSI.cpp
@@ -1039,19 +1039,26 @@ static DECLCALLBACK(int) drvscsiConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, ui
         }
     }
 
-    /* Register statistics counter. */
-    /** @todo aeichner: Find a way to put the instance number of the attached
-     * controller device when we support more than one controller of the same type.
-     * At the moment we have the 0 hardcoded. */
-    PDMDrvHlpSTAMRegisterF(pDrvIns, &pThis->StatBytesRead, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES,
-                            "Amount of data read.", "/Devices/SCSI0/%d/ReadBytes", pDrvIns->iInstance);
-    PDMDrvHlpSTAMRegisterF(pDrvIns, &pThis->StatBytesWritten, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES,
-                            "Amount of data written.", "/Devices/SCSI0/%d/WrittenBytes", pDrvIns->iInstance);
+    const char *pszCtrl = NULL;
+    uint32_t iCtrlInstance = 0;
+    uint32_t iCtrlLun = 0;
 
-    pThis->StatIoDepth = 0;
+    rc = pThis->pDevScsiPort->pfnQueryDeviceLocation(pThis->pDevScsiPort, &pszCtrl, &iCtrlInstance, &iCtrlLun);
+    if (RT_SUCCESS(rc))
+    {
+        const char *pszCtrlId =   strcmp(pszCtrl, "Msd") == 0 ? "USB"
+                                : strcmp(pszCtrl, "lsilogicsas") == 0 ? "SAS"
+                                : "SCSI";
+        /* Register statistics counter. */
+        PDMDrvHlpSTAMRegisterF(pDrvIns, &pThis->StatBytesRead, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES,
+                                "Amount of data read.", "/Devices/%s%u/%u/ReadBytes", pszCtrlId, iCtrlInstance, iCtrlLun);
+        PDMDrvHlpSTAMRegisterF(pDrvIns, &pThis->StatBytesWritten, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES,
+                                "Amount of data written.", "/Devices/%s%u/%u/WrittenBytes", pszCtrlId, iCtrlInstance, iCtrlLun);
+        PDMDrvHlpSTAMRegisterF(pDrvIns, (void *)&pThis->StatIoDepth, STAMTYPE_U32, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
+                                "Number of active tasks.", "/Devices/%s%u/%u/IoDepth", pszCtrlId, iCtrlInstance, iCtrlLun);
+    }
 
-    PDMDrvHlpSTAMRegisterF(pDrvIns, (void *)&pThis->StatIoDepth, STAMTYPE_U32, STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT,
-                            "Number of active tasks.", "/Devices/SCSI0/%d/IoDepth", pDrvIns->iInstance);
+    pThis->StatIoDepth = 0;
 
     if (!pThis->pDrvBlockAsync)
     {
diff --git a/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp b/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp
index 0766fcf..b1abbe6 100644
--- a/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp
+++ b/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp
@@ -22,6 +22,7 @@
 #define LOG_GROUP LOG_GROUP_DRV_VD
 #include <VBox/cdefs.h>
 #include <VBox/err.h>
+#include <VBox/log.h>
 #include <iprt/assert.h>
 #include <iprt/list.h>
 #include <iprt/mem.h>
@@ -93,6 +94,9 @@ typedef struct HBDMGRDACLBKARGS
     PHBDMGRINT         pThis;
     /** The status code returned by the callback, after the operation completed. */
     DAReturn           rcDA;
+    /** A detailed error string in case of an error, can be NULL.
+     * Must be freed with RTStrFree(). */
+    char              *pszErrDetail;
 } HBDMGRDACLBKARGS;
 typedef HBDMGRDACLBKARGS *PHBDMGRDACLBKARGS;
 
@@ -205,10 +209,23 @@ static int hbdMgrDAReturn2VBoxStatus(DAReturn hReturn)
 static DECLCALLBACK(void) hbdMgrDACallbackComplete(DADiskRef hDiskRef, DADissenterRef hDissenterRef, void *pvContext)
 {
     PHBDMGRDACLBKARGS pArgs = (PHBDMGRDACLBKARGS)pvContext;
+    pArgs->pszErrDetail = NULL;
+
     if (!hDissenterRef)
         pArgs->rcDA = kDAReturnSuccess;
     else
+    {
+        CFStringRef hStrErr = DADissenterGetStatusString(hDissenterRef);
+        if (hStrErr)
+        {
+            const char *pszErrDetail = CFStringGetCStringPtr(hStrErr, kCFStringEncodingUTF8);
+            if (pszErrDetail)
+                pArgs->pszErrDetail = RTStrDup(pszErrDetail);
+            CFRelease(hStrErr);
+        }
         pArgs->rcDA = DADissenterGetStatus(hDissenterRef);
+
+    }
     RTSemEventSignal(pArgs->pThis->hEvtCallback);
 }
 
@@ -449,11 +466,22 @@ DECLHIDDEN(int) HBDMgrClaimBlockDevice(HBDMGR hHbdMgr, const char *pszFilename)
                         rc = VERR_NO_MEMORY;
                 }
                 else if (RT_SUCCESS(rc))
+                {
                     rc = hbdMgrDAReturn2VBoxStatus(CalllbackArgs.rcDA);
+                    LogRel(("HBDMgrClaimBlockDevice: DADiskUnmount(\"%s\") failed with %Rrc (%s)\n",
+                            pszFilename, rc, CalllbackArgs.pszErrDetail ? CalllbackArgs.pszErrDetail : "<no detail>"));
+                    if (CalllbackArgs.pszErrDetail)
+                        RTStrFree(CalllbackArgs.pszErrDetail);
+                }
             }
             else if (RT_SUCCESS(rc))
+            {
                 rc = hbdMgrDAReturn2VBoxStatus(CalllbackArgs.rcDA);
-
+                LogRel(("HBDMgrClaimBlockDevice: DADiskClaim(\"%s\") failed with %Rrc (%s)\n",
+                        pszFilename, rc, CalllbackArgs.pszErrDetail ? CalllbackArgs.pszErrDetail : "<no detail>"));
+                if (CalllbackArgs.pszErrDetail)
+                    RTStrFree(CalllbackArgs.pszErrDetail);
+            }
             if (RT_FAILURE(rc))
                 CFRelease(hDiskRef);
         }
diff --git a/src/VBox/Devices/Storage/VBoxSCSI.cpp b/src/VBox/Devices/Storage/VBoxSCSI.cpp
index 12761ff..388be3c 100644
--- a/src/VBox/Devices/Storage/VBoxSCSI.cpp
+++ b/src/VBox/Devices/Storage/VBoxSCSI.cpp
@@ -175,6 +175,9 @@ int vboxscsiWriteRegister(PVBOXSCSI pVBoxSCSI, uint8_t iRegister, uint8_t uVal)
             else if (pVBoxSCSI->enmState == VBOXSCSISTATE_READ_CDB_SIZE_BUFHI)
             {
                 uint8_t cbCDB = uVal & 0x0F;
+
+                if (cbCDB == 0)
+                    cbCDB = 16;
                 if (cbCDB > VBOXSCSI_CDB_SIZE_MAX)
                     vboxscsiReset(pVBoxSCSI, true /*fEverything*/);
                 else
diff --git a/src/VBox/Devices/Storage/VBoxSCSI.h b/src/VBox/Devices/Storage/VBoxSCSI.h
index 4f4b5e2..776dff5 100644
--- a/src/VBox/Devices/Storage/VBoxSCSI.h
+++ b/src/VBox/Devices/Storage/VBoxSCSI.h
@@ -87,7 +87,7 @@ typedef enum VBOXSCSISTATE
 #define VBOXSCSI_TXDIR_TO_DEVICE   1
 
 /** Maximum CDB size the BIOS driver sends. */
-#define VBOXSCSI_CDB_SIZE_MAX     10
+#define VBOXSCSI_CDB_SIZE_MAX     16
 
 typedef struct VBOXSCSI
 {
@@ -100,7 +100,7 @@ typedef struct VBOXSCSI
     /** The size of the CDB we are issuing. */
     uint8_t              cbCDB;
     /** The command to issue. */
-    uint8_t              abCDB[12];
+    uint8_t              abCDB[VBOXSCSI_CDB_SIZE_MAX + 4];
     /** Current position in the array. */
     uint8_t              iCDB;
 
diff --git a/src/VBox/Devices/USB/DevOHCI.cpp b/src/VBox/Devices/USB/DevOHCI.cpp
index e7609a7..0047727 100644
--- a/src/VBox/Devices/USB/DevOHCI.cpp
+++ b/src/VBox/Devices/USB/DevOHCI.cpp
@@ -2184,7 +2184,7 @@ static void ohciCalcTimerIntervals(POHCI pThis, uint32_t u32FrameRate)
  * @returns nothing.
  * @param   pThis    The OHCI device data.
  */
-static void ohciFramerateCalcNew(POHCI pThis)
+static bool ohciFramerateCalcNew(POHCI pThis)
 {
     uint32_t uNewFrameRate = pThis->uFrameRate;
 
@@ -2218,7 +2218,9 @@ static void ohciFramerateCalcNew(POHCI pThis)
     {
         LogFlow(("Frame rate changed from %u to %u\n", pThis->uFrameRate, uNewFrameRate));
         ohciCalcTimerIntervals(pThis, uNewFrameRate);
+        return true;
     }
+    return false;
 }
 
 
@@ -2608,9 +2610,10 @@ static DECLCALLBACK(void) ohciRhXferCompletion(PVUSBIROOTHUBPORT pInterface, PVU
     /* finally write back the endpoint descriptor. */
     ohciWriteEd(pThis, pUrb->Hci.EdAddr, &Ed);
 
-    /* Calculate new frame rate and wakeup the . */
-    ohciFramerateCalcNew(pThis);
-    RTSemEventMultiSignal(pThis->hSemEventFrame);
+    /* Calculate new frame rate and wakeup the framer thread if the rate was chnaged. */
+    if (ohciFramerateCalcNew(pThis))
+        RTSemEventMultiSignal(pThis->hSemEventFrame);
+
     RTCritSectLeave(&pThis->CritSect);
 }
 
diff --git a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
index 766b85c..baf8f46 100644
--- a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
+++ b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
@@ -1848,6 +1848,14 @@ int main()
     GEN_CHECK_OFF(AC97DRIVER, MicIn);
     GEN_CHECK_OFF(AC97DRIVER, Out);
 
+    GEN_CHECK_SIZE(HDAINPUTSTREAM);
+    GEN_CHECK_OFF(HDAINPUTSTREAM, pStrmIn);
+    GEN_CHECK_OFF(HDAINPUTSTREAM, phStrmIn);
+
+    GEN_CHECK_SIZE(HDAOUTPUTSTREAM);
+    GEN_CHECK_OFF(HDAOUTPUTSTREAM, pStrmOut);
+    GEN_CHECK_OFF(HDAOUTPUTSTREAM, phStrmOut);
+
     GEN_CHECK_SIZE(HDADRIVER);
     GEN_CHECK_OFF(HDADRIVER, Node);
     GEN_CHECK_OFF(HDADRIVER, pHDAState);
@@ -1858,6 +1866,31 @@ int main()
     GEN_CHECK_OFF(HDADRIVER, MicIn);
     GEN_CHECK_OFF(HDADRIVER, Out);
 
+    GEN_CHECK_SIZE(HDABDLESTATE);
+    GEN_CHECK_OFF(HDABDLESTATE, u32BDLIndex);
+    GEN_CHECK_OFF(HDABDLESTATE, cbBelowFIFOW);
+    GEN_CHECK_OFF(HDABDLESTATE, au8FIFO);
+    GEN_CHECK_OFF(HDABDLESTATE, u32BufOff);
+
+    GEN_CHECK_SIZE(HDABDLE);
+    GEN_CHECK_OFF(HDABDLE, u64BufAdr);
+    GEN_CHECK_OFF(HDABDLE, u32BufSize);
+    GEN_CHECK_OFF(HDABDLE, fIntOnCompletion);
+    GEN_CHECK_OFF(HDABDLE, State);
+
+    GEN_CHECK_SIZE(HDASTREAMSTATE);
+    GEN_CHECK_OFF(HDASTREAMSTATE, cBDLE);
+    GEN_CHECK_OFF(HDASTREAMSTATE, uCurBDLE);
+    GEN_CHECK_OFF(HDASTREAMSTATE, paBDLE);
+
+    GEN_CHECK_SIZE(HDASTREAM);
+    GEN_CHECK_OFF(HDASTREAM, u8Strm);
+    GEN_CHECK_OFF(HDASTREAM, u64BaseDMA);
+    GEN_CHECK_OFF(HDASTREAM, u16FMT);
+    GEN_CHECK_OFF(HDASTREAM, u16FIFOS);
+    GEN_CHECK_OFF(HDASTREAM, u16LVI);
+    GEN_CHECK_OFF(HDASTREAM, State);
+
     GEN_CHECK_SIZE(HDASTATE);
     GEN_CHECK_OFF(HDASTATE, PciDev);
     GEN_CHECK_OFF(HDASTATE, pDevInsR3);
@@ -1868,6 +1901,9 @@ int main()
     GEN_CHECK_OFF(HDASTATE, MMIOBaseAddr);
     GEN_CHECK_OFF(HDASTATE, au32Regs[0]);
     GEN_CHECK_OFF(HDASTATE, au32Regs[HDA_NREGS]);
+    GEN_CHECK_OFF(HDASTATE, StrmStLineIn);
+    GEN_CHECK_OFF(HDASTATE, StrmStOut);
+    GEN_CHECK_OFF(HDASTATE, StrmStMicIn);
     GEN_CHECK_OFF(HDASTATE, u64CORBBase);
     GEN_CHECK_OFF(HDASTATE, u64RIRBBase);
     GEN_CHECK_OFF(HDASTATE, u64DPBase);
@@ -1876,13 +1912,19 @@ int main()
     GEN_CHECK_OFF(HDASTATE, pu64RirbBuf);
     GEN_CHECK_OFF(HDASTATE, cbRirbBuf);
     GEN_CHECK_OFF(HDASTATE, fInReset);
-    GEN_CHECK_OFF(HDASTATE, fCviIoc);
     GEN_CHECK_OFF(HDASTATE, fR0Enabled);
     GEN_CHECK_OFF(HDASTATE, fRCEnabled);
+#ifndef VBOX_WITH_AUDIO_CALLBACKS
     GEN_CHECK_OFF(HDASTATE, pTimer);
-    GEN_CHECK_OFF(HDASTATE, uTicks);
+    GEN_CHECK_OFF(HDASTATE, cTimerTicks);
+    GEN_CHECK_OFF(HDASTATE, uTimerTS);
+#endif
 #ifdef VBOX_WITH_STATISTICS
+# ifndef VBOX_WITH_AUDIO_CALLBACKS
     GEN_CHECK_OFF(HDASTATE, StatTimer);
+# endif
+    GEN_CHECK_OFF(HDASTATE, StatBytesRead);
+    GEN_CHECK_OFF(HDASTATE, StatBytesWritten);
 #endif
     GEN_CHECK_OFF(HDASTATE, pCodec);
     GEN_CHECK_OFF(HDASTATE, lstDrv);
@@ -1890,7 +1932,7 @@ int main()
     GEN_CHECK_OFF(HDASTATE, pSinkLineIn);
     GEN_CHECK_OFF(HDASTATE, pSinkMicIn);
     GEN_CHECK_OFF(HDASTATE, u64BaseTS);
-    GEN_CHECK_OFF(HDASTATE, u8Counter);
+    GEN_CHECK_OFF(HDASTATE, u8RespIntCnt);
 
     return (0);
 }
diff --git a/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp b/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
index a04dea6..c881096 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
@@ -183,7 +183,7 @@ void printUsageInternal(USAGECATEGORY u64Cmd, PRTSTREAM pStrm)
         ? "  createrawvmdk -filename <filename> -rawdisk <diskname>\n"
           "                [-partitions <list of partition numbers> [-mbr <filename>] ]\n"
           "                [-relative]\n"
-          "       Creates a new VMDK image which gives access to an entite host disk (if\n"
+          "       Creates a new VMDK image which gives access to an entire host disk (if\n"
           "       the parameter -partitions is not specified) or some partitions of a\n"
           "       host disk. If access to individual partitions is granted, then the\n"
           "       parameter -mbr can be used to specify an alternative MBR to be used\n"
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
index e0c2cc5..04789a9 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
@@ -1154,7 +1154,7 @@ static HRESULT produceList(enum enmListType enmCommand, bool fOptLong, const Com
                 net->COMGETTER(IPv6Enabled)(&fEnabled);
                 RTPrintf("IPv6 Enabled:   %s\n", fEnabled ? "Yes" : "No");
                 Bstr ipv6prefix;
-                net->COMGETTER(Network)(network.asOutParam());
+                net->COMGETTER(IPv6Prefix)(ipv6prefix.asOutParam());
                 RTPrintf("IPv6 Prefix:    %ls\n", ipv6prefix.raw());
                 net->COMGETTER(NeedDhcpServer)(&fEnabled);
                 RTPrintf("DHCP Enabled:   %s\n", fEnabled ? "Yes" : "No");
diff --git a/src/VBox/Frontends/VirtualBox/VBoxUI.pro b/src/VBox/Frontends/VirtualBox/VBoxUI.pro
index 1f18f0d..b25d9d7 100644
--- a/src/VBox/Frontends/VirtualBox/VBoxUI.pro
+++ b/src/VBox/Frontends/VirtualBox/VBoxUI.pro
@@ -58,6 +58,7 @@ TRANSLATIONS = \
 	nls/VirtualBox_cs.ts \
 	nls/VirtualBox_da.ts \
 	nls/VirtualBox_de.ts \
+	nls/VirtualBox_el.ts \
 	nls/VirtualBox_en.ts \
 	nls/VirtualBox_es.ts \
 	nls/VirtualBox_eu.ts \
diff --git a/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk b/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
index d967d5e..377a527 100644
--- a/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
+++ b/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
@@ -19,6 +19,7 @@
 VBOX_APPROVED_GUI_LANGUAGES := \
 	bg    \
 	cs    \
+	da    \
 	de    \
 	en    \
 	es    \
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
index a7ff8be..68149ff 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
@@ -67,12 +67,12 @@
         <translation>Преинсталирането на VirtualBox може да помогне.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Тази грешка означава, че драйверът на ядрото не може да задели достатъчно памет или че някоя адресираща операция е неуспешна.<br/><br/>Има известни проблеми с Linux 2.6.29. Ако сте с такова ядро, моля, редактирайте файла /usr/src/vboxdrv-*/Makefile и задайте <i>VBOX_USE_INSERT_PAGE = 1</i>. След това прекомпилирайте модула на ядрото като изпълните<br/><br/>  <font color=blue>'/sbin/vboxconfig'</fo [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Тази грешка означава, че драйверът на ядрото не може да задели достатъчно памет или че някоя адресираща операция е неуспешна.<br/><br/>Има известни проблеми с Linux 2.6.29. Ако сте с такова ядро, моля, редактирайте файла /usr/src/vboxdrv-*/Makefile и задайте <i>VBOX_USE_INSERT_PAGE = 1</i>. След това прекомпилирайте модула на ядрото като изпълните<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'&l [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Драйверът за Linux ядрото на VirtualBox (vboxdrv) не е зареден или има проблем с правата на /dev/vboxdrv. Пренастройте модула на ядрото като изпълните<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>с root права. Потребителите с Ubuntu, Fedora или Mandriva трябва първо да инсталират пакета DKMS. Този пакет следи за промени в Linux ядрото и прекомпилира модула vboxdrv, ако е необходимо.</tran [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Драйверът за Linux ядрото на VirtualBox (vboxdrv) не е зареден или има проблем с правата на /dev/vboxdrv. Пренастройте модула на ядрото като изпълните<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>с root права. Потребителите с Ubuntu, Fedora или Mandriva трябва първо да инсталират пакета DKMS. Този пакет следи за промени в Linux ядрото и прекомпилира модула vboxdrv, ако е необходимо.< [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -99,16 +99,16 @@
         <translation>Модулите за ядрото на VirtualBox са несъвместими с тази версия на VirtualBox. Изглежда, че инсталацията на VirtualBox е неуспешна. Може да помогне пълно деинсталиране и преинсталиране на VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Модулите за ядрото на VirtualBox са несъвместими с тази версия на VirtualBox. Изглежда, че инсталацията на VirtualBox е неуспешна. Изпълнението на<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>може да реши проблема. Уверете се, че не смесвате OSE версията с PUEL версията на VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Модулите за ядрото на VirtualBox са несъвместими с тази версия на VirtualBox. Изглежда, че инсталацията на VirtualBox е неуспешна. Изпълнението на<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>може да реши проблема. Уверете се, че не смесвате OSE версията с PUEL версията на VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Тази грешка означава, че драйверът на ядрото не може да задели достатъчно памет или че някоя адресираща операция е неуспешна.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Драйверът на VirtualBox за Linux ядрото (vboxdrv) или не е зареден, или има проблем с правата на /dev/vboxdrv. Моля, преинсталирайте модула на ядрото, като изпълните<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>като root. Ако е наличен във вашата дистрибуция, първо трябва да инсталирате DKMS пакета. Този пакет следи за промени в ядрото и прекомпилира модула vboxdrv, ако е необходимо.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Драйверът на VirtualBox за Linux ядрото (vboxdrv) или не е зареден, или има проблем с правата на /dev/vboxdrv. Моля, преинсталирайте модула на ядрото, като изпълните<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>като root. Ако е наличен във вашата дистрибуция, първо трябва да инсталирате DKMS пакета. Този пакет следи за промени в ядрото и прекомпилира модула vboxdrv, ако е необходимо.</translation>
     </message>
 </context>
 <context>
@@ -10279,6 +10279,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation>Проксито не е намерено</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
index 3997785..ba0e442 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
@@ -88,12 +88,12 @@
 <context>
     <name>QApplication</name>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Aquest error significa que el controlador del nucli no ha pogut assignar memòria suficient o bé alguna operació de mapejat ha fallat.<br/><br/>Existeixen alguns problemes coneguts amb el nucli Linux 2.6.29. Si esteu executant aquest nucli, editeu el fitxer /usr/src/vboxdrv-*/Makefile i habiliteu <i>VBOX_USE_INSERT_PAGE = 1</i>. Després d'això, torneu a compilar el mòdul executant com a root a una terminal l'ordre < [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Aquest error significa que el controlador del nucli no ha pogut assignar memòria suficient o bé alguna operació de mapejat ha fallat.<br/><br/>Existeixen alguns problemes coneguts amb el nucli Linux 2.6.29. Si esteu executant aquest nucli, editeu el fitxer /usr/src/vboxdrv-*/Makefile i habiliteu <i>VBOX_USE_INSERT_PAGE = 1</i>. Després d'això, torneu a compilar el mòdul executant com a root a una terminal l'ordre < [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">El controlador del nucli del VirtualBox (vboxdrv) no s'ha carregat o existeix un problema de permisos amb /dev/vboxdrv. Torneu a configurar el mòdul del nucli executant com a root a una terminal <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Usuaris d'Ubuntu, Fedora o Mandriva haurien d'instal·lar abans el paquet DKMS. Aquest paquet manté actiu el mòdul quan hi ha canvis a [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">El controlador del nucli del VirtualBox (vboxdrv) no s'ha carregat o existeix un problema de permisos amb /dev/vboxdrv. Torneu a configurar el mòdul del nucli executant com a root a una terminal <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Usuaris d'Ubuntu, Fedora o Mandriva haurien d'instal·lar abans el paquet DKMS. Aquest paquet manté actiu el mòdul quan hi ha can [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -140,16 +140,16 @@
         <translation>Els mòduls del nucli del VirtualBox no coincideixen amb aquesta versió del VirtualBox. La instal·lació no s'ha completat. Proveu desinstal·lant i tornant a instal·lar el VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Els mòduls del nucli del VirtualBox no coincideixen amb aquesta versió del VirtualBox. La instal·lació no s'ha completat. Proveu a executar<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> per resoldre el problema. Assegureu-vos que no barrejeu la versió OSE (lliure) amb la versió completa dle VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Els mòduls del nucli del VirtualBox no coincideixen amb aquesta versió del VirtualBox. La instal·lació no s'ha completat. Proveu a executar<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> per resoldre el problema. Assegureu-vos que no barrejeu la versió OSE (lliure) amb la versió completa dle VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Aquest error pot ser degut al fet que el nucli no ha pogut assignar memòria suficient o bé que alguna operació de mapatge ha fallat.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>El mòdul del nucli del VirtualBox (vboxdrv) no s'ha carregat o bé existeix un problema de permisos amb /dev/vboxdrv. Torneu a instal·lar el mòdul del nucli executant<br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/> com a root. Si està disponible a la vostra distribució, hauríeu d'instal·lar primer el paquet DKMS. Aquest paquet fa seguiment dels canvis del nucli  i torna a compilar el mòdul vboxdrv s [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>El mòdul del nucli del VirtualBox (vboxdrv) no s'ha carregat o bé existeix un problema de permisos amb /dev/vboxdrv. Torneu a instal·lar el mòdul del nucli executant<br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> com a root. Si està disponible a la vostra distribució, hauríeu d'instal·lar primer el paquet DKMS. Aquest paquet fa seguiment dels canvis del nucli  i torna a compilar el mòdul vbox [...]
     </message>
 </context>
 <context>
@@ -10451,6 +10451,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
index 66b7657..29169b7 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
@@ -93,12 +93,12 @@
 <context>
     <name>QApplication</name>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Este error significa que el controlador del nucli no ha pogut assignar memòria suficient o bé alguna operació de mapejat ha fallat.<br/><br/>Existeixen alguns problemes coneguts amb el nucli Linux 2.6.29. Si esteu executant este nucli, editeu el fitxer /usr/src/vboxdrv-*/Makefile i habiliteu <i>VBOX_USE_INSERT_PAGE = 1</i>. Després d'això, torneu a compilar el mòdul executant com a root a una terminal l'orde <br/&g [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Este error significa que el controlador del nucli no ha pogut assignar memòria suficient o bé alguna operació de mapejat ha fallat.<br/><br/>Existeixen alguns problemes coneguts amb el nucli Linux 2.6.29. Si esteu executant este nucli, editeu el fitxer /usr/src/vboxdrv-*/Makefile i habiliteu <i>VBOX_USE_INSERT_PAGE = 1</i>. Després d'això, torneu a compilar el mòdul executant com a root a una terminal l'orde <br/&g [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">El controlador del nucli del VirtualBox (vboxdrv) no s'ha carregat o existeix un problema de permisos amb /dev/vboxdrv. Torneu a configurar el mòdul del nucli executant com a root a una terminal <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Usuaris d'Ubuntu, Fedora o Mandriva haurien d'instal·lar abans el paquet DKMS. Este paquet manté actiu el mòdul quan hi ha canvis al  [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">El controlador del nucli del VirtualBox (vboxdrv) no s'ha carregat o existeix un problema de permisos amb /dev/vboxdrv. Torneu a configurar el mòdul del nucli executant com a root a una terminal <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Usuaris d'Ubuntu, Fedora o Mandriva haurien d'instal·lar abans el paquet DKMS. Este paquet manté actiu el mòdul quan hi ha canvi [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -145,16 +145,16 @@
         <translation>Els mòduls del nucli del VirtualBox no coincideixen amb esta versió del VirtualBox. La instal·lació no s'ha completat. Proveu desinstal·lant i tornant a instal·lar el VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Els mòduls del nucli del VirtualBox no coincideixen amb esta versió del VirtualBox. La instal·lació no s'ha completat. Proveu a executar<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> per resoldre el problema. Assegureu-vos que no barrejeu la versió OSE (lliure) amb la versió completa dle VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Els mòduls del nucli del VirtualBox no coincideixen amb esta versió del VirtualBox. La instal·lació no s'ha completat. Proveu a executar<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> per resoldre el problema. Assegureu-vos que no barrejeu la versió OSE (lliure) amb la versió completa dle VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Este error pot ser degut al fet que el nucli no ha pogut assignar memòria suficient o bé que alguna operació de mapatge ha fallat.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>El mòdul del nucli del VirtualBox (vboxdrv) no s'ha carregat o bé existeix un problema de permisos amb /dev/vboxdrv. Torneu a instal·lar el mòdul del nucli executant<br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/> com a root. Si està disponible a la vostra distribució, hauríeu d'instal·lar primer el paquet DKMS. Este paquet fa seguiment dels canvis del nucli  i torna a compilar el mòdul vboxdrv si  [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>El mòdul del nucli del VirtualBox (vboxdrv) no s'ha carregat o bé existeix un problema de permisos amb /dev/vboxdrv. Torneu a instal·lar el mòdul del nucli executant<br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> com a root. Si està disponible a la vostra distribució, hauríeu d'instal·lar primer el paquet DKMS. Este paquet fa seguiment dels canvis del nucli  i torna a compilar el mòdul vboxdr [...]
     </message>
 </context>
 <context>
@@ -10456,6 +10456,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
index 67d157f..cc2854f 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
@@ -88,12 +88,12 @@
 <context>
     <name>QApplication</name>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Tato chyba znamená, že ovladač jádra buď nebyl schopen alokovat dostatek paměti nebo selhala operace mapování paměti.<br/><br/>V jádře 2.6.29 jsou tyto problémy známé. Pokud máte jádro této verze, prosím upravte soubor /usr/src/vboxdrv-*/Makefile a povolte <i>VBOX_USE_INSERT_PAGE = 1</i>. Po editaci překompilujte modul jádra zadáním příkazu <br/><br/>  <font color="blue">'/sbin/vboxconfig'& [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Tato chyba znamená, že ovladač jádra buď nebyl schopen alokovat dostatek paměti nebo selhala operace mapování paměti.<br/><br/>V jádře 2.6.29 jsou tyto problémy známé. Pokud máte jádro této verze, prosím upravte soubor /usr/src/vboxdrv-*/Makefile a povolte <i>VBOX_USE_INSERT_PAGE = 1</i>. Po editaci překompilujte modul jádra zadáním příkazu <br/><br/>  <font color="blue">'/sbin/rcvboxdrv setup&a [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Ovladač jádra pro VirtualBox (vboxdrv) není buď zaveden, nebo je problém s přístupem na zařízení /dev/vboxdrv. Spusťte znovu modul jádra zadáním příkazu <br/><br/>  <font color="blue">'/sbin/vboxconfig'</font><br/><br/> jako uživatel root. Uživatelé distribucí Ubuntu, Fedora nebo Mandriva by měli nainstalovat balíček DKMS. Ten udržuje všechny změny v jádře Linuxu a pokud je potřeba provede rekomp [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Ovladač jádra pro VirtualBox (vboxdrv) není buď zaveden, nebo je problém s přístupem na zařízení /dev/vboxdrv. Spusťte znovu modul jádra zadáním příkazu <br/><br/>  <font color="blue">'/sbin/rcvboxdrv setup'</font><br/><br/> jako uživatel root. Uživatelé distribucí Ubuntu, Fedora nebo Mandriva by měli nainstalovat balíček DKMS. Ten udržuje všechny změny v jádře Linuxu a pokud je potřeba provede r [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -140,16 +140,16 @@
         <translation>Modul jádra pro VirtualBox není shodný s verzí aplikace VirtualBox. Pravděpodobně nebyla úspěšně dokončena instalace VirtualBoxu. Většinou pomůže kompletně vše odinstalovat a nainstalovat znovu.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Modul jádra pro VirtualBox není shodný s verzí aplikace VirtualBox. Pravděpodobně nebyla úspěšně dokončena instalace VirtualBoxu. Spuštěním příkazu<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>můžete problém vyřešit. Ujistěte se, že nepoužíváte současně OSE a PUEL verzi aplikace Virtualbox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Modul jádra pro VirtualBox není shodný s verzí aplikace VirtualBox. Pravděpodobně nebyla úspěšně dokončena instalace VirtualBoxu. Spuštěním příkazu<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>můžete problém vyřešit. Ujistěte se, že nepoužíváte současně OSE a PUEL verzi aplikace Virtualbox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Tato chyba znamená, že ovladač jádra nebyl schopen alokovat dostatek paměti nebo selhala operace mapování.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Ovladač jádra pro VirtualBox (vboxdrv) není buď zaveden, nebo je problém s přístupem na zařízení /dev/vboxdrv. Spusťte znovu modul jádra zadáním příkazu <br/><br/>  <font color="blue">'/sbin/vboxconfig'</font><br/><br/> jako uživatel root. Uživatelé distribucí Ubuntu, Fedora nebo Mandriva by měli nainstalovat balíček DKMS. Ten udržuje všechny změny v jádře Linuxu a pokud je potřeba provede rekompilaci modulu vbo [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Ovladač jádra pro VirtualBox (vboxdrv) není buď zaveden, nebo je problém s přístupem na zařízení /dev/vboxdrv. Spusťte znovu modul jádra zadáním příkazu <br/><br/>  <font color="blue">'/sbin/rcvboxdrv setup'</font><br/><br/> jako uživatel root. Uživatelé distribucí Ubuntu, Fedora nebo Mandriva by měli nainstalovat balíček DKMS. Ten udržuje všechny změny v jádře Linuxu a pokud je potřeba provede rekompilaci modul [...]
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -10452,6 +10452,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
index d3f5b42..6c266f6 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
@@ -70,12 +70,12 @@
         <translation>Du bør geninstallere VirtualBox.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Denne fejl skyldes enten at kernemodulet ikke kunne allokere hukommelse nok eller at en adresseoversættelse fejlede.<br/><br/>Der er kendte problemer med Linux 2.6.29. Hvis du bruger denne kerneudgave, så tilret /usr/src/vboxdrv-*/Makefile og sæt <i>VBOX_USE_INSERT_PAGE = 1</i>. Rekompilér derefter kernemodulet ved at køre<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/& [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Denne fejl skyldes enten at kernemodulet ikke kunne allokere hukommelse nok eller at en adresseoversættelse fejlede.<br/><br/>Der er kendte problemer med Linux 2.6.29. Hvis du bruger denne kerneudgave, så tilret /usr/src/vboxdrv-*/Makefile og sæt <i>VBOX_USE_INSERT_PAGE = 1</i>. Rekompilér derefter kernemodulet ved at køre<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/>&lt [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">VirtualBox' Linux kernemodul (vboxdrv) er enten ikke indlæst eller der er et problem med rettighederne på /dev/vboxdrv. Geninstaller kernemodulet ved at køre<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>som root. Brugere af Ubuntu, Fedora eller Mandriva bør installere DKMS pakken først. Denne pakke holder styr på Linux kerneændringer og rekompilerer vboxdrv kernemodulet om nødvendigt [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">VirtualBox' Linux kernemodul (vboxdrv) er enten ikke indlæst eller der er et problem med rettighederne på /dev/vboxdrv. Geninstaller kernemodulet ved at køre<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>som root. Brugere af Ubuntu, Fedora eller Mandriva bør installere DKMS pakken først. Denne pakke holder styr på Linux kerneændringer og rekompilerer vboxdrv kernemodulet om nødve [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -102,16 +102,16 @@
         <translation>De indlæste kernemoduler passer ikke til denne version af VirtualBox. Installationen af VirtualBox er tilsyneladende ikke gået godt. Du bør afinstallere VirtualBox fuldstændigt og geninstallere.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>De indlæste kernemoduler passer ikke til denne version af VirtualBox. Installationen af VirtualBox er tilsyneladende ikke gået godt. Kør<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> for at afhjælpe problemet. Undgå at blande OSE og PUEL versionerne af VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>De indlæste kernemoduler passer ikke til denne version af VirtualBox. Installationen af VirtualBox er tilsyneladende ikke gået godt. Kør<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> for at afhjælpe problemet. Undgå at blande OSE og PUEL versionerne af VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Denne fejl skyldes enten at kernemodulet ikke kunne allokere hukommelse nok eller at en adresseoversættelse fejlede.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>VirtualBox' Linux kernemodul (vboxdrv) er enten ikke indlæst eller der er et problem med rettighederne på /dev/vboxdrv. Geninstaller kernemodulet ved at køre<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>som root. Hvis din distribution understøtter det, bør du installere DKMS pakken først. Denne pakke holder styr på ændringer i Linux-kernen og rekompilerer vboxdrv kernemodulet om nødvendigt.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>VirtualBox' Linux kernemodul (vboxdrv) er enten ikke indlæst eller der er et problem med rettighederne på /dev/vboxdrv. Geninstaller kernemodulet ved at køre<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>som root. Hvis din distribution understøtter det, bør du installere DKMS pakken først. Denne pakke holder styr på ændringer i Linux-kernen og rekompilerer vboxdrv kernemodulet om nødvendigt.</tr [...]
     </message>
 </context>
 <context>
@@ -251,7 +251,7 @@
     </message>
     <message>
         <source>Seam&less Mode</source>
-        <translation type="unfinished">Ingen vinduesramme</translation>
+        <translation>Ingen vinduesramme</translation>
     </message>
     <message>
         <source>Switch to seamless desktop integration mode</source>
@@ -965,446 +965,446 @@
     </message>
     <message>
         <source>&VirtualBox</source>
-        <translation type="unfinished"></translation>
+        <translation>&VirtualBox</translation>
     </message>
     <message>
         <source>&File</source>
-        <translation type="unfinished">&Fil</translation>
+        <translation>&Fil</translation>
     </message>
     <message>
         <source>&Window</source>
-        <translation type="unfinished"></translation>
+        <translation>Vindue</translation>
     </message>
     <message>
         <source>&Minimize</source>
-        <translation type="unfinished"></translation>
+        <translation>&Minimér</translation>
     </message>
     <message>
         <source>Minimize active window</source>
-        <translation type="unfinished"></translation>
+        <translation>Minimér aktivt vindue</translation>
     </message>
     <message>
         <source>Display the Network Operations Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Åbner Netværkshåndtering</translation>
     </message>
     <message>
         <source>Display a window with product information</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser vindue med produktinformation</translation>
     </message>
     <message>
         <source>&Preferences...</source>
         <comment>global preferences window</comment>
-        <translation type="unfinished">Indstillinger...</translation>
+        <translation>Indstillinger...</translation>
     </message>
     <message>
         <source>Display the global preferences window</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis globale indstillinger</translation>
     </message>
     <message>
         <source>Display the virtual machine settings window</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis indstillinger for den virtuelle maskine</translation>
     </message>
     <message>
         <source>Display the virtual machine session information window</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis sessionsinformation for den virtuelle maskine</translation>
     </message>
     <message>
         <source>&Save State</source>
-        <translation type="unfinished"></translation>
+        <translation>Gem til&stand</translation>
     </message>
     <message>
         <source>Save the state of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Gem tilstanden af den virtuelle maskine</translation>
     </message>
     <message>
         <source>Send the ACPI Shutdown signal to the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Sender et "ACPI-sluk"-signal til den virtuelle maskine</translation>
     </message>
     <message>
         <source>&Full-screen Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>&Fuldskærm</translation>
     </message>
     <message>
         <source>Switch between normal and full-screen mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Skift mellem normalt vindue og fuldskærm</translation>
     </message>
     <message>
         <source>S&caled Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Skaleret tilstand (&C)</translation>
     </message>
     <message>
         <source>&Minimize Window</source>
-        <translation type="unfinished"></translation>
+        <translation>&Minimér vindue</translation>
     </message>
     <message>
         <source>Automatically resize the guest display when the window is resized</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpas gæstens skærmopløsning automatisk, når vinduesstørrelsen  ændres</translation>
     </message>
     <message>
         <source>Take guest display screenshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Tag billede af gæstens skærm</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis den virtuelle maskines indstillinger for optagelse af video</translation>
     </message>
     <message>
         <source>Enable guest display video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktiver videooptagelse af gæsteskærm</translation>
     </message>
     <message>
         <source>Allow remote desktop (RDP) connections to this machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Tillad fjernskærmsforbindelser (RDP) til denne maskine</translation>
     </message>
     <message>
         <source>&Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>&Menulinje</translation>
     </message>
     <message>
         <source>&Menu Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Menulinje-indstillinger...</translation>
     </message>
     <message>
         <source>Display window to configure menu-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis indstillinger for menulinjen</translation>
     </message>
     <message>
         <source>Show Menu &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis menulinjen (&B)</translation>
     </message>
     <message>
         <source>Enable menu-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktiver menulinje</translation>
     </message>
     <message>
         <source>&Status Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>&Statuslinje</translation>
     </message>
     <message>
         <source>&Status Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Statuslinje-indstillinger...</translation>
     </message>
     <message>
         <source>Display window to configure status-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis indstillinger for statuslinjen</translation>
     </message>
     <message>
         <source>Show Status &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis statuslinjen (&B)</translation>
     </message>
     <message>
         <source>Enable status-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktiver statuslinje</translation>
     </message>
     <message>
         <source>S&cale Factor</source>
-        <translation type="unfinished"></translation>
+        <translation>Skaleringsfaktor</translation>
     </message>
     <message>
         <source>&Input</source>
-        <translation type="unfinished"></translation>
+        <translation>&Input</translation>
     </message>
     <message>
         <source>&Keyboard</source>
-        <translation type="unfinished"></translation>
+        <translation>Tastatur</translation>
     </message>
     <message>
         <source>&Keyboard Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Tastatur-indstillinger...</translation>
     </message>
     <message>
         <source>Display global preferences window to configure keyboard shortcuts</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis globale indstillinger for at opsætte tastaturgenveje</translation>
     </message>
     <message>
         <source>&Insert %1</source>
         <comment>that means send the %1 key sequence to the virtual machine</comment>
-        <translation type="unfinished"></translation>
+        <translation>&Indsæt %1</translation>
     </message>
     <message>
         <source>Send the %1 sequence to the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Sender sekvensen %1 til den virtuelle maskine</translation>
     </message>
     <message>
         <source>&Mouse</source>
-        <translation type="unfinished"></translation>
+        <translation>&Mus</translation>
     </message>
     <message>
         <source>&Mouse Integration</source>
-        <translation type="unfinished"></translation>
+        <translation>&Museintegration</translation>
     </message>
     <message>
         <source>Enable host mouse pointer integration</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktiver integration af værtens mus</translation>
     </message>
     <message>
         <source>&Hard Disks</source>
-        <translation type="unfinished"></translation>
+        <translation>&Harddiske</translation>
     </message>
     <message>
         <source>&Hard Disk Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Harddisk-indstillinger...</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure hard disks</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis den virtuelle maskines indstillinger for at konfigurere  harddiske</translation>
     </message>
     <message>
         <source>&Optical Drives</source>
-        <translation type="unfinished"></translation>
+        <translation>&Optiske drev</translation>
     </message>
     <message>
         <source>&Floppy Drives</source>
-        <translation type="unfinished"></translation>
+        <translation>Diskettedrev (&F)</translation>
     </message>
     <message>
         <source>&Network</source>
-        <translation type="unfinished"></translation>
+        <translation>&Netværk</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure network adapters</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis den virtuelle maskines indstillinger for at konfigurere  netværkskort</translation>
     </message>
     <message>
         <source>&USB</source>
-        <translation type="unfinished"></translation>
+        <translation>&USB</translation>
     </message>
     <message>
         <source>&USB Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>&USB-indstillinger...</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure USB devices</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis den virtuelle maskines indstillinger for at konfigurere  USB-enheder</translation>
     </message>
     <message>
         <source>&Drag and Drop</source>
-        <translation type="unfinished"></translation>
+        <translation>Træk og slip (&D)</translation>
     </message>
     <message>
         <source>&Shared Folders</source>
-        <translation type="unfinished"></translation>
+        <translation>Delte mapper (&S)</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure shared folders</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis den virtuelle maskines indstillinger for at konfigurere deling af mapper</translation>
     </message>
     <message>
         <source>Insert the Guest Additions disk file into the virtual optical drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj Gæstetilføjelser som et virtuelt drev</translation>
     </message>
     <message>
         <source>&Logging</source>
         <comment>debug action</comment>
-        <translation type="unfinished"></translation>
+        <translation>&Logger</translation>
     </message>
     <message>
         <source>Show &Log...</source>
         <comment>debug action</comment>
-        <translation type="unfinished">Vis &log...</translation>
+        <translation>Vis &log...</translation>
     </message>
     <message>
         <source>%1%</source>
         <comment>scale-factor</comment>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source>Enable</source>
         <comment>Virtual Screen</comment>
-        <translation type="unfinished">Aktivér</translation>
+        <translation>Aktivér</translation>
     </message>
     <message>
         <source>Resize to %1x%2</source>
         <comment>Virtual Screen</comment>
-        <translation type="unfinished"></translation>
+        <translation>Skift til %1x%2</translation>
     </message>
     <message>
         <source>Preview Monitor %1</source>
-        <translation type="unfinished">Monitor miniature %1</translation>
+        <translation>Seneste skærm %1</translation>
     </message>
     <message>
         <source>&Connect Network Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilslut netværkskort (&C)</translation>
     </message>
     <message>
         <source>Connect Network Adapter &%1</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilslut netværkskort &%1</translation>
     </message>
     <message>
         <source>No USB Devices Connected</source>
-        <translation type="unfinished">Ingen USB-enheder tilsluttet</translation>
+        <translation>Ingen USB-enheder tilsluttet</translation>
     </message>
     <message>
         <source>No supported devices connected to the host PC</source>
-        <translation type="unfinished">Ingen understøttede enheder forbundet til værtsmaskinen</translation>
+        <translation>Ingen understøttede enheder forbundet til værtsmaskinen</translation>
     </message>
     <message>
         <source>No Webcams Connected</source>
-        <translation type="unfinished">Ingen webcams tilsluttede</translation>
+        <translation>Ingen webcams tilsluttede</translation>
     </message>
     <message>
         <source>No supported webcams connected to the host PC</source>
-        <translation type="unfinished">Ingen understøttede webcams forbundet til værtsmaskinen</translation>
+        <translation>Ingen understøttede webcams forbundet til værtsmaskinen</translation>
     </message>
     <message>
         <source>E&xtra Data Manager...</source>
-        <translation type="unfinished"></translation>
+        <translation>Håndtering af e&xtra data...</translation>
     </message>
     <message>
         <source>Display the Extra Data Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Åbner Extra Data-håndtering</translation>
     </message>
     <message>
         <source>Create new virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Opret ny virtuel maskine</translation>
     </message>
     <message>
         <source>Add existing virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj eksisterende virtuel maskine</translation>
     </message>
     <message>
         <source>Rename selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Omdøb den valgte gruppe af virtuelle maskiner</translation>
     </message>
     <message>
         <source>&Ungroup</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern gr&uppering</translation>
     </message>
     <message>
         <source>Ungroup items of selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern grupperingen af de valgte virtuel maskiner</translation>
     </message>
     <message>
         <source>&Sort</source>
-        <translation type="unfinished"></translation>
+        <translation>&Sortér</translation>
     </message>
     <message>
         <source>Sort items of selected virtual machine group alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis medlemmerne af den valgte virtuel maskin-gruppe i alfabetisk orden</translation>
     </message>
     <message>
         <source>Add new group based on selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj ny gruppe baseret på de valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Klon valgt virtuel maskine</translation>
     </message>
     <message>
         <source>Remove selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Start selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Start valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Switch to the windows of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Skift til de valgte virtuelle maskiners vinduer</translation>
     </message>
     <message>
         <source>&Normal Start</source>
-        <translation type="unfinished"></translation>
+        <translation>&Normal start</translation>
     </message>
     <message>
         <source>&Headless Start</source>
-        <translation type="unfinished"></translation>
+        <translation>Skærmfri start (&H)</translation>
     </message>
     <message>
         <source>Start selected virtual machines in the background</source>
-        <translation type="unfinished"></translation>
+        <translation>Start valgte virtuelle maskiner i baggrunden</translation>
     </message>
     <message>
         <source>&Detachable Start</source>
-        <translation type="unfinished"></translation>
+        <translation>U&dkoblet start</translation>
     </message>
     <message>
         <source>Start selected virtual machines with option of continuing in background</source>
-        <translation type="unfinished"></translation>
+        <translation>Start valgte virtuelle maskiner med mulighed for at fortsætte i baggrunden</translation>
     </message>
     <message>
         <source>Suspend execution of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Suspendér afvikling af valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Reset selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Nulstil de valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>D&iscard Saved State...</source>
-        <translation type="unfinished"></translation>
+        <translation>Kassér gemt t&ilstand...</translation>
     </message>
     <message>
         <source>Discard saved state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Slet gemt tilstand af valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Show log files of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis logfiler fra valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Re&fresh</source>
-        <translation type="unfinished">Genop&frisk</translation>
+        <translation>Op&frisk</translation>
     </message>
     <message>
         <source>Refresh accessibility state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Opfrisk tilgængeligheden af  valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>S&how in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis i Finder(&H)</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis VirtualBox maskindefinitionsfilerne i Finder</translation>
     </message>
     <message>
         <source>S&how in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis i Stifinder (&H)</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis VirtualBox maskindefinitionsfilerne i Stifinder</translation>
     </message>
     <message>
         <source>S&how in File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis i Fil&håndtering</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in the File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis VirtualBox maskindefinitionsfilerne i Filhåndtering</translation>
     </message>
     <message>
         <source>Cr&eate Alias on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Opr&et alias på Skrivebord</translation>
     </message>
     <message>
         <source>Create alias files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Opretter aliaser til VirtualBox maskindefinitionsfilerne på dit skrivebord</translation>
     </message>
     <message>
         <source>Cr&eate Shortcut on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Opr&et genvej på Skrivebord</translation>
     </message>
     <message>
         <source>Create shortcut files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Opretter genveje til VirtualBox maskindefinitionsfilerne på dit skrivebord</translation>
     </message>
     <message>
         <source>Sort group of first selected virtual machine alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis medlemmerne af den valgte virtuel maskines gruppe i alfabetisk orden</translation>
     </message>
     <message>
         <source>Save state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Gem tilstand af valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Send ACPI Shutdown signal to selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Sender "ACPI-sluk"-signal til valgte virtuelle maskiner</translation>
     </message>
     <message>
         <source>Power off selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Sluk valgte virtuelle maskiner</translation>
     </message>
 </context>
 <context>
@@ -1412,31 +1412,31 @@
     <message>
         <source>ID</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></translation>
+        <translation>ID</translation>
     </message>
     <message>
         <source>Password</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></translation>
+        <translation>Kodeord</translation>
     </message>
     <message numerus="yes">
         <source><nobr>Used by the following %n hard disk(s):</nobr><br>%1</source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many hard drives are in the tool-tip and doesn't need to be told).</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform><nobr>Bruges af følgende harddisk:</nobr><br>%1</numerusform>
+            <numerusform><nobr>Bruges af følgende harddiske:</nobr><br>%1</numerusform>
         </translation>
     </message>
     <message>
         <source>%1 - Disk Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 - Diskkryptering</translation>
     </message>
     <message numerus="yes">
         <source>This virtual machine is password protected. Please enter the %n encryption password(s) below.</source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many passwords are in the list and doesn't need to be told).</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Den virtuelle maskine er beskyttet med kodeord. Indtast krypteringskodeordet nedenstående.</numerusform>
+            <numerusform>De virtuelle maskiner er beskyttet med kodeord. Indtast krypteringskodeordet nedenstående.</numerusform>
         </translation>
     </message>
 </context>
@@ -1570,19 +1570,19 @@
     </message>
     <message>
         <source>Storage Controller (IDE)</source>
-        <translation type="unfinished"></translation>
+        <translation>Lagerstyreenhed (IDE)</translation>
     </message>
     <message>
         <source>Storage Controller (SATA)</source>
-        <translation type="unfinished"></translation>
+        <translation>Lagerstyreenhed (SATA)</translation>
     </message>
     <message>
         <source>Storage Controller (SCSI)</source>
-        <translation type="unfinished"></translation>
+        <translation>Lagerstyreenhed (SCSI)</translation>
     </message>
     <message>
         <source>Storage Controller (SAS)</source>
-        <translation type="unfinished"></translation>
+        <translation>Lagerstyreenhed (SAS)</translation>
     </message>
 </context>
 <context>
@@ -2247,7 +2247,7 @@
     </message>
     <message>
         <source>Retrieving data ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Modtager data ...</translation>
     </message>
 </context>
 <context>
@@ -3235,102 +3235,102 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>Minimal Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Minimal paravirtualisering</translation>
     </message>
     <message>
         <source>Hyper-V Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Hyper-V paravirtualisering</translation>
     </message>
     <message>
         <source>KVM Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>KVM paravirtualisering</translation>
     </message>
     <message>
         <source>Scale-factor</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Skaleringsfaktor</translation>
     </message>
     <message>
         <source>Unscaled HiDPI Video Output</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Uskaleret HiDPI video-udgang</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (display/Unscaled HiDPI Video Output)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Slået til</translation>
     </message>
     <message>
         <source>[Optical Drive]</source>
         <comment>details (storage)</comment>
-        <translation type="unfinished"></translation>
+        <translation>[Optisk drev]</translation>
     </message>
     <message>
         <source>Generic Driver, '%1' { %2 }</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Generisk driver, '%1' { %2 }</translation>
     </message>
     <message>
         <source>USB Controller</source>
         <comment>details (usb)</comment>
-        <translation type="unfinished">USB-styreenhed</translation>
+        <translation>USB-styreenhed</translation>
     </message>
     <message>
         <source>Menu-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Menulinje</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Slået til</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Slået fra</translation>
     </message>
     <message>
         <source>Status-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Statuslinje</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Slået til</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Slået fra</translation>
     </message>
     <message>
         <source>Mini-toolbar Position</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Placering af miniværktøjslinje</translation>
     </message>
     <message>
         <source>Top</source>
         <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Top</translation>
     </message>
     <message>
         <source>Bottom</source>
         <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Bund</translation>
     </message>
     <message>
         <source>Mini-toolbar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Miniværktøjslinje</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/mini-toolbar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Slået fra</translation>
     </message>
 </context>
 <context>
@@ -3596,23 +3596,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Machine Windows:</source>
-        <translation type="unfinished"></translation>
+        <translation>Maskinvinduer:</translation>
     </message>
     <message>
         <source>&Raise Window Under Mouse</source>
-        <translation type="unfinished"></translation>
+        <translation>F&remhæv vindue under mus</translation>
     </message>
     <message>
         <source>Holds the maximum width which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver den største skærmbredde som gæsten må anvende.</translation>
     </message>
     <message>
         <source>Holds the maximum height which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver den største skærmhøjde som gæsten må anvende.</translation>
     </message>
     <message>
         <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil maskinvinduer blive fremhævet, når musemarkøren føres over dem.</translation>
     </message>
 </context>
 <context>
@@ -3663,19 +3663,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Add Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj pakke</translation>
     </message>
     <message>
         <source>Remove Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern pakke</translation>
     </message>
     <message>
         <source>Adds new package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer ny pakke.</translation>
     </message>
     <message>
         <source>Removes selected package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner valgt pakke.</translation>
     </message>
 </context>
 <context>
@@ -3758,11 +3758,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Host Screensaver:</source>
-        <translation type="unfinished"></translation>
+        <translation>Værtens pauseskærm:</translation>
     </message>
     <message>
         <source>&Disable When Running Virtual Machines</source>
-        <translation type="unfinished"></translation>
+        <translation>&Deaktivér når &der kører virtuelle maskiner</translation>
     </message>
 </context>
 <context>
@@ -3825,11 +3825,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Lists all available shortcuts which can be configured.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser alle tilgængelige genveje, der kan konfigureres.</translation>
     </message>
     <message>
         <source>Holds a sequence to filter the shortcut list.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tast en sekvens for at filtrere genvejslisten.</translation>
     </message>
 </context>
 <context>
@@ -4170,51 +4170,51 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Add NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj NAT-netværk</translation>
     </message>
     <message>
         <source>Remove NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern NAT-netværk</translation>
     </message>
     <message>
         <source>Edit NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpas NAT-netværk</translation>
     </message>
     <message>
         <source>Adds new NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer nyt NAT-netværk.</translation>
     </message>
     <message>
         <source>Removes selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner valgt NAT-netværk.</translation>
     </message>
     <message>
         <source>Edits selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpas valgt NAT-netværk.</translation>
     </message>
     <message>
         <source>Add Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj værtsbegrænset netværk</translation>
     </message>
     <message>
         <source>Remove Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern værtsbegrænset netværk</translation>
     </message>
     <message>
         <source>Edit Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpas værtsbegrænset netværk</translation>
     </message>
     <message>
         <source>Adds new host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer nyt netværk begrænset til værten.</translation>
     </message>
     <message>
         <source>Removes selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern valgt værtsbegrænset netværk.</translation>
     </message>
     <message>
         <source>Edits selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpasser valgt værtsbegrænset netværk.</translation>
     </message>
 </context>
 <context>
@@ -4408,11 +4408,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, manual configuration will be used for this network adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil netværkskortet bruge den manuelle konfiguration.</translation>
     </message>
     <message>
         <source>When checked, the DHCP Server will be enabled for this network on machine start-up.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil DHCP-serveren være aktiv på netværket ved opstart af maskinen.</translation>
     </message>
 </context>
 <context>
@@ -4483,23 +4483,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, this network will be enabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil dette netværk være aktivt.</translation>
     </message>
     <message>
         <source>When checked, this network will support DHCP.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil dette netværk understøtte DHCP.</translation>
     </message>
     <message>
         <source>When checked, this network will support IPv6.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil dette netværk understøtte IPv6.</translation>
     </message>
     <message>
         <source>When checked, this network will be advertised as the default IPv6 route.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil netværket blive annonceret som standard IPv6 route. </translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Opsæt regler for viderestilling af porte.</translation>
     </message>
 </context>
 <context>
@@ -4577,35 +4577,35 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Holds the proxy host.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser proxy-værten.</translation>
     </message>
     <message>
         <source>Holds the proxy port.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser proxy-porten.</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil VirtualBox forsøge at finde de korrekte proxy-indstillinger, der tillader hentning af Gæstetilføjelser eller opdateringer fra netværket.</translation>
     </message>
     <message>
         <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Find &automatisk proxy-indstillinger</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil VirtualBox bruge en direkte internetforbindelse til at hente Gæstetilføjelserne eller kontrollere om en nyere udgave er tilgængelig.</translation>
     </message>
     <message>
         <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <translation>&Direkte forbindelse til internettet</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil VirtualBox bruge de angivne proxy-indstillinger til at hente Gæstetilføjelserne eller kontrollere om en nyere udgave er tilgængelig.</translation>
     </message>
     <message>
         <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>&Manuelle proxy-indstillinger</translation>
     </message>
 </context>
 <context>
@@ -4660,7 +4660,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver hvor ofte der skal søges efter opdateringer. Hvis du ikke ønsker at søge efter opdateringer skal du fjerne markeringen i afkrydsningsfeltet.</translation>
     </message>
 </context>
 <context>
@@ -5203,25 +5203,25 @@ p, li { white-space: pre-wrap; }
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
         <comment>HDD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Viser aktivitet på harddisk(e):</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the optical drives:</nobr>%1</p></source>
         <comment>CD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Viser aktivitet på optiske drev:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy drives:</nobr>%1</p></source>
         <comment>FD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Viser aktivitet på diskettedrev:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the display:</nobr>%1</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Viser aktivitet på skærm:</nobr>%1</p></translation>
     </message>
     <message>
         <source>Indicates whether the host keyboard is captured by the guest OS:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;keyboard is not captured</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;keyboard is captured</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation>Viser om værtstastaturet er indfanget af gæsteoperativsystemet:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;keyboard is not captured</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;keyboard is captured</nobr></translation>
     </message>
 </context>
 <context>
@@ -5330,7 +5330,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælger lydkortets driver. <b>Ingen lyd</b> får gæsten til at se et lydkort, men alle forsøg på at bruge det vil blive ignoreret.</translation>
     </message>
 </context>
 <context>
@@ -5588,107 +5588,107 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>&Skærm</translation>
     </message>
     <message>
         <source>Scale Factor:</source>
-        <translation type="unfinished"></translation>
+        <translation>Skaleringsfaktor:</translation>
     </message>
     <message>
         <source>Controls the guest screen scale factor.</source>
-        <translation type="unfinished"></translation>
+        <translation>Styrer skaleringsfaktoren for gæsteskærmen.</translation>
     </message>
     <message>
         <source>%</source>
-        <translation type="unfinished"></translation>
+        <translation>%</translation>
     </message>
     <message>
         <source>HiDPI Support:</source>
-        <translation type="unfinished"></translation>
+        <translation>HiDPI-understøttelse:</translation>
     </message>
     <message>
         <source>When checked, guest screen contents will not be scaled up to compensate for high host screen resolutions.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil gæsteskærmens indhold ikke blive skaleret op som kompensation for høj opløsning på værten.</translation>
     </message>
     <message>
         <source>Use &Unscaled HiDPI Output</source>
-        <translation type="unfinished"></translation>
+        <translation>&Uskaleret HiDPI video-udgang</translation>
     </message>
     <message>
         <source>Acceleration:</source>
-        <translation type="unfinished"></translation>
+        <translation>Acceleration:</translation>
     </message>
     <message>
         <source>Holds the VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source>
-        <translation type="unfinished"></translation>
+        <translation>Portnummer for VRDP-server. Du kan angive <tt>0</tt> (nul) for at vælge port 3389, som er standardporten for RDP.</translation>
     </message>
     <message>
         <source>Selects the VRDP authentication method.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælger godkendelsesmetoden for VRDP.</translation>
     </message>
     <message>
         <source>Holds the timeout for guest authentication, in milliseconds.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver tidsgrænsen (i millisekunder) for godkendelse på gæsten.</translation>
     </message>
     <message>
         <source>When checked, multiple simultaneous connections to the VM are permitted.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver om flere samtidige forbindelser til den virtuelle maskine er tilladt.</translation>
     </message>
     <message>
         <source>Holds the filename VirtualBox uses to save the recorded content.</source>
-        <translation type="unfinished"></translation>
+        <translation>Navnet på filen som Virtualbox gemmer det optagede indhold i.</translation>
     </message>
     <message>
         <source>Selects the resolution (frame size) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Styrer opløsningen (billedstørrelsen) for optagelsen.</translation>
     </message>
     <message>
         <source>Holds the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Styrer den <b>vandrette</b> opløsning (punkter pr.linje) for optagelsen.</translation>
     </message>
     <message>
         <source>Holds the <b>vertical</b> resolution (frame height) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Styrer den <b>lodrette</b> opløsning (antal linjer) for optagelsen.</translation>
     </message>
     <message>
         <source>Controls the maximum number of <b>frames per second</b>. Additional frames will be skipped. Reducing this value will increase the number of skipped frames and reduce the file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Sætter den øvre grænse for <b>billeder pr.sekund</b>. Yderligere billeder droppes. Jo lavere værdi, jo flere billeder droppes, hvilket reducerer størrelsen på filen, der optages til.</translation>
     </message>
     <message>
         <source>Controls the <b>quality</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Styrer <b>kvaliteten</b>. Jo højere værdi, jo bedre vil optagelsen se ud, men filen der optages til, vil også fylde mere.</translation>
     </message>
     <message>
         <source>Holds the bitrate in <b>kilobits per second</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Styrer bithastigheden i <b>kilobits pr.sekund</b>. Jo højere værdi, jo bedre vil optagelsen se ud, men filen der optages til, vil også fylde mere.</translation>
     </message>
     <message>
         <source>The virtual machine is currently assigned less than <b>%1</b> of video memory which is the minimum amount required to switch to full-screen or seamless mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Du har tildelt mindre end <b>%1</b> til grafikhukommelse, som ellers er den mindste mængde, der tillader den virtuelle maskine at skifte til fuldskærm eller rammefri tilstand.</translation>
     </message>
     <message>
         <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Den virtuelle maskine er konfigureret til at bruge grafikacceleration og operativsystem-typen er sat til Windows Vista eller nyere. For den bedste ydeevne bør du sætte maskinens grafikhukommelse til mindst <b>%1</b>.</translation>
     </message>
     <message>
         <source>Remote Display is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjernskærm er aktiveret for den virtuelle maskine. Dette kræver dog installation af <i>%1</i>. Installér derfor udvidelsespakken fra VirtualBox' hjemmeside - ellers vil den virtuelle maskine starte uden understøttelse af Fjernskærm.</translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished">%1 MB</translation>
+        <translation>%1 MB</translation>
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source><i>About %1MB per 5 minute video</i></source>
-        <translation type="unfinished"></translation>
+        <translation><i>Ca. %1MB pr. 5 minutter video</i></translation>
     </message>
     <message>
         <source>When checked, enables video recording for screen %1.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil skærm %1 understøtte videooptagelse.</translation>
     </message>
 </context>
 <context>
@@ -5788,111 +5788,111 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Basi&c</source>
-        <translation type="unfinished"></translation>
+        <translation>Basal</translation>
     </message>
     <message>
         <source>A&dvanced</source>
-        <translation type="unfinished">Avanceret</translation>
+        <translation>Avanceret</translation>
     </message>
     <message>
         <source>D&rag'n'Drop:</source>
-        <translation type="unfinished"></translation>
+        <translation>Træk og slip:</translation>
     </message>
     <message>
         <source>D&escription</source>
-        <translation type="unfinished">B&eskrivelse</translation>
+        <translation>B&eskrivelse</translation>
     </message>
     <message>
         <source>Enc&ryption</source>
-        <translation type="unfinished"></translation>
+        <translation>K&ryptering</translation>
     </message>
     <message>
         <source>When checked, enables encryption for this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, understøtter maskinen kryptering.</translation>
     </message>
     <message>
         <source>En&able Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>&Aktivér kryptering</translation>
     </message>
     <message>
         <source>Encryption C&ipher:</source>
-        <translation type="unfinished"></translation>
+        <translation>Krypter&ingsalgoritme:</translation>
     </message>
     <message>
         <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælger algoritmen, der bruges til at kryptere den virtuelle maskines diske.</translation>
     </message>
     <message>
         <source>E&nter New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>I&ndtast krypteringsnøgle:</translation>
     </message>
     <message>
         <source>Holds the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver krypteringsnøglen, der skal anvendes.</translation>
     </message>
     <message>
         <source>C&onfirm New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Gentag krypteringsnøgle:</translation>
     </message>
     <message>
         <source>Confirms the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Bekræftelse af krypteringsnøglen.</translation>
     </message>
     <message>
         <source>You are trying to encrypt this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site.</source>
-        <translation type="unfinished"></translation>
+        <translation>Du forsøger at kryptere den virtuelle maskine. Dette kræver at <i>%1</i> er installeret. Installér derfor udvidelsespakken fra VirtualBox' hjemmeside.</translation>
     </message>
     <message>
         <source>Encryption cipher type not specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Krypteringsalgoritme ikke angivet.</translation>
     </message>
     <message>
         <source>Encryption password empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Krypteringsnøgle ikke angivet.</translation>
     </message>
     <message>
         <source>Encryption passwords do not match.</source>
-        <translation type="unfinished"></translation>
+        <translation>Krypteringsnøglerne er ikke ens.</translation>
     </message>
     <message>
         <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser stien, hvor øjebliksbilleder af den virtuelle maskine bliver gemt. Bemærk at øjebliksbilleder kan bruge en hel del lagerplads.</translation>
     </message>
     <message>
         <source>Leave Unchanged</source>
         <comment>cipher type</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ingen ændring</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsInterface</name>
     <message>
         <source>Allows to modify VM menu-bar contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tillader ændring af indhold på VM'ens menulinje.</translation>
     </message>
     <message>
         <source>Mini ToolBar:</source>
-        <translation type="unfinished">Miniværktøjslinje:</translation>
+        <translation>Miniværktøjslinje:</translation>
     </message>
     <message>
         <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vises miniværktøjslinjen i Fuldskærm og Rammefri tilstand.</translation>
     </message>
     <message>
         <source>Show in &Full-screen/Seamless</source>
-        <translation type="unfinished"></translation>
+        <translation>Vis i &Fuldskærm/Rammefri tilstand</translation>
     </message>
     <message>
         <source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vises mini-værktøjslinjen i toppen af skærmen fremfor som standard i bunden af skærmen.</translation>
     </message>
     <message>
         <source>Show at &Top of Screen</source>
-        <translation type="unfinished">Vis i &toppen af skærm</translation>
+        <translation>Vis i &toppen af skærm</translation>
     </message>
     <message>
         <source>Allows to modify VM status-bar contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tillader ændring af indhold på VM'ens statuslinje.</translation>
     </message>
 </context>
 <context>
@@ -6069,23 +6069,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects how this virtual adapter is attached to the real network of the Host OS.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver hvordan det virtuelle netværkskort er forbundet til værtens fysiske netværk.</translation>
     </message>
     <message>
         <source>Shows additional network adapter options.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viserl yderligere indstillinger for netværkskort.</translation>
     </message>
     <message>
         <source>Holds the configuration settings for the network attachment driver. The settings should be of the form <b>name=value</b> and will depend on the driver. Use <b>shift-enter</b> to add a new entry.</source>
-        <translation type="unfinished"></translation>
+        <translation>Indtast konfigurationsindstillinger for den driver til netværkstilslutning du anvender. Indstillingerne skal have formen <b>navn=værdi</b> og afhænger af driveren. Brug <b>Shift-Enter</b> for at tilføje en ny indstilling.</translation>
     </message>
     <message>
         <source>When checked, the virtual network cable is plugged in.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, er det virtuelle netværkskabel tilsluttet.</translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Opsæt regler for viderestilling af porte.</translation>
     </message>
 </context>
 <context>
@@ -6172,23 +6172,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="unfinished">IRQ ikke angivet.</translation>
+        <translation>IRQ ikke angivet.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished">I/O port ikke angivet.</translation>
+        <translation>I/O port ikke angivet.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished">To eller flere porte har samme værdier.</translation>
+        <translation>To eller flere porte har samme værdier.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished">Portsti ikke angivet.</translation>
+        <translation>Portsti ikke angivet.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished">Den samme portsti er angivet flere gange.</translation>
+        <translation>Den samme portsti er angivet flere gange.</translation>
     </message>
 </context>
 <context>
@@ -6345,27 +6345,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Add Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj delt mappe</translation>
     </message>
     <message>
         <source>Edit Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpas delt mappe</translation>
     </message>
     <message>
         <source>Remove Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern deling af mappe</translation>
     </message>
     <message>
         <source>Adds new shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer ny delt mappe.</translation>
     </message>
     <message>
         <source>Edits selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpasser deling af valgt mappe.</translation>
     </message>
     <message>
         <source>Removes selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner deling af valgt mappe.</translation>
     </message>
 </context>
 <context>
@@ -6424,7 +6424,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, this shared folder will be permanent.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil mappedelingen være permanent.</translation>
     </message>
 </context>
 <context>
@@ -6500,43 +6500,43 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Styrer den serielle ports tilstand. Hvis du vælger <b>Ikke tilsluttet</b>, vil gæsteoperativsystemet kunne se den serielle port, men ikke bruge den.</translation>
     </message>
     <message>
         <source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, forventer den virtuelle maskine at specialfilen angivet i feltet<b>Sti til port</b> eksisterer. Hvis ikke, vil specialfilen blive oprettet af den virtuelle maskine under opstart.</translation>
     </message>
     <message>
         <source>&Connect to existing pipe/socket</source>
-        <translation type="unfinished"></translation>
+        <translation>Brug eksisterende specialfil</translation>
     </message>
     <message>
         <source>&Path/Address:</source>
-        <translation type="unfinished"></translation>
+        <translation>Sti/adresse:</translation>
     </message>
     <message>
         <source><p>In <b>Host Pipe</b> mode: Holds the path to the serial port's pipe on the host. Examples: "\\.\pipe\myvbox" or "/tmp/myvbox", for Windows and UNIX-like systems respectively.</p><p>In <b>Host Device</b> mode: Holds the host serial device name. Examples: "COM1" or "/dev/ttyS0".</p><p>In <b>Raw File</b> mode: Holds the file-path on the host system, where the seri [...]
-        <translation type="unfinished"></translation>
+        <translation><p>I <b>Specialfil</b> tilstand: Angiver stien til den serielle ports specialfil på værten. Eksempler: "\\.\pipe\myvbox" eller "/tmp/myvbox" for henholdsvis Windows og UNIX-baserede systemer.</p><p>I <b>Værtsenhed</b> tilstand: Angiver værtens serielle ports navn. Eksempler: "COM1" eller "/dev/ttyS0".</p><p>I <b>Rå fil</b> tilstand: Angiver filstien på værtssyste [...]
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="unfinished">IRQ ikke angivet.</translation>
+        <translation>IRQ ikke angivet.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished">I/O port ikke angivet.</translation>
+        <translation>I/O port ikke angivet.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished">To eller flere porte har samme værdier.</translation>
+        <translation>To eller flere porte har samme værdier.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished">Portsti ikke angivet.</translation>
+        <translation>Portsti ikke angivet.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished">Den samme portsti er angivet flere gange.</translation>
+        <translation>Den samme portsti er angivet flere gange.</translation>
     </message>
 </context>
 <context>
@@ -7013,117 +7013,117 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser alle lagerstyreenheder på denne maskine og de virtuelle aftryk og værtsdrev, der er forbundet til dem.</translation>
     </message>
     <message>
         <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver navnet på den markerede lagerstyreenhed i lagermedieoversigten.</translation>
     </message>
     <message>
         <source>When checked, allows to use host I/O caching capabilities.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, kan værten bruge I/O mellemlageret.</translation>
     </message>
     <message>
         <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil den virtuelle disk ikke blive fjernet, når gæsten skubber den ud.</translation>
     </message>
     <message>
         <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil gæsten se den virtuelle disk som en SSD-disk.</translation>
     </message>
     <message>
         <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil gæsten se den virtuelle disk som en enhed, der kan hot-plugges.</translation>
     </message>
     <message>
         <source>&Hot-pluggable</source>
-        <translation type="unfinished"></translation>
+        <translation>&Hot-plug</translation>
     </message>
     <message>
         <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <translation>Krypteret med nøgle:</translation>
     </message>
     <message>
         <source>Choose disk image...</source>
         <comment>This is used for hard disks, optical media and floppies</comment>
-        <translation type="unfinished"></translation>
+        <translation>Vælg diskaftryk...</translation>
     </message>
     <message>
         <source>Image</source>
         <comment>storage image</comment>
-        <translation type="unfinished">Aftryk</translation>
+        <translation>Aftryk</translation>
     </message>
     <message>
         <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Udvider/Lukker&nbsp;punkt.</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Tilføjer&nbsp;harddisk.</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Tilføjer&nbsp;optisk&nbsp;drev.</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Tilføjer&nbsp;diskettedrev.</nobr></translation>
     </message>
     <message>
         <source>Add USB Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj USB-styreenhed</translation>
     </message>
     <message>
         <source>Add Optical Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj optisk drev</translation>
     </message>
     <message>
         <source>Add Floppy Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj diskettedrev</translation>
     </message>
     <message>
         <source>Adds new storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer ny lagerstyreenhed.</translation>
     </message>
     <message>
         <source>Removes selected storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner den valgte lagerstyreenhed.</translation>
     </message>
     <message>
         <source>Adds new storage attachment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer nyt lagermedie.</translation>
     </message>
     <message>
         <source>Removes selected storage attachment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner det valgte lagermedie.</translation>
     </message>
     <message>
         <source>Optical &Drive:</source>
-        <translation type="unfinished"></translation>
+        <translation>Optisk &drev:</translation>
     </message>
     <message>
         <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg en virtuel optisk disk eller et fysiskt drev, der skal bruges af det virtuelle drev. Den virtuelle maskine vil se en disk der indeholder alle data fra filen eller det fysiske drev.</translation>
     </message>
     <message>
         <source>Create New Hard Disk...</source>
-        <translation type="unfinished"></translation>
+        <translation>Opret ny harddisk...</translation>
     </message>
     <message>
         <source>Choose Virtual Hard Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg en virtuel harddisk-fil...</translation>
     </message>
     <message>
         <source>Choose Virtual Optical Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg en virtuel optisk disk-fil...</translation>
     </message>
     <message>
         <source>Remove Disk from Virtual Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern disk fra virtuelt drev</translation>
     </message>
     <message>
         <source>Choose Virtual Floppy Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg en virtuel diskette-fil...</translation>
     </message>
 </context>
 <context>
@@ -7391,53 +7391,53 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hvis markeret, vil uret bruge UTC som tidszone - ellers bruges lokal (vært) tid. Unix forventer normalt at hardware-uret er sat til UTC.</translation>
     </message>
     <message>
         <source>%</source>
-        <translation type="unfinished"></translation>
+        <translation>%</translation>
     </message>
     <message>
         <source>&Paravirtualization Interface:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Paravirtualiseringstype:</translation>
     </message>
     <message>
         <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg typen af paravirtualisering, der skal bruges af den virtuelle maskine.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support a chip set of type ICH9 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>I/O APIC-funktionen er ikke aktiveret under System->Bundkort. Dette kræves for at understøtte ICH9-chipsættet du har valgt til denne VM. Aktivering sker automatisk, hvis du gemmer dine ændringer.</translation>
     </message>
     <message>
         <source>USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB input device you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Emulering af en USB-styreenhed er ikke aktiveret under System->USB. Dette kræves for at emulere den USB inputenhed du har valgt i denne VM. Aktivering sker automatisk, hvis du gemmer dine ændringer.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>I/O APIC-funktionen er ikke aktiveret under System->Bundkort. Dette kræves for at understøtte flere virtuelle CPU'er, som du har valgt i denne VM. Aktivering sker automatisk, hvis du gemmer dine ændringer.</translation>
     </message>
     <message>
         <source>Hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hardware-virtualisering er ikke aktiveret under System->Acceleration. Dette kræves for at understøtte flere virtuelle CPU'er, som du har valgt i denne VM. Aktivering sker automatisk, hvis du gemmer dine ændringer.</translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished">%1 MB</translation>
+        <translation>%1 MB</translation>
     </message>
     <message>
         <source>%1 CPU</source>
         <comment>%1 is 1 for now</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 CPU</translation>
     </message>
     <message>
         <source>%1 CPUs</source>
         <comment>%1 is host cpu count * 2 for now</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 CPU'er</translation>
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
 </context>
 <context>
@@ -7577,79 +7577,79 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Når valgt, aktiveres maskinens virtuelle USB OHCI-styreenhed. USB OHCI-styreenheden understøtter USB 1.0.</translation>
     </message>
     <message>
         <source>USB &1.1 (OHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>USB &1.1 (OHCI) styreenhed</translation>
     </message>
     <message>
         <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Når valgt, aktiveres maskinens virtuelle USB EHCI-styreenhed. USB EHCI-styreenheden understøtter USB 2.0.</translation>
     </message>
     <message>
         <source>USB &2.0 (EHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>USB &2.0 (EHCI) styreenhed</translation>
     </message>
     <message>
         <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Når valgt, aktiveres maskinens virtuelle USB xHCI-styreenhed. USB xHCI-styreenheden understøtter USB 3.0.</translation>
     </message>
     <message>
         <source>USB &3.0 (xHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>USB &3.0 (xHCI) styreenhed</translation>
     </message>
     <message>
         <source>USB 2.0/3.0 is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0/3.0 to be able to start the machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>USB 2.0/3.0 er aktiveret for denne virtuelle maskine, men dette kræver at <i>%1</i> installeres. Installér udvidelsespakken fra VirtualBox' hjemmeside eller deaktivér USB 2.0/3.0 for at kunne starte maskinen.</translation>
     </message>
     <message>
         <source>Add Empty Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj tomt filter</translation>
     </message>
     <message>
         <source>Add Filter From Device</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj filter fra enhed</translation>
     </message>
     <message>
         <source>Edit Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpas filter</translation>
     </message>
     <message>
         <source>Remove Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjern filter</translation>
     </message>
     <message>
         <source>Move Filter Up</source>
-        <translation type="unfinished"></translation>
+        <translation>Flyt filter op</translation>
     </message>
     <message>
         <source>Move Filter Down</source>
-        <translation type="unfinished"></translation>
+        <translation>Flyt filter ned</translation>
     </message>
     <message>
         <source>Adds new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer et nyt USB-filter hvor alle felter er blanke. Dette filter vil matche alle tilsluttede USB-enheder.</translation>
     </message>
     <message>
         <source>Adds new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer et nyt USB-filter hvor alle felter er sat til værdierne fra den valgte tilsluttede USB-enhed.</translation>
     </message>
     <message>
         <source>Edits selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilpasser det valgte USB-filter.</translation>
     </message>
     <message>
         <source>Removes selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner det valgte USB-filter.</translation>
     </message>
     <message>
         <source>Moves selected USB filter up.</source>
-        <translation type="unfinished"></translation>
+        <translation>Flytter det valgte USB-filter opad.</translation>
     </message>
     <message>
         <source>Moves selected USB filter down.</source>
-        <translation type="unfinished"></translation>
+        <translation>Flytter det valgte USB-filter nedad.</translation>
     </message>
 </context>
 <context>
@@ -7756,35 +7756,35 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Holds the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver leverandør-ID-filteret. Formatet for et <i>nøjagtigt match</i> er <tt>XXXX</tt> hvor <tt>X</tt> er et heksadecimalt ciffer. En tom streng matcher alt.</translation>
     </message>
     <message>
         <source>Holds the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver produkt-ID-filteret. Formatet for et <i>nøjagtigt match</i> er <tt>XXXX</tt> hvor <tt>X</tt> er et heksadecimalt ciffer. En tom streng matcher alt.</translation>
     </message>
     <message>
         <source>Holds the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver versionsnummer-filteret. Formatet for et <i>nøjagtigt match</i> er <tt>IIFF</tt> hvor <tt>I</tt> er et ciffer før kommaet og <tt>F</tt> er et ciffer efter kommaet. En tom streng matcher alt.</translation>
     </message>
     <message>
         <source>Holds the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver producent-ID-filteret som et <i>nøjagtigt match</i> på en tekststreng. En tom streng matcher alt.</translation>
     </message>
     <message>
         <source>Holds the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver produkt-ID-filteret som et <i>nøjagtigt match</i> på en tekststreng. En tom streng matcher alt.</translation>
     </message>
     <message>
         <source>Holds the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver serienummer-filteret som et <i>nøjagtigt match</i> på en tekststreng. En tom streng matcher alt.</translation>
     </message>
     <message>
         <source>Holds the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver USB-port ID-filteret som et <i>nøjagtigt match</i> på en tekststreng. En tom streng matcher alt.</translation>
     </message>
     <message>
         <source>Holds whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiver om dette filter gælder for USB-enheder tilsluttet direkte til værtsmaskinen (<i>Nej</i>), til en VRDP-klients maskine (<i>Ja</i>) eller begge (<i>Begge</i>).</translation>
     </message>
 </context>
 <context>
@@ -7813,7 +7813,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Floppy disks</source>
-        <translation>Disketter</translation>
+        <translation>Disketter (&F)</translation>
     </message>
     <message>
         <source>&Select</source>
@@ -7825,11 +7825,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Removing medium...</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner medie...</translation>
     </message>
     <message>
         <source>&Hard disks</source>
-        <translation type="unfinished"></translation>
+        <translation>&Harddiske</translation>
     </message>
 </context>
 <context>
@@ -7851,23 +7851,23 @@ p, li { white-space: pre-wrap; }
     <name>UIMenuBarEditorWidget</name>
     <message>
         <source>Virtual Screen Resize</source>
-        <translation type="unfinished"></translation>
+        <translation>Ændring af skærmstørrelse</translation>
     </message>
     <message>
         <source>Virtual Screen Mapping</source>
-        <translation type="unfinished"></translation>
+        <translation>Mapning af skærme</translation>
     </message>
     <message>
         <source>Switch</source>
-        <translation type="unfinished">Skift</translation>
+        <translation>Skift</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Luk</translation>
+        <translation>Luk</translation>
     </message>
     <message>
         <source>Enable Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktiver menulinje</translation>
     </message>
 </context>
 <context>
@@ -9504,139 +9504,139 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Kunne ikke oprette VirtualBox' COM-objekt.</p><p>Applikationen afsluttes.</p></translation>
     </message>
     <message>
         <source>Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke sætte extra data for global nøgle <i>%1</i> til <i>{%2}</i>. </translation>
     </message>
     <message>
         <source>Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke sætte extra data for nøgle <i>%1</i> i maskinen <i>%2</i> til <i>{%3}</i>. </translation>
     </message>
     <message>
         <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>En eller flere diskaftryksfiler er ikke tilgængelige for øjeblikket. Du vil ikke kunne starte virtuelle maskiner, som benytter disse enheder indtil de bliver gjort tilgængelige</p><p>Tryk <b>Undersøg</b> for at åbne Virtuel diskhåndtering og se hvilke filer der er utilgængelige eller tryk <b>Ignorer</b> for at ignorere denne meddelelse.</p></translation>
     </message>
     <message>
         <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Når du sletter et øjebliksbillede, mistes informationen om dets tilstand. Data spredt over flere filer som VirtualBox har dannet sammen med øjebliksbilledet vil blive lagt sammen i én fil. Dette kan tage lang tid og informationen i øjebliksbilledet kan ikke genskabes.</p></p>Er du sikker på at du vil slette det valgte øjebliksbillede <b>%1</b>?</p></translation>
     </message>
     <message>
         <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Sletning af øjebliksbilledet %1 vil midlertidigt kræve mere diskplads. I værste fald vil størrelsen af %2 vokse med %3, men der er kun %4 ledigt i filsystemet.</p><p>Løber du tør for diskplads under sammenlægningen risikerer du at ødelægge øjebliksbilledet og dets VM-konfiguration, dvs du mister både VM'en og dens data.</p><p>Du kan fortsætte med sletningen af øjebliksbilledet på eget ansvar.</p></translation>
     </message>
     <message>
         <source>Failed to save the settings.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke gemme indstillinger.</translation>
     </message>
     <message>
         <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Du er ved at tilføje et optisk drev til styreenheden <b>%1</b>.</p><p>Vil du vælge en virtuel optisk disk der sættes i drevet eller lade det være tomt?</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Er du sikker på at du vil fjerne det optiske drev?</p><p>Du vil ikke kunne indsætte optiske diske, ISO-aftryk eller installere Gæstetilføjelserne uden det!</p></translation>
     </message>
     <message>
         <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke tilslutte det optiske drev <nobr><b>%1</b></nobr> på udvidelsespladsen <i>%2</i> i maskinen <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke tilslutte diskettedrevet (<nobr><b>%1</b></nobr>) på udvidelsespladsen <i>%2</i> i maskinen <b>%3</b>.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
-        <translation type="unfinished"></translation>
+        <translation>Reglerne for port-viderestillinger er ikke gyldige. Regelnavne skal være unikke.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
-        <translation type="unfinished"></translation>
+        <translation>Reglerne for port-viderestillinger er ikke gyldige. Den samme værtsport eller IP-adresse angives i flere regler.</translation>
     </message>
     <message>
         <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Er du sikker på at du vil frigive diskaftryksfilen <nobr><b>%1</b></nobr>?</p><p>Det vil fjerne den fra disse virtuelle maskiner: <b>%2</b>.</p></translation>
     </message>
     <message>
         <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Vil du slette lagerenheden for harddisken <nobr><b>%1</b></nobr>?</p><p>Hvis du vælger <b>Slet</b> vil den angivne lagerenhed blive slettet permanent. Handlingen kan <b>ikke fortrydes</b>.</p><p>Hvis du vælger <b>Behold</b> så vil harddisken kun blive fjernet fra listen over kendte harddiske, mens lagerenheden ikke vil blive rørt og dermed kan harddisken tilføjes til listen i [...]
     </message>
     <message>
         <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke fjerne det optiske drev <nobr><b>%1</b></nobr> fra udvidelsespladsen <i>%2</i> i maskinen <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke fjerne diskettedrevet <nobr><b>%1</b></nobr> fra udvidelsespladsen <i>%2</i> i maskinen <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke åbne diskaftryksfilen <nobr><b>%1</b></nobr>. </translation>
     </message>
     <message>
         <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke lukke diskaftryksfilen <nobr><b>%1</b></nobr>. </translation>
     </message>
     <message>
         <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Du er ved at oprette en ny virtuel maskine uden en harddisk. Du vil ikke kunne installere et operativsystem på maskinen før du tilføjer en harddisk. Indtil da kan du kun starte maskinen med en virtuel optisk disk eller fra netværket.</translation>
     </message>
     <message>
         <source>Bad password or authentication failure.</source>
-        <translation type="unfinished"></translation>
+        <translation>Forkert adgangskode eller fejl ved godkendelse.</translation>
     </message>
     <message>
         <source><p>A critical error has occurred while running the virtual machine and the machine execution should be stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt>, which you can find in the virtual machine log directory, as well as a description of what you were doing when this  [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Der opstod en kritisk fejl under afvikling af den virtuelle maskine og afviklingen stoppes derfor.</p><p>Prøv at finde hjælp i Fællesskab-afsnittet på <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> eller via din support-aftale. Beskriv hvad du gjorde da fejlen opstod og inkluder indholdet af logfilen <tt>VBox.log</tt>, som du finder i den virtuelle maskine log-katalog. Du kan også finde filen ved at tryk [...]
     </message>
     <message>
         <source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Den virtuelle maskines vindue vil nu skifte til <b>Fuldskærm</b>. Du kan skifte tilbage til vinduestilstand ved at trykke <b>%1</b>.</p><p><i>Værtstasten</i> er for øjeblikket sat til <b>%2</b>.</p><p>Bemærk at menulinjen er skjult i fuldskærmstilstand, men du kan åbne den ved at trykke <b>Værtstast+Home</b>.</p></translation>
     </message>
     <message>
         <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Kunne ikke skifte til fuldskærm på grund af for lidt grafikhukommelse i gæsten.</p><p>Du bør konfigure den virtuelle maskine til at have en grafikhukommelse på mindst <b>%1</b>.</p><p>Tryk <b>Ignorer</b> for at forsøge at skifte alligevel eller tryk <b>Annullér</b> for at afbryde.</p></translation>
     </message>
     <message>
         <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke forbinde netværkskablet til den virtuelle maskine <b>%1</b>. </translation>
     </message>
     <message>
         <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke fjerne netværkskablet fra den virtuelle maskine <b>%1</b>. </translation>
     </message>
     <message>
         <source><p>Could not insert the <b>VirtualBox Guest Additions</b> disk image file into the virtual machine <b>%1</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Kunne ikke indsætte <b>VirtualBox Gæstetilføjelser</b> diskaftrykket i den virtuelle maskine <b>%1</b>, da maskinen ikke har et optisk drev. Tilføj et drev på siden Lagringsmedier i indstillingerne for den virtuelle maskine.</p></translation>
     </message>
     <message>
         <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p><b>VirtualBox Gæstetilføjelser</b> diskaftrykket er blevet hentet fra <nobr><a href="%1">%1</a></nobr> og gemt lokalt som <nobr><b>%2</b>.</nobr></p><p>Vil du indsætte dette diskaftryk i det virtuelle optiske drev?</p></translation>
     </message>
     <message>
         <source>Drag and drop operation from host to guest failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Træk-og-slip fra vært til gæst fejlede.</translation>
     </message>
     <message>
         <source>Unable to cancel host to guest drag and drop operation.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kan ikke annullere den igangværende træk-og-slip-handling.</translation>
     </message>
     <message>
         <source>Drag and drop operation from guest to host failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Træk-og-slip fra gæst til vært fejlede.</translation>
     </message>
     <message>
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
-        <translation type="unfinished"></translation>
+        <translation>Krypteringsnøglen til <nobr>ID = '%1'</nobr> er ugyldig.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Reglerne for port-viderestillinger er ikke gyldige. Alle værts- og gæste-adresseværdier skal være korrekte eller blanke.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Reglerne for port-viderestillinger er ikke gyldige. Gæstens adresseværdier må ikke være blanke.</translation>
     </message>
 </context>
 <context>
@@ -9753,7 +9753,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>N&ame:</source>
-        <translation type="unfinished"></translation>
+        <translation>N&avn:</translation>
     </message>
 </context>
 <context>
@@ -9844,22 +9844,26 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>%1: %2</source>
         <comment>Context description: Error description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: %2</translation>
     </message>
     <message>
         <source>Unable to initialize HTTP library</source>
-        <translation type="unfinished"></translation>
+        <translation>Kunne ikke initialisere HTTP-bibliotek</translation>
     </message>
     <message>
         <source>Connection refused</source>
-        <translation type="unfinished"></translation>
+        <translation>Forbindelse nægtet</translation>
     </message>
     <message>
         <source>Content moved</source>
-        <translation type="unfinished"></translation>
+        <translation>Indhold flyttet</translation>
     </message>
     <message>
         <source>Proxy not found</source>
+        <translation>Proxy ikke fundet</translation>
+    </message>
+    <message>
+        <source>Url not found on the server</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -9867,15 +9871,15 @@ p, li { white-space: pre-wrap; }
     <name>UINetworkReplyPrivateThread</name>
     <message>
         <source>During proxy configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>Under konfiguration af proxy</translation>
     </message>
     <message>
         <source>During certificate downloading</source>
-        <translation type="unfinished"></translation>
+        <translation>Under hentning af certifikat</translation>
     </message>
     <message>
         <source>During network request</source>
-        <translation type="unfinished"></translation>
+        <translation>Under netværksforespørgsel</translation>
     </message>
 </context>
 <context>
@@ -10591,55 +10595,55 @@ p, li { white-space: pre-wrap; }
     <name>UIPortForwardingTable</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Navn</translation>
+        <translation>Navn</translation>
     </message>
     <message>
         <source>Protocol</source>
-        <translation type="unfinished">Protokol</translation>
+        <translation>Protokol</translation>
     </message>
     <message>
         <source>Host IP</source>
-        <translation type="unfinished">Værts-IP</translation>
+        <translation>Værts-IP</translation>
     </message>
     <message>
         <source>Host Port</source>
-        <translation type="unfinished">Værtsport</translation>
+        <translation>Værtsport</translation>
     </message>
     <message>
         <source>Guest IP</source>
-        <translation type="unfinished">Gæste-IP</translation>
+        <translation>Gæste-IP</translation>
     </message>
     <message>
         <source>Guest Port</source>
-        <translation type="unfinished">Gæsteport</translation>
+        <translation>Gæsteport</translation>
     </message>
     <message>
         <source>Contains a list of port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser liste over regler for port-viderestilling.</translation>
     </message>
     <message>
         <source>Add New Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj regel</translation>
     </message>
     <message>
         <source>Copy Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Kopiér valgt regel</translation>
     </message>
     <message>
         <source>Remove Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Slet valgt regel</translation>
     </message>
     <message>
         <source>Adds new port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføjer ny regel for port-viderestilling.</translation>
     </message>
     <message>
         <source>Copies selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Kopierer valgt regel.</translation>
     </message>
     <message>
         <source>Removes selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Fjerner valgt regel.</translation>
     </message>
 </context>
 <context>
@@ -10842,7 +10846,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>Indstillinger</translation>
     </message>
 </context>
 <context>
@@ -10922,37 +10926,37 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>User Interface</source>
-        <translation type="unfinished"></translation>
+        <translation>Brugerflade</translation>
     </message>
     <message>
         <source>Settings</source>
-        <translation type="unfinished">Indstillinger</translation>
+        <translation>Indstillinger</translation>
     </message>
 </context>
 <context>
     <name>UISettingsSerializerProgress</name>
     <message>
         <source>Loading Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Henter indstillinger...</translation>
     </message>
     <message>
         <source>Saving Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Gemmer indstillinger...</translation>
     </message>
 </context>
 <context>
     <name>UIStatusBarEditorWidget</name>
     <message>
         <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr><b>Klik</b> for at skifte indikator-visning.</nobr><br><nobr><b>Træk-og-slip</b> for at ændre dens placering.</nobr></translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Luk</translation>
+        <translation>Luk</translation>
     </message>
     <message>
         <source>Enable Status Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktiver statuslinje</translation>
     </message>
 </context>
 <context>
@@ -11104,7 +11108,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Power off the machine</source>
-        <translation>Sluk for maskinen</translation>
+        <translation>Sluk for maskinen (&P)</translation>
     </message>
     <message>
         <source>Restore the machine state stored in the current snapshot</source>
@@ -11120,11 +11124,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Continue running in the background</source>
-        <translation type="unfinished"></translation>
+        <translation>Fortsæt afviklingen i baggrunden (&C)</translation>
     </message>
     <message>
         <source><p>Close the virtual machine windows but keep the virtual machine running.</p><p>You can use the VirtualBox Manager to return to running the virtual machine in a window.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Luk VM'ens vinduer, men fortsæt afviklingen af den.</p><p>Du kan bruge Virtual maskinhåndtering til at genskabe maskinens vindue på et senere tidspunkt.</p></translation>
     </message>
 </context>
 <context>
@@ -11142,98 +11146,98 @@ p, li { white-space: pre-wrap; }
     <name>UIVMInfoDialog</name>
     <message>
         <source>%1 - Session Information</source>
-        <translation type="unfinished">%1 - Sessionsinformation</translation>
+        <translation>%1 - Sessionsinformation</translation>
     </message>
     <message>
         <source>Configuration &Details</source>
-        <translation type="unfinished">Konfigurations&detaljer</translation>
+        <translation>Konfigurations&detaljer</translation>
     </message>
     <message>
         <source>&Runtime Information</source>
-        <translation type="unfinished">Kø&retidsinformation</translation>
+        <translation>Kø&retidsinformation</translation>
     </message>
     <message>
         <source>DMA Transfers</source>
-        <translation type="unfinished">DMA-overførsler</translation>
+        <translation>DMA-overførsler</translation>
     </message>
     <message>
         <source>PIO Transfers</source>
-        <translation type="unfinished">PIO-overførsler</translation>
+        <translation>PIO-overførsler</translation>
     </message>
     <message>
         <source>Data Read</source>
-        <translation type="unfinished">Data læst</translation>
+        <translation>Data læst</translation>
     </message>
     <message>
         <source>Data Written</source>
-        <translation type="unfinished">Data skrevet</translation>
+        <translation>Data skrevet</translation>
     </message>
     <message>
         <source>Data Transmitted</source>
-        <translation type="unfinished">Data sendt</translation>
+        <translation>Data sendt</translation>
     </message>
     <message>
         <source>Data Received</source>
-        <translation type="unfinished">Data modtaget</translation>
+        <translation>Data modtaget</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest additions</comment>
-        <translation type="unfinished">Ikke fundet</translation>
+        <translation>Ikke fundet</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest os type</comment>
-        <translation type="unfinished">Ikke fundet</translation>
+        <translation>Ikke fundet</translation>
     </message>
     <message>
         <source>Not Available</source>
         <comment>details report (VRDE server port)</comment>
-        <translation type="unfinished">Ikke tilgængelig</translation>
+        <translation>Ikke tilgængelig</translation>
     </message>
     <message>
         <source>Runtime Attributes</source>
-        <translation type="unfinished">Afviklingsindstillinger</translation>
+        <translation>Afviklingsindstillinger</translation>
     </message>
     <message>
         <source>Screen Resolution</source>
-        <translation type="unfinished">Skærmopløsning</translation>
+        <translation>Skærmopløsning</translation>
     </message>
     <message>
         <source>VM Uptime</source>
-        <translation type="unfinished"></translation>
+        <translation>VM-oppetid</translation>
     </message>
     <message>
         <source>Clipboard Mode</source>
-        <translation type="unfinished">Udklipsholdertilstand</translation>
+        <translation>Udklipsholdertilstand</translation>
     </message>
     <message>
         <source>Drag and Drop Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Træk og slip-tilstand</translation>
     </message>
     <message>
         <source>Guest Additions</source>
-        <translation type="unfinished">Gæstetilføjelser</translation>
+        <translation>Gæstetilføjelser</translation>
     </message>
     <message>
         <source>Guest OS Type</source>
-        <translation type="unfinished"></translation>
+        <translation>Gæste-OS-type</translation>
     </message>
     <message>
         <source>Storage Statistics</source>
-        <translation type="unfinished">Lagermediestatistik</translation>
+        <translation>Lagerstatistik</translation>
     </message>
     <message>
         <source>No Storage Devices</source>
-        <translation type="unfinished">Ingen lagerenheder</translation>
+        <translation>Ingen lagerenheder</translation>
     </message>
     <message>
         <source>Network Statistics</source>
-        <translation type="unfinished">Netværksstatistik</translation>
+        <translation>Netværksstatistik</translation>
     </message>
     <message>
         <source>No Network Adapters</source>
-        <translation type="unfinished">Ingen netværkskort</translation>
+        <translation>Ingen netværkskort</translation>
     </message>
 </context>
 <context>
@@ -11395,19 +11399,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Expert Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>&Ekspert-tilstand</translation>
     </message>
     <message>
         <source>Switch to <nobr><b>Expert Mode</b></nobr>, a one-page dialog for experienced users.</source>
-        <translation type="unfinished"></translation>
+        <translation>Skifter til <nobr><b>Ekspert-tilstand</b></nobr>, hvor alle indstillinger vises på én side.</translation>
     </message>
     <message>
         <source>&Guided Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>&Guidet tilstand</translation>
     </message>
     <message>
         <source>Switch to <nobr><b>Guided Mode</b></nobr>, a step-by-step dialog with detailed explanations.</source>
-        <translation type="unfinished"></translation>
+        <translation>Skifter til <nobr><b>Guidet tilstand</b></nobr>, hvor hver indstilling forklares grundigt.</translation>
     </message>
 </context>
 <context>
@@ -11507,75 +11511,75 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Kopier virtuel disk</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk der kopieres</translation>
     </message>
     <message>
         <source><p>Please select the virtual hard disk file that you would like to copy if it is not already selected. You can either choose one from the list or use the folder icon beside the list to select one.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Vælg det virtuelle disk-aftryk du vil kopiere, hvis det ikke allerede er valgt. Du kan enten vælge et fra listen eller bruge mappe-ikonet ved siden af listen til at vælge et.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg virtuelt disk-aftryk der skal kopieres...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk-filtype</translation>
     </message>
     <message>
         <source>Please choose the type of file that you would like to use for the new virtual hard disk. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg typen af fil, som du vil bruge til den nye virtuelle disk. Skal disken ikke bruges med andre virtualiseringsprogrammer behøver du ikke ændre denne indstilling.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Lagring på fysisk harddisk</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg om den nye virtuelle disk-fil allokeres i takt med at den bruges (dynamisk allokering) eller om al pladsen allokeres med det samme (fast størrelse).</translation>
     </message>
     <message>
         <source><p>A <b>dynamically allocated</b> hard disk file will only use space on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), although it will not shrink again automatically when space on it is freed.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>En <b>dynamisk allokeret</b> virtuel disk bruger plads i takt med at den fyldes op (op til den maksimale <b>faste størrelse</b>), men filen formindskes ikke automatiskt, når der frigives plads på den virtuelle disk.</p></translation>
     </message>
     <message>
         <source><p>A <b>fixed size</b> hard disk file may take longer to create on some systems but is often faster to use.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>En <b>fast størrelse</b> virtuel disk-fil kan tage længere tid at oprette, men er ofte hurtigere i brug.</p></translation>
     </message>
     <message>
         <source><p>You can also choose to <b>split</b> the hard disk file into several files of up to two gigabytes each. This is mainly useful if you wish to store the virtual machine on removable USB devices or old systems, some of which cannot handle very large files.</source>
-        <translation type="unfinished"></translation>
+        <translation><p>Du kan vælge at <b>sprede</b> den virtuelle disk over flere filer på op til 2 GB hver. Det er særlig brugbart, hvis du vil gemme den virtuelle maskine på flytbare USB-enheder eller ældre systemer, som muligvis ikke understøtter filer større end 2 GB.</p></translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiv placeringen af den nye virtuelle disk-fil</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk der skal oprettes</translation>
     </message>
     <message>
         <source>Please type the name of the new virtual hard disk file into the box below or click on the folder icon to select a different folder to create the file in.</source>
-        <translation type="unfinished"></translation>
+        <translation>Indtast navnet på den nye virtuelle disk-fil i tekstfeltet nedenfor eller tryk på mappe-ikonet for at vælge en anden mappe at oprette filen i.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiv placeringen af den nye virtuelle disk-fil...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk der kopieres</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation type="unfinished"></translation>
+        <translation>&Ny harddisk der skal oprettes</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk-filforma&t</translation>
     </message>
 </context>
 <context>
@@ -11678,7 +11682,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>Please choose the type of clone you wish to create.</p><p>If you choose <b>Full clone</b>, an exact copy (including all virtual hard disk files) of the original virtual machine will be created.</p><p>If you choose <b>Linked clone</b>, a new machine will be created, but the virtual hard disk files will be tied to the virtual hard disk files of original machine and you will not be able to move the new virtual machine  [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Vælg typen af klon du vil oprette.</p><p>Vælger du <b>Fuld klon</b> får du en nøjagtig kopi (inkl. alle virtuelle harddiske) af den originale virtuelle maskine.</p><p>Vælger du <b>Koblet klon</b> vil en ny maskine blive lavet, men de virtuelle harddisk-filer deles stadig med den originale maskine og du vil ikke kunne flytte den nye virtuelle maskine til en anden computer uden at flytte originalen med.</p> [...]
     </message>
 </context>
 <context>
@@ -12037,51 +12041,51 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Create Virtual Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Opret virtuel harddisk</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk-filtype</translation>
     </message>
     <message>
         <source>Please choose the type of file that you would like to use for the new virtual hard disk. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg typen af fil, som du vil bruge til den nye virtuelle disk. Skal disken ikke bruges med andre virtualiseringsprogrammer behøver du ikke ændre denne indstilling.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Lagring på fysisk harddisk</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg om den nye virtuelle disk-fil allokeres i takt med at den bruges (dynamisk allokering) eller om al pladsen allokeres med det samme (fast størrelse).</translation>
     </message>
     <message>
         <source><p>A <b>dynamically allocated</b> hard disk file will only use space on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), although it will not shrink again automatically when space on it is freed.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>En <b>dynamisk allokeret</b> virtuel disk bruger plads i takt med at den fyldes op (op til den maksimale <b>faste størrelse</b>), men filen formindskes ikke automatiskt, når der frigives plads på den virtuelle disk.</p></translation>
     </message>
     <message>
         <source><p>A <b>fixed size</b> hard disk file may take longer to create on some systems but is often faster to use.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>En <b>fast størrelse</b> virtuel disk-fil kan tage længere tid at oprette, men er ofte hurtigere i brug.</p></translation>
     </message>
     <message>
         <source><p>You can also choose to <b>split</b> the hard disk file into several files of up to two gigabytes each. This is mainly useful if you wish to store the virtual machine on removable USB devices or old systems, some of which cannot handle very large files.</source>
-        <translation type="unfinished"></translation>
+        <translation><p>Du kan vælge at <b>sprede</b> den virtuelle disk over flere filer på op til 2 GB hver. Det kan være nødvendigt, hvis du vil gemme den virtuelle maskine på flytbare USB-enheder eller ældre systemer, som ikke understøtter filer større end 2 GB.</translation>
     </message>
     <message>
         <source>Please type the name of the new virtual hard disk file into the box below or click on the folder icon to select a different folder to create the file in.</source>
-        <translation type="unfinished"></translation>
+        <translation>Indtast navnet på den nye virtuelle disk-fil i tekstfeltet nedenfor eller tryk på mappe-ikonet for at vælge en anden mappe at oprette filen i.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Angiv placeringen af den nye virtuelle disk-fil...</translation>
     </message>
     <message>
         <source>Select the size of the virtual hard disk in megabytes. This size is the limit on the amount of file data that a virtual machine will be able to store on the hard disk.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg størrelsen af den virtuelle harddisk-fil i megabytes. Denne størrelse bestemmer mængden af data en virtuel maskine kan lagre på harddisken.</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk-filforma&t</translation>
     </message>
 </context>
 <context>
@@ -12160,27 +12164,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Harddisk</translation>
     </message>
     <message>
         <source><p>If you wish you can add a virtual hard disk to the new machine. You can either create a new hard disk file or select one from the list or from another location using the folder icon.</p><p>If you need a more complex storage set-up you can skip this step and make the changes to the machine settings once the machine is created.</p><p>The recommended size of the hard disk is <b>%1</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Du kan nu tilføje en virtuel harddisk til den nye maskine. Enten ved at oprette en ny harddisk-fil eller vælge en fra listen eller fra en anden placering ved hjælp af mappe-ikonet.</p><p>Hvis du har behov for en mere avanceret opsætning af lagerenheder kan du springe dette trin over og lave ændringerne, når maskinen er oprettet</p><p>Den anbefalede størrelse af harddisken er <b>%1</b>.</p></translation>
     </message>
     <message>
         <source>&Do not add a virtual hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Tilføj ikke en virtuel hard&disk</translation>
     </message>
     <message>
         <source>&Create a virtual hard disk now</source>
-        <translation type="unfinished"></translation>
+        <translation>Opret en ny virtuel harddisk (&C)</translation>
     </message>
     <message>
         <source>&Use an existing virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Br&ug en eksisterende virtuel harddisk-fil</translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file...</source>
-        <translation type="unfinished">Vælg en virtuel harddisk-fil...</translation>
+        <translation>Vælg en virtuel harddisk-fil...</translation>
     </message>
 </context>
 <context>
@@ -12874,19 +12878,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Displays a window to select a different folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Lader dig vælge en anden mappe.</translation>
     </message>
     <message>
         <source>Displays a window to select a different file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Lader dig vælge en anden fil.</translation>
     </message>
     <message>
         <source>Holds the folder path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser mappestien.</translation>
     </message>
     <message>
         <source>Holds the file path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser filstien.</translation>
     </message>
 </context>
 <context>
@@ -14645,153 +14649,153 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>USB</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished">USB</translation>
+        <translation>USB</translation>
     </message>
     <message>
         <source>off</source>
         <comment>guest monitor status</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inaktiv</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Aktiv</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inaktiv</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Aktiv</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inaktiv</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Aktiv</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inaktiv</translation>
     </message>
     <message>
         <source>Paravirtualization Interface</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Paravirtualiseringstype</translation>
     </message>
     <message>
         <source>Taking Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Tager øjebliksbillede</translation>
     </message>
     <message>
         <source>Taking Online Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Tager online-øjebliksbillede</translation>
     </message>
     <message>
         <source>None</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished">Ingen</translation>
+        <translation>Ingen</translation>
     </message>
     <message>
         <source>Default</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished">Standard</translation>
+        <translation>Standard</translation>
     </message>
     <message>
         <source>Legacy</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Bagudkompatibel</translation>
     </message>
     <message>
         <source>Minimal</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Minimal</translation>
     </message>
     <message>
         <source>Hyper-V</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Hyper-V</translation>
     </message>
     <message>
         <source>KVM</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>KVM</translation>
     </message>
     <message>
         <source>Optical</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Optisk</translation>
     </message>
     <message>
         <source>New dynamically allocated storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nyt dynamisk allokeret lager</translation>
     </message>
     <message>
         <source>TCP</source>
         <comment>PortMode</comment>
-        <translation type="unfinished">TCP</translation>
+        <translation>TCP</translation>
     </message>
     <message>
         <source>OHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>OHCI</translation>
     </message>
     <message>
         <source>EHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>EHCI</translation>
     </message>
     <message>
         <source>xHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>xHCI</translation>
     </message>
     <message>
         <source>USB Port %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>USB port %1</translation>
     </message>
     <message>
         <source>User interface</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Brugerflade</translation>
     </message>
     <message>
         <source>(Optical Drive)</source>
-        <translation type="unfinished"></translation>
+        <translation>(Optisk drev)</translation>
     </message>
     <message>
         <source>Please choose a virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg en virtuel harddisk-fil</translation>
     </message>
     <message>
         <source>All virtual hard disk files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Alle virtuelle harddisk-filer (%1)</translation>
     </message>
     <message>
         <source>Encrypted</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Krypteret</translation>
     </message>
     <message>
         <source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Medium Manager to inspect these files.</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nogle af filerne i harddisk-kæden er utilgængelige. Brug Virtuel diskhåndtering for at undersøge problemet nærmere.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Vælg placeringen af den nye virtuelle harddisk-fil</translation>
     </message>
 </context>
 <context>
@@ -15101,15 +15105,15 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><i>Not&nbsp;Encrypted</i></source>
-        <translation type="unfinished"></translation>
+        <translation><i>Ikke&nbsp;krypteret</i></translation>
     </message>
     <message>
         <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <translation>Krypteret med nøgle:</translation>
     </message>
     <message>
         <source>UUID:</source>
-        <translation type="unfinished"></translation>
+        <translation>UUID:</translation>
     </message>
 </context>
 <context>
@@ -15762,7 +15766,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Clone...</source>
-        <translation>Klon...</translation>
+        <translation>Klon... (&C)</translation>
     </message>
     <message>
         <source>Clone the selected virtual machine</source>
@@ -15770,19 +15774,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Restore selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Indlæs valgt øjebliksbillede af den virtuelle maskine</translation>
     </message>
     <message>
         <source>Delete selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Slet valgt øjebliksbillede af den virtuelle maskine</translation>
     </message>
     <message>
         <source>Display a window with selected snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>Viser detaljer for det valgte øjebliksbillede</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Klon valgt virtuel maskine</translation>
     </message>
 </context>
 <context>
@@ -15819,7 +15823,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="unfinished">Øjebliksbillede %1</translation>
+        <translation>Øjebliksbillede %1</translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
index 278181f..e8a8c21 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
@@ -76,16 +76,16 @@
         <translation>Die VirtualBox-Kernmodule passen nicht zu dieser Version von VirtualBox. Es wird empfohlen, VirtualBox komplett neu zu installieren.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Die VirtualBox-Kernmodule passen nicht zu dieser Version von VirtualBox. Die Installation von VirtualBox war möglicherweise nicht vollständig. Durch Ausführen von <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/> sollte dieses Problem behoben werden. Bitte stellen Sie sicher, dass Sie die OSE-Version von VirtualBox nicht mit der PUEL-Version mischen.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Die VirtualBox-Kernmodule passen nicht zu dieser Version von VirtualBox. Die Installation von VirtualBox war möglicherweise nicht vollständig. Durch Ausführen von <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> sollte dieses Problem behoben werden. Bitte stellen Sie sicher, dass Sie die OSE-Version von VirtualBox nicht mit der PUEL-Version mischen.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Diese Fehlermeldung bedeutet, dass der Kerntreiber entweder nicht ausreichend Speicher anfordern konnte oder dass eine Mapping-Operation fehlgeschlagen ist.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Der VirtualBox Kerntreiber für Linux (vboxdrv) ist entweder nicht geladen oder auf das Gerät /dev/vboxdrv konnte nicht zugegriffen werden. Richten Sie das Kernmodul neu ein, indem Sie<br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/>mit Root-Rechten ausführen. Falls Sie eine Linux-Distribution von Ubuntu, Fedora oder Mandriva verweden, sollten Sie das Paket DKMS zuerst installieren. Dieses compiliert die Kernm [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Der VirtualBox Kerntreiber für Linux (vboxdrv) ist entweder nicht geladen oder auf das Gerät /dev/vboxdrv konnte nicht zugegriffen werden. Richten Sie das Kernmodul neu ein, indem Sie<br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>mit Root-Rechten ausführen. Falls Sie eine Linux-Distribution von Ubuntu, Fedora oder Mandriva verweden, sollten Sie das Paket DKMS zuerst installieren. Dieses compiliert die  [...]
     </message>
 </context>
 <context>
@@ -5434,6 +5434,10 @@
         <source>Proxy not found</source>
         <translation>Proxy nicht gefunden</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
similarity index 82%
copy from src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
copy to src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
index f6cab19..02d13df 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
@@ -1,90 +1,98 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="el">
 <context>
     <name>@@@</name>
     <message>
         <source>English</source>
         <comment>Native language name</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ελληνικά</translation>
     </message>
     <message>
         <source>--</source>
         <comment>Native language country name (empty if this language is for all countries)</comment>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <source>English</source>
         <comment>Language name, in English</comment>
-        <translation type="unfinished"></translation>
+        <translation>Greek</translation>
     </message>
     <message>
         <source>--</source>
         <comment>Language country name, in English (empty if native country name is empty)</comment>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <source>Oracle Corporation</source>
         <comment>Comma-separated list of translators</comment>
-        <translation type="unfinished"></translation>
+        <translation>Oracle Corporation, Andreas Mastichis, Spiros Vlachos, Socratis Kalogrianitis</translation>
     </message>
 </context>
 <context>
     <name>QApplication</name>
     <message>
         <source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η εκτέλεση <b>%1</b> απαιτεί Qt %2.x, βρέθηκε Qt %3.</translation>
     </message>
     <message>
         <source>Incompatible Qt Library Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη συμβατή βιβλιοθήκη Qt</translation>
     </message>
     <message>
         <source>VirtualBox - Error In %1</source>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Λάθος στο %1</translation>
     </message>
     <message>
         <source><html><b>%1 (rc=%2)</b><br/><br/></source>
-        <translation type="unfinished"></translation>
+        <translation><html><b>%1 (rc=%2)</b><br/><br/></translation>
     </message>
     <message>
         <source>Please try reinstalling VirtualBox.</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ εγκαταστήστε ξανά το VirtualBox.</translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
-        <translation type="unfinished"></translation>
+        <translation>Σιγουρευτείτε οτι η υπομονάδα του πυρήνα έχει φορτωθεί επιτυχώς.</translation>
     </message>
     <message>
         <source>VirtualBox - Runtime Error</source>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Λάθος στην εκτέλεση</translation>
     </message>
     <message>
         <source><b>Cannot access the kernel driver!</b><br/><br/></source>
-        <translation type="unfinished"></translation>
+        <translation><b>Δεν ήταν δυνατή η πρόσβαση στον οδηγό πυρήνα!</b><br/><br/></translation>
     </message>
     <message>
         <source>Unknown error %2 during initialization of the Runtime</source>
-        <translation type="unfinished"></translation>
+        <translation>Άγνωστο λάθος %2 κατά την εκκίνηση του εκτελέσιμου</translation>
     </message>
     <message>
         <source>Kernel driver not accessible</source>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός πυρήνα μη προσβάσιμος</translation>
     </message>
     <message>
         <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο οδηγός πυρήνα δεν ταιριάζει με αυτή την έκδοση του VirtualBox. Η εγκατάσταση του VirtualBox δεν ήταν μάλλον επιτυχημένη. Παρακαλούμε απεγκατήστε πλήρως και επανεγγατήστε το VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation type="unfinished"></translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation type="obsolete">Ο οδηγός πυρήνα δεν ταιριάζει με αυτή την έκδοση του VirtualBox. Η εγκατάσταση του VirtualBox δεν ήταν μάλλον επιτυχημένη. Εκτελώντας το <br/><br/> <font color="blue">'/etc/init.d/vboxdrv setup'</font><br/><br/>ίσως να το διορθώσει. Σιγουρευτείτε οτι δεν αναμειγνύετε την OSE με την PUEL έκδοση του VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
+        <translation>Αυτό το λάθος σημαίνει οτι ο οδηγός πυρήνα είτε δεν μπόρεσε να δεσμεύσει αρκετή μνήμη ή κάποια διαδικασία χαρτογράφησης απέτυχε.</translation>
+    </message>
+    <message>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necess [...]
+        <translation type="obsolete">Ο οδηγός πυρήνα του VirtualBox Linux (vboxdrv) δεν φορτώθηκε ή υπάρχει πρόβλημα με δικαιώματα του /dev/vboxdrv. Εγκαταστήστε ξανά την υπομονάδα του πυρήνα εκτελώντας<br/><br/>  <font color="blue">'/etc/init.d/vboxdrv setup'</font><br/><br/>σαν διαχειριστής. Χρήστες των Ubuntu, Fedora ή Mandriva θα έπρεπε να εγκαταστήσουν πρώτα το πακέτο DKMS. Αυτό το πακέτο διατηρεί ένα αρχείο με τις αλλαγές στον [...]
+    </message>
+    <message>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -92,119 +100,167 @@
     <name>QIArrowSplitter</name>
     <message>
         <source>&Back</source>
-        <translation type="unfinished"></translation>
+        <translation>&Προηγούμενο</translation>
     </message>
     <message>
         <source>&Next</source>
-        <translation type="unfinished"></translation>
+        <translation>&Επόμενο</translation>
     </message>
 </context>
 <context>
     <name>QIFileDialog</name>
     <message>
         <source>Select a directory</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή φακέλου</translation>
     </message>
     <message>
         <source>Select a file</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή αρχείου</translation>
     </message>
 </context>
 <context>
     <name>QILabel</name>
     <message>
         <source>&Copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή</translation>
     </message>
 </context>
 <context>
     <name>QIMessageBox</name>
     <message>
         <source>OK</source>
-        <translation type="unfinished"></translation>
+        <translation>Εντάξει</translation>
     </message>
     <message>
         <source>Yes</source>
-        <translation type="unfinished"></translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>No</source>
-        <translation type="unfinished"></translation>
+        <translation>Όχι</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση</translation>
     </message>
     <message>
         <source>&Details</source>
-        <translation type="unfinished"></translation>
+        <translation>&Λεπτομέρειες</translation>
     </message>
     <message>
         <source>&Details (%1 of %2)</source>
-        <translation type="unfinished"></translation>
+        <translation>&Λεπτομέρειες (%1 από %2)</translation>
     </message>
     <message>
         <source>Copy all errors to the clipboard</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή όλων των σφαλμάτων στο πρόχειρο</translation>
     </message>
     <message>
         <source>Copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή</translation>
     </message>
 </context>
 <context>
     <name>UIActionPool</name>
     <message>
         <source>&Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Μηχανή</translation>
+    </message>
+    <message>
+        <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source>
+        <translation type="obsolete">Αυτόματα αλλάζει η ανάλυση του επισκέπτη όταν το αλλάζει το παράθυρο (απαιτεί τις Προσθήκες Επισκέπτη)</translation>
     </message>
     <message>
         <source>&Adjust Window Size</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρύθμιση Μεγέθους Παράθυρου</translation>
     </message>
     <message>
         <source>Adjust window size and position to best fit the guest display</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρύθμιση παραθύρου για τη καλύτερη ομοιότητα με την οθόνη επισκέπτη</translation>
+    </message>
+    <message>
+        <source>Disable &Mouse Integration</source>
+        <translation type="obsolete">Απενεργοποίηση ενσωμάτωσης ποντικιού</translation>
+    </message>
+    <message>
+        <source>Temporarily disable host mouse pointer integration</source>
+        <translation type="obsolete">Προσωρινή απενεργοποίηση ενσωμάτωσης δείκτη ποντικιού</translation>
+    </message>
+    <message>
+        <source>&Insert Ctrl-Alt-Del</source>
+        <translation type="obsolete">Εισαγωγή Ctrl-Alt-Del</translation>
+    </message>
+    <message>
+        <source>Send the Ctrl-Alt-Del sequence to the virtual machine</source>
+        <translation type="obsolete">Στείλτε την ακολουθία Ctrl-Alt-Del στην εικονική μηχανή</translation>
+    </message>
+    <message>
+        <source>Send the Ctrl-Alt-Backspace sequence to the virtual machine</source>
+        <translation type="obsolete">Στείλτε την ακολουθία Ctrl-Alt-Backspace στην εικονική μηχανή</translation>
     </message>
     <message>
         <source>Take a snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Πάρτε ένα στιγμιότυπο της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>&Pause</source>
-        <translation type="unfinished"></translation>
+        <translation>Παύση</translation>
     </message>
     <message>
         <source>Suspend the execution of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Παγώστε τη λειτουργία της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>&Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά</translation>
     </message>
     <message>
         <source>Reset the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>ACPI Sh&utdown</source>
-        <translation type="unfinished"></translation>
+        <translation>Τερματισμός ACPI</translation>
+    </message>
+    <message>
+        <source>Send the ACPI Power Button press event to the virtual machine</source>
+        <translation type="obsolete">Στείλτε την σήμανση πατήματος του κουμπιού ACPI στην εικονική μηχανή</translation>
     </message>
     <message>
         <source>&Close...</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο...</translation>
     </message>
     <message>
         <source>Close the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείστε την εικονική μηχανή</translation>
     </message>
     <message>
         <source>&View</source>
-        <translation type="unfinished"></translation>
+        <translation>Προβολή</translation>
     </message>
     <message>
         <source>&Devices</source>
-        <translation type="unfinished"></translation>
+        <translation>Συσκευές</translation>
+    </message>
+    <message>
+        <source>&CD/DVD Devices</source>
+        <translation type="obsolete">Συσκευές CD/DVD</translation>
+    </message>
+    <message>
+        <source>&Floppy Devices</source>
+        <translation type="obsolete">Συσκευές δισκέτας</translation>
+    </message>
+    <message>
+        <source>&USB Devices</source>
+        <translation type="obsolete">Συσκευές USB</translation>
+    </message>
+    <message>
+        <source>Change the settings of network adapters</source>
+        <translation type="obsolete">Αλλαγή ρυθμίσεων προσαρμογέα</translation>
+    </message>
+    <message>
+        <source>Create or modify shared folders</source>
+        <translation type="obsolete">Δημιουργήστε ή αλλάξτε τους κοινούς φακέλους</translation>
     </message>
     <message>
         <source>De&bug</source>
@@ -213,314 +269,492 @@
     <message>
         <source>&Statistics...</source>
         <comment>debug action</comment>
-        <translation type="unfinished"></translation>
+        <translation>Στατιστικά...</translation>
     </message>
     <message>
         <source>&Command Line...</source>
         <comment>debug action</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γραμμή εντολών...</translation>
     </message>
     <message>
         <source>&Help</source>
-        <translation type="unfinished"></translation>
+        <translation>Βοήθεια</translation>
     </message>
     <message>
         <source>Dock Icon</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικονίδιο γραμμής εργασιών</translation>
     </message>
     <message>
         <source>Show Monitor Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείξτε την Προεπισκόπηση Οθόνης</translation>
     </message>
     <message>
         <source>Show Application Icon</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείξτε το Εικονίδιο της Εφαρμογής</translation>
+    </message>
+    <message>
+        <source>Switch to &Fullscreen</source>
+        <translation type="obsolete">Αλλαγή σε πλήρη οθόνη</translation>
+    </message>
+    <message>
+        <source>Switch between normal and fullscreen mode</source>
+        <translation type="obsolete">Αλλαγή μεταξύ κανονικής και πλήρης οθόνης</translation>
+    </message>
+    <message>
+        <source>Switch to Seam&less Mode</source>
+        <translation type="obsolete">Αλλαγή σε ενσωματωμένη οθόνη</translation>
     </message>
     <message>
         <source>Switch between normal and seamless desktop integration mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Αλλαγή μεταξύ κανονικής και ενσωματωμένης οθόνης</translation>
+    </message>
+    <message>
+        <source>Switch to &Scaled Mode</source>
+        <translation type="obsolete">Αλλαγή σε κλιμακώμενη οθόνη</translation>
     </message>
     <message>
         <source>Switch between normal and scaled mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Αλλαγή μεταξύ κανονικής και κλιμακώμενης οθόνης</translation>
     </message>
     <message>
         <source>Auto-resize &Guest Display</source>
-        <translation type="unfinished"></translation>
+        <translation>Αυτο-ρυθμιζόμενη Οθόνη Επισκέπτη</translation>
     </message>
     <message>
         <source>&Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις...</translation>
+    </message>
+    <message>
+        <source>Manage the virtual machine settings</source>
+        <translation type="obsolete">Διαχειριστείτε τις προτιμήσεις της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Session I&nformation...</source>
-        <translation type="unfinished"></translation>
+        <translation>Πληροφορίες συνεδρίας...</translation>
     </message>
     <message>
         <source>&Contents...</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιεχόμενα...</translation>
     </message>
     <message>
         <source>Show help contents</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείξτε τα περιεχόμενα βοήθειας</translation>
     </message>
     <message>
         <source>Open the browser and go to the VirtualBox product web site</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανοίξτε τον πλοηγό και πηγαίνετε στον ιστότοπο του προϊόντος VirtualBox</translation>
     </message>
     <message>
         <source>Go back to showing all suppressed warnings and messages</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά όλων των αποσιωποιμένων προειδοποιήσεων και μηνυμάτων</translation>
     </message>
     <message>
         <source>&Network Operations Manager...</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαχειριστής Δικτυακών Επιχειρήσεων...</translation>
+    </message>
+    <message>
+        <source>Show Network Operations Manager</source>
+        <translation type="obsolete">Δείξτε τον Διαχειριστής Δικτυακών Επιχειρήσεων</translation>
     </message>
     <message>
         <source>Check for a new VirtualBox version</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελέγξτε για καινούρια έκδοση VirtualBox</translation>
     </message>
     <message>
         <source>&About VirtualBox...</source>
-        <translation type="unfinished"></translation>
+        <translation>Πληροφορίες για το VirtualBox...</translation>
+    </message>
+    <message>
+        <source>Show a window with product information</source>
+        <translation type="obsolete">Δείξτε ένα παράθυρο με πληροφορίες για το προϊόν</translation>
     </message>
     <message>
         <source>Take Sn&apshot...</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέο Στιγμιότυπο...</translation>
     </message>
     <message>
         <source>Take Screensh&ot...</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέο Στιγμιότυπο οθόνης...</translation>
+    </message>
+    <message>
+        <source>Take a screenshot of the virtual machine</source>
+        <translation type="obsolete">Πάρτε ένα στιγμιότυπο οθόνης της εικονικής μηχανής</translation>
+    </message>
+    <message>
+        <source>Ins&ert Ctrl-Alt-Backspace</source>
+        <translation type="obsolete">Εισαγωγή Ctrl-Alt-Del</translation>
     </message>
     <message>
         <source>&File</source>
         <comment>Mac OS X version</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αρχείο</translation>
     </message>
     <message>
         <source>&File</source>
         <comment>Non Mac OS X version</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αρχείο</translation>
     </message>
     <message>
         <source>&Virtual Media Manager...</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαχειριστής Εικονικών Μέσων...</translation>
     </message>
     <message>
         <source>Display the Virtual Media Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε τον Διαχειριστή Εικονικών Μέσων</translation>
     </message>
     <message>
         <source>&Import Appliance...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισαγωγή Συσκευής...</translation>
     </message>
     <message>
         <source>Import an appliance into VirtualBox</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισάγετε μία συσκευή στο VirtualBox</translation>
     </message>
     <message>
         <source>&Export Appliance...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εξαγωγή Συσκευής...</translation>
     </message>
     <message>
         <source>Export one or more VirtualBox virtual machines as an appliance</source>
-        <translation type="unfinished"></translation>
+        <translation>Εξάγετε μία ή περισότερες εικονικές μηχανές του VirtualBox σαν συσκευή</translation>
+    </message>
+    <message>
+        <source>&Preferences...</source>
+        <comment>global settings</comment>
+        <translation type="obsolete">Προτιμήσεις...</translation>
+    </message>
+    <message>
+        <source>Display the global settings window</source>
+        <translation type="obsolete">Εμφανίστε το παράθυρο των προτιμήσεων του προγράμματος</translation>
     </message>
     <message>
         <source>E&xit</source>
-        <translation type="unfinished"></translation>
+        <translation>Έξοδος</translation>
     </message>
     <message>
         <source>Close application</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο εφαρμογής</translation>
     </message>
     <message>
         <source>&Group</source>
-        <translation type="unfinished"></translation>
+        <translation>Ομάδα</translation>
+    </message>
+    <message>
+        <source>Create a new virtual machine</source>
+        <translation type="obsolete">Δημιουργείστε μία καινούρια εικονική μηχανή</translation>
+    </message>
+    <message>
+        <source>Add an existing virtual machine</source>
+        <translation type="obsolete">Προσθέστε μία υπάρχουσα εικονική μηχανή</translation>
+    </message>
+    <message>
+        <source>Rename the selected virtual machine group</source>
+        <translation type="obsolete">Μετονομάστε την επιλεγμένη ομάδα μηχανών</translation>
     </message>
     <message>
         <source>S&tart</source>
-        <translation type="unfinished"></translation>
+        <translation>Ξεκίνημα</translation>
     </message>
     <message>
         <source>S&how</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση</translation>
+    </message>
+    <message>
+        <source>Re&fresh...</source>
+        <translation type="obsolete">Ανανέωση...</translation>
+    </message>
+    <message>
+        <source>Show in Finder</source>
+        <translation type="obsolete">Εμφάνιση στο Finder</translation>
+    </message>
+    <message>
+        <source>Show in Explorer</source>
+        <translation type="obsolete">Εμφάνιση στον Explorer</translation>
+    </message>
+    <message>
+        <source>Show in File Manager</source>
+        <translation type="obsolete">Εμφάνιση στο File Manager</translation>
+    </message>
+    <message>
+        <source>Show the VirtualBox Machine Definition file in the File Manager</source>
+        <translation type="obsolete">Δείξε το αρχείο ορισμού της Εικονικής Μηχανής VirtualBox στο File Manager</translation>
     </message>
     <message>
         <source>&New...</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέα...</translation>
     </message>
     <message>
         <source>&Add...</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη...</translation>
+    </message>
+    <message>
+        <source>Add a new group based on the items selected</source>
+        <translation type="obsolete">Προσθέστε μία ομάδα βάσει των επιλεγμένων</translation>
     </message>
     <message>
         <source>Cl&one...</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλωνοποίηση...</translation>
+    </message>
+    <message>
+        <source>Clone the selected virtual machine</source>
+        <translation type="obsolete">Κλωνοποιήστε την επιλεγμένη εικονική μηχανή</translation>
     </message>
     <message>
         <source>&Remove...</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση...</translation>
     </message>
     <message>
         <source>Discard</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναίρεση</translation>
+    </message>
+    <message>
+        <source>D&iscard saved state...</source>
+        <translation type="obsolete">Αναίρεση σωσμένης κατάστασης...</translation>
     </message>
     <message>
         <source>&Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Show &Log...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση αρχείου...</translation>
     </message>
     <message>
         <source>&VirtualBox Web Site...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ιστότοπος VirtualBox...</translation>
     </message>
     <message>
         <source>&Reset All Warnings</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά Όλων των Προειδοποιήσεων</translation>
     </message>
     <message>
         <source>C&heck for Updates...</source>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος για ενημερώσεις...</translation>
     </message>
     <message>
         <source>Rena&me Group...</source>
-        <translation type="unfinished"></translation>
+        <translation>Μετονομάστε την Ομάδα...</translation>
+    </message>
+    <message>
+        <source>Sort the items of the selected virtual machine group alphabetically</source>
+        <translation type="obsolete">Ταξινομήστε τις επιλεγμένες εικονικές μηχανές αλφαβητικά</translation>
+    </message>
+    <message>
+        <source>Remove the selected virtual machines</source>
+        <translation type="obsolete">Αφαιρέστε τις επιλεγμένες εικονικές μηχανές</translation>
+    </message>
+    <message>
+        <source>Start the selected virtual machines</source>
+        <translation type="obsolete">Αρχίστε τις επιλεγμένες εικονικές μηχανές</translation>
+    </message>
+    <message>
+        <source>Switch to the windows of the selected virtual machines</source>
+        <translation type="obsolete">Αλλαγή στα παράθυρα των επιλεγμένων εικονικών μηχανών</translation>
+    </message>
+    <message>
+        <source>Suspend the execution of the selected virtual machines</source>
+        <translation type="obsolete">Παγώστε τη λειτουργία των επιλεγμένων εικονικών μηχανών</translation>
+    </message>
+    <message>
+        <source>Reset the selected virtual machines</source>
+        <translation type="obsolete">Επαναφέρετε τις επιλεγμένες εικονικές μηχανές</translation>
+    </message>
+    <message>
+        <source>Discard the saved state of the selected virtual machines</source>
+        <translation type="obsolete">Αναιρέστε την σωσμένης κατάστασης των επιλεγμένων εικονικών μηχανών</translation>
+    </message>
+    <message>
+        <source>Show the VirtualBox Machine Definition file in Finder</source>
+        <translation type="obsolete">Δείξε το αρχείο ορισμού της Εικονικής Μηχανής VirtualBox στο Finder</translation>
+    </message>
+    <message>
+        <source>Show the VirtualBox Machine Definition file in Explorer</source>
+        <translation type="obsolete">Δείξε το αρχείο ορισμού της Εικονικής Μηχανής VirtualBox στον Explorer</translation>
+    </message>
+    <message>
+        <source>Create Alias on Desktop</source>
+        <translation type="obsolete">Δημιουργήστε μία συντόμευση στην επιφάνεια εργασίας</translation>
+    </message>
+    <message>
+        <source>Creates an alias file to the VirtualBox Machine Definition file on your desktop</source>
+        <translation type="obsolete">Δημιουργήστε μία συντόμευση του αρχείου ορισμού της Εικονικής Μηχανής VirtualBox στην επιφάνεια εργασίας</translation>
+    </message>
+    <message>
+        <source>Create Shortcut on Desktop</source>
+        <translation type="obsolete">Δημιουργήστε μία συντόμευση στην επιφάνεια εργασίας</translation>
+    </message>
+    <message>
+        <source>Creates an shortcut file to the VirtualBox Machine Definition file on your desktop</source>
+        <translation type="obsolete">Δημιουργήστε μία συντόμευση του αρχείου ορισμού της Εικονικής Μηχανής VirtualBox στην επιφάνεια εργασίας</translation>
+    </message>
+    <message>
+        <source>Save State</source>
+        <translation type="obsolete">Σώστε την κατάσταση</translation>
+    </message>
+    <message>
+        <source>Save the machine state of the selected virtual machines</source>
+        <translation type="obsolete">Σώστε την κατάσταση των επιλεγμένων εικονικών μηχανών</translation>
+    </message>
+    <message>
+        <source>Send the ACPI Power Button press event to the selected virtual machines</source>
+        <translation type="obsolete">Στείλτε την σήμανση πατήματος του κουμπιού ACPI στην εικονική μηχανή</translation>
     </message>
     <message>
         <source>Po&wer Off</source>
-        <translation type="unfinished"></translation>
+        <translation>Σβήσιμο</translation>
+    </message>
+    <message>
+        <source>Power off the selected virtual machines</source>
+        <translation type="obsolete">Σβήστε τις επιλεγμένες εικονικές μηχανές</translation>
+    </message>
+    <message>
+        <source>Show the log files of the selected virtual machine</source>
+        <translation type="obsolete">Δείξτε τα αρχεία συστήματος των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>&New Machine...</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέα Μηχανή...</translation>
     </message>
     <message>
         <source>&Add Machine...</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Μηχανής...</translation>
+    </message>
+    <message>
+        <source>&Ungroup...</source>
+        <translation type="obsolete">Απομαδοποίηση...</translation>
+    </message>
+    <message>
+        <source>Ungroup items of the selected virtual machine group</source>
+        <translation type="obsolete">Απομαδοποιήστε τις επιλεγμένες εικονικές μηχανές</translation>
+    </message>
+    <message>
+        <source>Sort</source>
+        <translation type="obsolete">Ταξινόμηση</translation>
     </message>
     <message>
         <source>Gro&up</source>
-        <translation type="unfinished"></translation>
+        <translation>Ομαδοποίηση</translation>
+    </message>
+    <message>
+        <source>Sort the group of the first selected machine alphabetically</source>
+        <translation type="obsolete">Ταξινομήστε την ομάδα της πρώτης επιλεγμένης μηχανής αλφαβητικά</translation>
     </message>
     <message>
         <source>Shared &Clipboard</source>
-        <translation type="unfinished"></translation>
+        <translation>Κοινά Πρόχειρα</translation>
+    </message>
+    <message>
+        <source>Save the machine state of the virtual machine</source>
+        <translation type="obsolete">Σώστε την κατάσταση της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Power off the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Σβήστε την εικονική μηχανή</translation>
     </message>
     <message>
         <source>&Network Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις Δικτύου...</translation>
     </message>
     <message>
         <source>&Shared Folders Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις Κοινών Φακέλων...</translation>
     </message>
     <message>
         <source>R&emote Display</source>
-        <translation type="unfinished"></translation>
+        <translation>Απομακρυσμένη Οθόνη</translation>
     </message>
     <message>
         <source>&Video Capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Video Capture Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εγγραφή βίντεο</translation>
     </message>
     <message>
-        <source>Popup Menu</source>
-        <translation type="unfinished"></translation>
+        <source>Toggle video capture</source>
+        <translation type="obsolete">Εναλλαγή εγγραφής βίντεο</translation>
     </message>
     <message>
-        <source>&Webcams</source>
-        <translation type="unfinished"></translation>
+        <source>&Video Capture Settings...</source>
+        <translation>Ρυθμίσεις εγγραφής βίντεο...</translation>
     </message>
     <message>
-        <source>&Insert Guest Additions CD image...</source>
-        <translation type="unfinished"></translation>
+        <source>&Logging...</source>
+        <comment>debug action</comment>
+        <translation type="obsolete">Αρχείο συστήματος...</translation>
     </message>
     <message>
-        <source>&VirtualBox</source>
+        <source>Popup Menu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <source>Insert the Guest Additions disk file into the virtual drive</source>
+        <translation type="obsolete">Εισάγετε τον δίσκο με τις Προσθήκες Επισκέπτη στον εικονικό δίσκο</translation>
     </message>
     <message>
-        <source>&Menu Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <source>&Insert Guest Additions CD image...</source>
+        <translation>Εισάγετε τον δίσκο με τις Προσθήκες Επισκέπτη...</translation>
     </message>
     <message>
-        <source>Show Menu &Bar</source>
-        <translation type="unfinished"></translation>
+        <source>Show Session Information Window</source>
+        <translation type="obsolete">Δείξτε το παράθυρο με τις πληροφορίες της συνερδίας</translation>
     </message>
     <message>
-        <source>&Status Bar</source>
-        <translation type="unfinished"></translation>
+        <source>&Webcams</source>
+        <translation>Κάμερες</translation>
     </message>
     <message>
-        <source>&Status Bar Settings...</source>
+        <source>&VirtualBox</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Show Status &Bar</source>
-        <translation type="unfinished"></translation>
+        <source>&File</source>
+        <translation type="unfinished">Αρχείο</translation>
     </message>
     <message>
-        <source>&Input</source>
+        <source>&Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Keyboard</source>
+        <source>&Minimize</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Keyboard Settings...</source>
+        <source>Minimize active window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Mouse</source>
+        <source>Display the Network Operations Manager window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&USB Settings...</source>
+        <source>Display a window with product information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Shared Folders</source>
-        <translation type="unfinished"></translation>
+        <source>&Preferences...</source>
+        <comment>global preferences window</comment>
+        <translation type="unfinished">Προτιμήσεις...</translation>
     </message>
     <message>
-        <source>Show &Log...</source>
-        <comment>debug action</comment>
+        <source>Display the global preferences window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>E&xtra Data Manager...</source>
+        <source>Display the virtual machine settings window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display the Extra Data Manager window</source>
+        <source>Display the virtual machine session information window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&File</source>
+        <source>&Save State</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Window</source>
+        <source>Save the state of the virtual machine</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Minimize</source>
+        <source>Send the ACPI Shutdown signal to the virtual machine</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -540,180 +774,180 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>S&cale Factor</source>
+        <source>&Minimize Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Send the %1 sequence to the virtual machine</source>
+        <source>Automatically resize the guest display when the window is resized</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Mouse Integration</source>
+        <source>Take guest display screenshot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Enable host mouse pointer integration</source>
+        <source>Display virtual machine settings window to configure video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Optical Drives</source>
+        <source>Enable guest display video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Floppy Drives</source>
+        <source>Allow remote desktop (RDP) connections to this machine</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&USB</source>
+        <source>&Menu Bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Logging</source>
-        <comment>debug action</comment>
+        <source>&Menu Bar Settings...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Normal Start</source>
+        <source>Display window to configure menu-bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Headless Start</source>
+        <source>Show Menu &Bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Detachable Start</source>
+        <source>Enable menu-bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Minimize active window</source>
+        <source>&Status Bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display the Network Operations Manager window</source>
+        <source>&Status Bar Settings...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display a window with product information</source>
+        <source>Display window to configure status-bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Preferences...</source>
-        <comment>global preferences window</comment>
+        <source>Show Status &Bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display the global preferences window</source>
+        <source>Enable status-bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display the virtual machine settings window</source>
+        <source>S&cale Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display the virtual machine session information window</source>
+        <source>&Input</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Save State</source>
+        <source>&Keyboard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Save the state of the virtual machine</source>
+        <source>&Keyboard Settings...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Send the ACPI Shutdown signal to the virtual machine</source>
+        <source>Display global preferences window to configure keyboard shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Minimize Window</source>
+        <source>&Insert %1</source>
+        <comment>that means send the %1 key sequence to the virtual machine</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Automatically resize the guest display when the window is resized</source>
+        <source>Send the %1 sequence to the virtual machine</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Take guest display screenshot</source>
+        <source>&Mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display virtual machine settings window to configure video capture</source>
+        <source>&Mouse Integration</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Enable guest display video capture</source>
+        <source>Enable host mouse pointer integration</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Allow remote desktop (RDP) connections to this machine</source>
+        <source>&Hard Disks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display window to configure menu-bar</source>
+        <source>&Hard Disk Settings...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Enable menu-bar</source>
+        <source>Display virtual machine settings window to configure hard disks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display window to configure status-bar</source>
+        <source>&Optical Drives</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Enable status-bar</source>
+        <source>&Floppy Drives</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display global preferences window to configure keyboard shortcuts</source>
+        <source>&Network</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Insert %1</source>
-        <comment>that means send the %1 key sequence to the virtual machine</comment>
+        <source>Display virtual machine settings window to configure network adapters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Hard Disks</source>
+        <source>&USB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Hard Disk Settings...</source>
+        <source>&USB Settings...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display virtual machine settings window to configure hard disks</source>
+        <source>Display virtual machine settings window to configure USB devices</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Network</source>
+        <source>&Drag and Drop</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display virtual machine settings window to configure network adapters</source>
+        <source>&Shared Folders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display virtual machine settings window to configure USB devices</source>
+        <source>Display virtual machine settings window to configure shared folders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Drag and Drop</source>
+        <source>Insert the Guest Additions disk file into the virtual optical drive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Display virtual machine settings window to configure shared folders</source>
+        <source>&Logging</source>
+        <comment>debug action</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Insert the Guest Additions disk file into the virtual optical drive</source>
-        <translation type="unfinished"></translation>
+        <source>Show &Log...</source>
+        <comment>debug action</comment>
+        <translation type="unfinished">Εμφάνιση αρχείου...</translation>
     </message>
     <message>
         <source>%1%</source>
         <comment>scale-factor</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">%1%</translation>
     </message>
     <message>
         <source>Enable</source>
@@ -754,6 +988,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>E&xtra Data Manager...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Display the Extra Data Manager window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Create new virtual machine</source>
         <translation type="unfinished"></translation>
     </message>
@@ -802,10 +1044,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>&Normal Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Headless Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Start selected virtual machines in the background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>&Detachable Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Start selected virtual machines with option of continuing in background</source>
         <translation type="unfinished"></translation>
     </message>
@@ -897,17 +1151,6 @@
 <context>
     <name>UIAddDiskEncryptionPasswordDialog</name>
     <message>
-        <source>%1 - Disk Encryption</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message numerus="yes">
-        <source>This virtual machine is password protected. Please enter the %n encryption password(s) below.</source>
-        <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many passwords are in the list and doesn't need to be told).</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-        </translation>
-    </message>
-    <message>
         <source>ID</source>
         <comment>password table field</comment>
         <translation type="unfinished"></translation>
@@ -922,6 +1165,19 @@
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many hard drives are in the tool-tip and doesn't need to be told).</comment>
         <translation type="unfinished">
             <numerusform></numerusform>
+            <numerusform></numerusform>
+        </translation>
+    </message>
+    <message>
+        <source>%1 - Disk Encryption</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <source>This virtual machine is password protected. Please enter the %n encryption password(s) below.</source>
+        <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many passwords are in the list and doesn't need to be told).</comment>
+        <translation type="unfinished">
+            <numerusform></numerusform>
+            <numerusform></numerusform>
         </translation>
     </message>
 </context>
@@ -929,99 +1185,115 @@
     <name>UIApplianceEditorWidget</name>
     <message>
         <source>Virtual System %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικονικό Σύστημα %1</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Product</source>
-        <translation type="unfinished"></translation>
+        <translation>Προϊόν</translation>
     </message>
     <message>
         <source>Product-URL</source>
-        <translation type="unfinished"></translation>
+        <translation>URL-Προϊόντος</translation>
     </message>
     <message>
         <source>Vendor</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατασκευαστής</translation>
     </message>
     <message>
         <source>Vendor-URL</source>
-        <translation type="unfinished"></translation>
+        <translation>URL-Κατασκευαστή</translation>
     </message>
     <message>
         <source>Version</source>
-        <translation type="unfinished"></translation>
+        <translation>Έκδοση</translation>
     </message>
     <message>
         <source>Description</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιγραφή</translation>
     </message>
     <message>
         <source>License</source>
-        <translation type="unfinished"></translation>
+        <translation>Άδεια</translation>
     </message>
     <message>
         <source>Guest OS Type</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος ΛΣ Επισκέπτη</translation>
     </message>
     <message>
         <source>CPU</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργαστής</translation>
     </message>
     <message>
         <source>RAM</source>
-        <translation type="unfinished"></translation>
+        <translation>Μνήμη</translation>
+    </message>
+    <message>
+        <source>Hard Disk Controller (IDE)</source>
+        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (IDE)</translation>
+    </message>
+    <message>
+        <source>Hard Disk Controller (SATA)</source>
+        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (SATA)</translation>
+    </message>
+    <message>
+        <source>Hard Disk Controller (SCSI)</source>
+        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (SCSI)</translation>
     </message>
     <message>
         <source>DVD</source>
-        <translation type="unfinished"></translation>
+        <translation>DVD</translation>
     </message>
     <message>
         <source>Floppy</source>
-        <translation type="unfinished"></translation>
+        <translation>Δισκέτα</translation>
     </message>
     <message>
         <source>Network Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάρτα δικτύου</translation>
     </message>
     <message>
         <source>USB Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής USB</translation>
     </message>
     <message>
         <source>Sound Card</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάρτα ήχου</translation>
     </message>
     <message>
         <source>Virtual Disk Image</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικόνα Εικονικού Δίσκου</translation>
     </message>
     <message>
         <source>Unknown Hardware Item</source>
-        <translation type="unfinished"></translation>
+        <translation>Άγνωστο Είδος Υλικού</translation>
     </message>
     <message>
         <source><b>Original Value:</b> %1</source>
-        <translation type="unfinished"></translation>
+        <translation><b>Πρωτότυπη Τιμή:</b> %1</translation>
     </message>
     <message>
         <source>Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις</translation>
     </message>
     <message>
         <source>Warnings:</source>
-        <translation type="unfinished"></translation>
+        <translation>Προειδοποιήσεις:</translation>
+    </message>
+    <message>
+        <source>Hard Disk Controller (SAS)</source>
+        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (SAS)</translation>
     </message>
     <message>
         <source>When checked a new unique MAC address will assigned to all configured network cards.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, μία νέα μοναδική διεύθυνση MAC θα ανατεθεί σε όλες τις ρυθμισμένες κάρτες δικτύου.</translation>
     </message>
     <message>
         <source>&Reinitialize the MAC address of all network cards</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναρχικοποίησε τις διευθύνσεις MAC όλων των καρτών δικτύου</translation>
     </message>
     <message>
         <source>Storage Controller (IDE)</source>
@@ -1044,18 +1316,18 @@
     <name>UIApplianceImportEditorWidget</name>
     <message>
         <source>Importing Appliance ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισάγεται η Συσκευή ...</translation>
     </message>
     <message>
         <source>Reading Appliance ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαβάζεται η Συσκευή ...</translation>
     </message>
 </context>
 <context>
     <name>UIDetailsPagePrivate</name>
     <message>
         <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source>
-        <translation type="unfinished"></translation>
+        <translation>Η συγκεκριμένη εικονική μηχανή είναι <i>μη-προσβάσιμη</i>. Παρακαλώ κοιτάξτε το μήνυμα λάθους και πατήστε το κουμπί <b>Ανανέωση</b> αν θέλετε να επαναλάβετε τον έλεγχο προσβασιμότητας:</translation>
     </message>
 </context>
 <context>
@@ -1073,44 +1345,44 @@
     <name>UIDownloader</name>
     <message>
         <source>Looking for %1...</source>
-        <translation type="unfinished"></translation>
+        <translation>Κοιτάω για το %1...</translation>
     </message>
     <message>
         <source>Downloading %1...</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατεβάζω %1...</translation>
     </message>
 </context>
 <context>
     <name>UIDownloaderAdditions</name>
     <message>
         <source>Select folder to save Guest Additions image to</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε το φάκελο που θα σώσετε τις Προσθήκες Επισκέπτη</translation>
     </message>
     <message>
         <source>VirtualBox Guest Additions</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκες Επισκέπτη VirtualBox</translation>
     </message>
 </context>
 <context>
     <name>UIDownloaderExtensionPack</name>
     <message>
         <source>Select folder to save %1 to</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε το φάκελο που θα σώσετε το %1</translation>
     </message>
     <message>
         <source>VirtualBox Extension Pack</source>
-        <translation type="unfinished"></translation>
+        <translation>Πακέτο Επέκτασης VirtualBox</translation>
     </message>
 </context>
 <context>
     <name>UIDownloaderUserManual</name>
     <message>
         <source>Select folder to save User Manual to</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε το φάκελο που θα σώσετε το Εγχειρίδιο Χρήσης</translation>
     </message>
     <message>
         <source>VirtualBox User Manual</source>
-        <translation type="unfinished"></translation>
+        <translation>Εγχειρίδιο Χρήσης VirtualBox</translation>
     </message>
 </context>
 <context>
@@ -1118,66 +1390,69 @@
     <message>
         <source><b>%1</b></source>
         <comment>Group item tool-tip / Group name</comment>
-        <translation type="unfinished"></translation>
+        <translation><b>%1</b></translation>
     </message>
     <message numerus="yes">
         <source>%n group(s)</source>
         <comment>Group item tool-tip / Group info</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n ομάδα</numerusform>
+            <numerusform>%n ομάδες</numerusform>
         </translation>
     </message>
     <message>
         <source><nobr>%1</nobr></source>
         <comment>Group item tool-tip / Group info wrapper</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>%1</nobr></translation>
     </message>
     <message numerus="yes">
         <source>%n machine(s)</source>
         <comment>Group item tool-tip / Machine info</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n μηχανή</numerusform>
+            <numerusform>%n μηχανές</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>(%n running)</source>
         <comment>Group item tool-tip / Running machine info</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>(%n τρέχει)</numerusform>
+            <numerusform>(%n τρέχουν)</numerusform>
         </translation>
     </message>
     <message>
         <source><nobr>%1</nobr></source>
         <comment>Group item tool-tip / Machine info wrapper</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>%1</nobr></translation>
     </message>
     <message>
         <source><nobr>%1 %2</nobr></source>
         <comment>Group item tool-tip / Machine info wrapper, including running</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>%1 %2</nobr></translation>
     </message>
     <message>
         <source>Collapse group</source>
-        <translation type="unfinished"></translation>
+        <translation>Συρίκνωση ομάδας</translation>
     </message>
     <message>
         <source>Expand group</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύρυνση ομάδας</translation>
     </message>
     <message>
         <source>Enter group</source>
-        <translation type="unfinished"></translation>
+        <translation>Είσοδος στην ομάδα</translation>
     </message>
     <message>
         <source>Exit group</source>
-        <translation type="unfinished"></translation>
+        <translation>Έξοδος από την ομάδα</translation>
     </message>
 </context>
 <context>
     <name>UIGChooserModel</name>
     <message>
         <source>New group</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέα Ομάδα</translation>
     </message>
 </context>
 <context>
@@ -1185,147 +1460,152 @@
     <message>
         <source>Name</source>
         <comment>details (general)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Groups</source>
         <comment>details (general)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ομάδες</translation>
     </message>
     <message>
         <source>%1 MB</source>
         <comment>details</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 MB</translation>
     </message>
     <message>
         <source>Processors</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργαστές</translation>
     </message>
     <message>
         <source>%1%</source>
         <comment>details</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source>VT-x/AMD-V</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>VT-x/AMD-V</translation>
     </message>
     <message>
         <source>PAE/NX</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>PAE/NX</translation>
     </message>
     <message>
         <source>Acceleration</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιτάχυνση</translation>
     </message>
     <message>
         <source>Screens</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οθόνες</translation>
     </message>
     <message>
         <source>3D</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>3Δ</translation>
     </message>
     <message>
         <source>Acceleration</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιτάχυνση</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (display/vrde/VRDE server)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
+    </message>
+    <message>
+        <source>[CD/DVD]</source>
+        <comment>details (storage)</comment>
+        <translation type="obsolete">[CD/DVD]</translation>
     </message>
     <message>
         <source>Controller</source>
         <comment>details (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Adapter %1</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κάρτα δικτύου %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (network/adapter)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details (serial)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (serial)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details (parallel)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (parallel)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>%1 (%2 active)</source>
         <comment>details (usb)</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 (%2 ενεργό)</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (usb)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>None</source>
         <comment>details (shared folders)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κανένας</translation>
     </message>
     <message>
         <source>None</source>
         <comment>details (description)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία</translation>
     </message>
     <message>
         <source>Operating System</source>
         <comment>details (general)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Λειτουργικό Σύστημα</translation>
     </message>
     <message>
         <source>Information Inaccessible</source>
         <comment>details</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πληροφορίες μη προσβάσιμες</translation>
     </message>
     <message>
         <source>Base Memory</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Βασική Μνήμη</translation>
     </message>
     <message>
         <source>Execution Cap</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Όριο εκτέλεσης</translation>
     </message>
     <message>
         <source>Boot Order</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σειρά εκκίνησης</translation>
     </message>
     <message>
         <source>Nested Paging</source>
@@ -1335,12 +1615,12 @@
     <message>
         <source>Video Memory</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Βιντεακή Μνήμη</translation>
     </message>
     <message>
         <source>2D Video</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Βίντεο 2Δ</translation>
     </message>
     <message>
         <source>Remote Desktop Server Port</source>
@@ -1355,12 +1635,12 @@
     <message>
         <source>Not Attached</source>
         <comment>details (storage)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη συνδεδεμένο</translation>
     </message>
     <message>
         <source>Host Driver</source>
         <comment>details (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Bridged Adapter, %1</source>
@@ -1370,61 +1650,66 @@
     <message>
         <source>Internal Network, '%1'</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εσωτερικό δίκτυο, '%1'</translation>
     </message>
     <message>
         <source>Host-only Adapter, '%1'</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μόνο-με-οικοδεσπότη δίκτυο, '%1'</translation>
     </message>
     <message>
         <source>Generic Driver, '%1'</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γενικός Οδηγός, '%1'</translation>
+    </message>
+    <message>
+        <source>Generic Driver, '%1' {&nbsp;%2&nbsp;}</source>
+        <comment>details (network)</comment>
+        <translation type="obsolete">Γενικός Οδηγός, '%1' {&nbsp;%2&nbsp;}</translation>
     </message>
     <message>
         <source>Device Filters</source>
         <comment>details (usb)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Φίλτρα Συσκευών</translation>
     </message>
     <message>
         <source>USB Controller Inaccessible</source>
         <comment>details (usb)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής USB μη προσβάσιμος</translation>
     </message>
     <message>
         <source>Shared Folders</source>
         <comment>details (shared folders)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κοινοί Φάκελοι</translation>
     </message>
     <message>
         <source>Video Capture File</source>
         <comment>details (display/video capture)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αρχείο εγγραφής βίντεο</translation>
     </message>
     <message>
         <source>Video Capture Attributes</source>
         <comment>details (display/video capture)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ιδιότητες εγγραφής βίντεο</translation>
     </message>
     <message>
         <source>Video Capture</source>
         <comment>details (display/video capture)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εγγραφή βίντεο</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (display/video capture)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>NAT Network, '%1'</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο NAT, %1</translation>
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέγεθος εικόνας: %1x%2, Ρυθμός εικόνας: %3fps, Ρυθμός μετάδοσης: %4kbps</translation>
     </message>
     <message>
         <source>Minimal Paravirtualization</source>
@@ -1442,88 +1727,88 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>[Optical Drive]</source>
-        <comment>details (storage)</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>USB Controller</source>
-        <comment>details (usb)</comment>
+        <source>Scale-factor</source>
+        <comment>details (display)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Mini-toolbar Position</source>
-        <comment>details (user interface)</comment>
+        <source>Unscaled HiDPI Video Output</source>
+        <comment>details (display)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Top</source>
-        <comment>details (user interface/mini-toolbar position)</comment>
+        <source>Enabled</source>
+        <comment>details (display/Unscaled HiDPI Video Output)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Bottom</source>
-        <comment>details (user interface/mini-toolbar position)</comment>
+        <source>[Optical Drive]</source>
+        <comment>details (storage)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Mini-toolbar</source>
-        <comment>details (user interface)</comment>
+        <source>Generic Driver, '%1' { %2 }</source>
+        <comment>details (network)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Disabled</source>
-        <comment>details (user interface/mini-toolbar)</comment>
-        <translation type="unfinished"></translation>
+        <source>USB Controller</source>
+        <comment>details (usb)</comment>
+        <translation type="unfinished">Ελεγκτής USB</translation>
     </message>
     <message>
-        <source>Scale-factor</source>
-        <comment>details (display)</comment>
+        <source>Menu-bar</source>
+        <comment>details (user interface)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unscaled HiDPI Video Output</source>
-        <comment>details (display)</comment>
+        <source>Enabled</source>
+        <comment>details (user interface/menu-bar)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Enabled</source>
-        <comment>details (display/Unscaled HiDPI Video Output)</comment>
+        <source>Disabled</source>
+        <comment>details (user interface/menu-bar)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Menu-bar</source>
+        <source>Status-bar</source>
         <comment>details (user interface)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <source>Enabled</source>
-        <comment>details (user interface/menu-bar)</comment>
+        <comment>details (user interface/status-bar)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <source>Disabled</source>
-        <comment>details (user interface/menu-bar)</comment>
+        <comment>details (user interface/status-bar)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Status-bar</source>
+        <source>Mini-toolbar Position</source>
         <comment>details (user interface)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Enabled</source>
-        <comment>details (user interface/status-bar)</comment>
+        <source>Top</source>
+        <comment>details (user interface/mini-toolbar position)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Disabled</source>
-        <comment>details (user interface/status-bar)</comment>
+        <source>Bottom</source>
+        <comment>details (user interface/mini-toolbar position)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Generic Driver, '%1' { %2 }</source>
-        <comment>details (network)</comment>
+        <source>Mini-toolbar</source>
+        <comment>details (user interface)</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disabled</source>
+        <comment>details (user interface/mini-toolbar)</comment>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -1531,92 +1816,100 @@
     <name>UIGMachinePreview</name>
     <message>
         <source>Every 0.5 s</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάθε 0,5 s</translation>
     </message>
     <message>
         <source>Every 1 s</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάθε 1 s</translation>
     </message>
     <message>
         <source>Every 2 s</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάθε 2 s</translation>
     </message>
     <message>
         <source>Every 5 s</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάθε 5 s</translation>
     </message>
     <message>
         <source>Every 10 s</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάθε 10 s</translation>
     </message>
     <message>
         <source>Update disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη ανανέωση</translation>
     </message>
     <message>
         <source>No preview</source>
-        <translation type="unfinished"></translation>
+        <translation>Χωρίς προεπισκόπηση</translation>
     </message>
 </context>
 <context>
     <name>UIGlobalSettingsDisplay</name>
     <message>
         <source>Maximum Guest Screen &Size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέγιστο Μέγεθος Οθόνη Επισκέπτη:</translation>
     </message>
     <message>
         <source>&Width:</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλάτος:</translation>
+    </message>
+    <message>
+        <source>Specifies the maximum width which we would like the guest to use.</source>
+        <translation type="obsolete">Προσδιορίζει το μέγιστο πλάτος που θέλουμε τον επισκέπτη να χρησιμοποιήσει.</translation>
     </message>
     <message>
         <source>&Height:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ύψος:</translation>
+    </message>
+    <message>
+        <source>Specifies the maximum height which we would like the guest to use.</source>
+        <translation type="obsolete">Προσδιορίζει το μέγιστο ύψος που θέλουμε τον επισκέπτη να χρησιμοποιήσει.</translation>
     </message>
     <message>
         <source>Automatic</source>
         <comment>Maximum Guest Screen Size</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αυτόματο</translation>
     </message>
     <message>
         <source>Suggest a reasonable maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προτείνει ένα λογικό μέγιστο μέγεθος οθόνης στον επισκέπτη. Ο επισκέπτης θα δει αυτή την πρόταση μόνο όταν έχουν εγκατασταθεί οι Προσθήκες Επισκέπτη.</translation>
     </message>
     <message>
         <source>None</source>
         <comment>Maximum Guest Screen Size</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κανένα</translation>
     </message>
     <message>
         <source>Do not attempt to limit the size of the guest screen.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μην επιχειρείς τον περιορισμό του μεγέθους της οθόνης του επισκέπτη.</translation>
     </message>
     <message>
         <source>Hint</source>
         <comment>Maximum Guest Screen Size</comment>
-        <translation type="unfinished"></translation>
+        <translation>Υπόδειξη</translation>
     </message>
     <message>
         <source>Suggest a maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προτείνει ένα μέγιστο μέγεθος οθόνης στον επισκέπτη. Ο επισκέπτης θα δει αυτή την πρόταση μόνο όταν έχουν εγκατασταθεί οι Προσθήκες Επισκέπτη.</translation>
     </message>
     <message>
-        <source>Machine Windows:</source>
+        <source>Holds the maximum width which we would like the guest to use.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Raise Window Under Mouse</source>
+        <source>Holds the maximum height which we would like the guest to use.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Holds the maximum width which we would like the guest to use.</source>
+        <source>Machine Windows:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Holds the maximum height which we would like the guest to use.</source>
+        <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
+        <source>&Raise Window Under Mouse</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -1624,35 +1917,43 @@
     <name>UIGlobalSettingsExtension</name>
     <message>
         <source>Lists all installed packages.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει όλα τα εγκατεστημένα πακέτα.</translation>
     </message>
     <message>
         <source>Active</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργό</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Version</source>
-        <translation type="unfinished"></translation>
+        <translation>Έκδοση</translation>
+    </message>
+    <message>
+        <source>Add package</source>
+        <translation type="obsolete">Προσθήκη πακέτου</translation>
+    </message>
+    <message>
+        <source>Remove package</source>
+        <translation type="obsolete">Αφαίρεση πακέτου</translation>
     </message>
     <message>
         <source>Select an extension package file</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε ένα αρχείο πακέτου επέκτασης</translation>
     </message>
     <message>
         <source>Extension package files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Αρχεία πακέτου επέκτασης (%1)</translation>
     </message>
     <message>
         <source>Extensions</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεκτάσεις</translation>
     </message>
     <message>
         <source>&Extension Packages</source>
-        <translation type="unfinished"></translation>
+        <translation>Πακέτα επέκτασης</translation>
     </message>
     <message>
         <source>Add Package</source>
@@ -1683,7 +1984,7 @@
     </message>
     <message>
         <source>Default &Machine Folder:</source>
-        <translation type="unfinished"></translation>
+        <translation>Προεπιλεγμένος Φάκελος Μηχανών:</translation>
     </message>
     <message>
         <source>V&RDP Authentication Library:</source>
@@ -1742,161 +2043,173 @@
     <message>
         <source> (built-in)</source>
         <comment>Language</comment>
-        <translation type="unfinished"></translation>
+        <translation> (εγγενές)</translation>
     </message>
     <message>
         <source><unavailable></source>
         <comment>Language</comment>
-        <translation type="unfinished"></translation>
+        <translation><μη-διαθέσιμη></translation>
     </message>
     <message>
         <source><unknown></source>
         <comment>Author(s)</comment>
-        <translation type="unfinished"></translation>
+        <translation><Άγνωστη></translation>
     </message>
     <message>
         <source>Default</source>
         <comment>Language</comment>
-        <translation type="unfinished"></translation>
+        <translation>Προεπιλεγμένη</translation>
     </message>
     <message>
         <source>Language:</source>
-        <translation type="unfinished"></translation>
+        <translation>Γλώσσα:</translation>
     </message>
     <message>
         <source>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει όλες τις διαθέσιμες γλώσσες. Η ενεργή γλώσσα είναι γραμμένη <b>έντονα</b>. Επιλέξτε <i>Προεπιλεγμένη</i> για να επαναφέρετε την αρχική γλώσσα του συστήματος.</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Id</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναγνωριστικό</translation>
     </message>
     <message>
         <source>Language</source>
-        <translation type="unfinished"></translation>
+        <translation>Γλώσσα</translation>
     </message>
     <message>
         <source>Author</source>
-        <translation type="unfinished"></translation>
+        <translation>Συγγραφέας</translation>
     </message>
     <message>
         <source>Author(s):</source>
-        <translation type="unfinished"></translation>
+        <translation>Συγγραφέας(εις):</translation>
     </message>
     <message>
         <source>&Interface Languages</source>
-        <translation type="unfinished"></translation>
+        <translation>Γλώσσες προγράμματος</translation>
     </message>
 </context>
 <context>
     <name>UIGlobalSettingsNetwork</name>
     <message>
         <source>Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάρτα δικτύου</translation>
     </message>
     <message>
         <source>Automatically configured</source>
         <comment>interface</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αυτόματα ρυθμισμένη</translation>
     </message>
     <message>
         <source>Manually configured</source>
         <comment>interface</comment>
-        <translation type="unfinished"></translation>
+        <translation>Χειροκίνητα ρυθμισμένη</translation>
     </message>
     <message>
         <source>IPv4 Address</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύθυνση IPv4</translation>
     </message>
     <message>
         <source>Not set</source>
         <comment>address</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη ορισμένη</translation>
     </message>
     <message>
         <source>IPv4 Network Mask</source>
-        <translation type="unfinished"></translation>
+        <translation>Μάσκα Δικτύου IPv4</translation>
     </message>
     <message>
         <source>Not set</source>
         <comment>mask</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη ορισμένη</translation>
     </message>
     <message>
         <source>IPv6 Address</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύθυνση IPv6</translation>
     </message>
     <message>
         <source>IPv6 Network Mask Length</source>
-        <translation type="unfinished"></translation>
+        <translation>Μήκος Μάσκας Δικτύου IPv6</translation>
     </message>
     <message>
         <source>Not set</source>
         <comment>length</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη ορισμένη</translation>
     </message>
     <message>
         <source>DHCP Server</source>
-        <translation type="unfinished"></translation>
+        <translation>Διακομιστής DHCP</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>server</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένος</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>server</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένος</translation>
     </message>
     <message>
         <source>Address</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύθυνση</translation>
     </message>
     <message>
         <source>Network Mask</source>
-        <translation type="unfinished"></translation>
+        <translation>Μάσκα Δικτύου</translation>
     </message>
     <message>
         <source>Lower Bound</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατώτερο όριο</translation>
     </message>
     <message>
         <source>Not set</source>
         <comment>bound</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη ορισμένο</translation>
     </message>
     <message>
         <source>Upper Bound</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανώτερο όριο</translation>
+    </message>
+    <message>
+        <source>&Add host-only network</source>
+        <translation type="obsolete">Προσθήκη μόνο-με-οικοδεσπότη δίκτυο</translation>
+    </message>
+    <message>
+        <source>&Remove host-only network</source>
+        <translation type="obsolete">Αφαίρεση μόνο-με-οικοδεσπότη δίκτυο</translation>
+    </message>
+    <message>
+        <source>&Edit host-only network</source>
+        <translation type="obsolete">Επεξεργασία μόνο-με-οικοδεσπότη δικτύου</translation>
     </message>
     <message>
         <source>Lists all available host-only networks.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει όλα τα διαθέσιμα μόνο-με-οικοδεσπότη δίκτυα.</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Networking</source>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο</translation>
     </message>
     <message>
         <source>&NAT Networks</source>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυα NAT</translation>
     </message>
     <message>
         <source>Lists all available NAT networks.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει όλα τα διαθέσιμα NAT δίκτυα.</translation>
     </message>
     <message>
         <source>&Host-only Networks</source>
-        <translation type="unfinished"></translation>
+        <translation>Μόνο-με-οικοδεσπότη δίκτυα</translation>
     </message>
     <message>
         <source>No new name specified for the NAT network previously called <b>%1</b>.</source>
@@ -1920,47 +2233,47 @@
     </message>
     <message>
         <source>Network Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα Δικτύου</translation>
     </message>
     <message>
         <source>[empty]</source>
-        <translation type="unfinished"></translation>
+        <translation>[κενό]</translation>
     </message>
     <message>
         <source>%1 (renamed from %2)</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 (μετονομάστηκε από %2)</translation>
     </message>
     <message>
         <source>Old Network Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Παλιό Όνομα Δικτύου</translation>
     </message>
     <message>
         <source>New Network Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέο Όνομα Δικτύου</translation>
     </message>
     <message>
         <source>Network CIDR</source>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο CIDR</translation>
     </message>
     <message>
         <source>Supports DHCP</source>
-        <translation type="unfinished"></translation>
+        <translation>Υποστηρίζει DHCP</translation>
     </message>
     <message>
         <source>yes</source>
-        <translation type="unfinished"></translation>
+        <translation>ναι</translation>
     </message>
     <message>
         <source>no</source>
-        <translation type="unfinished"></translation>
+        <translation>όχι</translation>
     </message>
     <message>
         <source>Supports IPv6</source>
-        <translation type="unfinished"></translation>
+        <translation>Υποστηρίζει IPv6</translation>
     </message>
     <message>
         <source>Default IPv6 route</source>
-        <translation type="unfinished"></translation>
+        <translation>Προεπιλεγμένος δρομολογητής IPv6</translation>
     </message>
     <message>
         <source>Host interface <b>%1</b> does not currently have a valid IPv4 address.</source>
@@ -1997,7 +2310,7 @@
     <message>
         <source>Active</source>
         <comment>NAT network</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ενεργό</translation>
     </message>
     <message>
         <source>Add NAT Network</source>
@@ -2244,14 +2557,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Holds the proxy host.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Holds the proxy port.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2275,6 +2580,14 @@
         <source>&Manual Proxy Configuration</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Holds the proxy host.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Holds the proxy port.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -2331,7 +2644,7 @@
     <name>UIHelpButton</name>
     <message>
         <source>&Help</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Βοήθεια</translation>
     </message>
 </context>
 <context>
@@ -2420,7 +2733,7 @@
     <name>UIHotKeyTableModel</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Όνομα</translation>
     </message>
     <message>
         <source>Shortcut</source>
@@ -2536,7 +2849,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p style='white-space:pre'><nobr>Indicates the activity of the display:</nobr>%1</p></source>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
+        <comment>HDD tooltip</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -2550,8 +2864,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
-        <comment>HDD tooltip</comment>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the display:</nobr>%1</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -2612,7 +2925,7 @@
     </message>
     <message>
         <source>MB</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">MB</translation>
     </message>
     <message>
         <source>Extended Features:</source>
@@ -2758,18 +3071,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><i>About %1MB per 5 minute video</i></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Remote Display is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>&Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2786,19 +3087,19 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, guest screen contents will not be scaled up to compensate for high host screen resolutions.</source>
+        <source>HiDPI Support:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Use &Unscaled HiDPI Output</source>
+        <source>When checked, guest screen contents will not be scaled up to compensate for high host screen resolutions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Acceleration:</source>
+        <source>Use &Unscaled HiDPI Output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>HiDPI Support:</source>
+        <source>Acceleration:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -2850,11 +3151,23 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1 MB</source>
+        <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least <b>%1</b>.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Remote Display is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>%1 MB</source>
+        <translation type="unfinished">%1 MB</translation>
+    </message>
+    <message>
         <source>%1%</source>
+        <translation type="unfinished">%1%</translation>
+    </message>
+    <message>
+        <source><i>About %1MB per 5 minute video</i></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -2865,47 +3178,47 @@
 <context>
     <name>UIMachineSettingsGeneral</name>
     <message>
-        <source>Basi&c</source>
+        <source>&Shared Clipboard:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>A&dvanced</source>
+        <source>Selects which clipboard data will be copied between the guest and the host OS. This feature requires Guest Additions to be installed in the guest OS.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Shared Clipboard:</source>
+        <source>S&napshot Folder:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Selects which clipboard data will be copied between the guest and the host OS. This feature requires Guest Additions to be installed in the guest OS.</source>
+        <source>Holds the description of the virtual machine. The description field is useful for commenting on configuration details of the installed guest OS.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>S&napshot Folder:</source>
+        <source>Selects which data will be copied between the guest and the host OS by drag'n'drop. This feature requires Guest Additions to be installed in the guest OS.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>D&escription</source>
+        <source>No name specified for the virtual machine.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Holds the description of the virtual machine. The description field is useful for commenting on configuration details of the installed guest OS.</source>
+        <source>The virtual machine operating system hint is set to a 64-bit type. 64-bit guest systems require hardware virtualization, so this will be enabled automatically if you confirm the changes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>D&rag'n'Drop:</source>
+        <source>Basi&c</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Selects which data will be copied between the guest and the host OS by drag'n'drop. This feature requires Guest Additions to be installed in the guest OS.</source>
+        <source>A&dvanced</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>No name specified for the virtual machine.</source>
+        <source>D&rag'n'Drop:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The virtual machine operating system hint is set to a 64-bit type. 64-bit guest systems require hardware virtualization, so this will be enabled automatically if you confirm the changes.</source>
+        <source>D&escription</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -2925,6 +3238,10 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>E&nter New Password:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2957,16 +3274,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Leave Unchanged</source>
-        <comment>cipher type</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
+        <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
+        <source>Leave Unchanged</source>
+        <comment>cipher type</comment>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -2981,23 +3294,23 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Show at &Top of Screen</source>
+        <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Allows to modify VM status-bar contents.</source>
+        <source>Show in &Full-screen/Seamless</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
+        <source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Show in &Full-screen/Seamless</source>
+        <source>Show at &Top of Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
+        <source>Allows to modify VM status-bar contents.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -3142,7 +3455,7 @@
     <message>
         <source>Port %1</source>
         <comment>parallel ports</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Θύρα %1</translation>
     </message>
     <message>
         <source>When checked, enables the given parallel port of the virtual machine.</source>
@@ -3236,7 +3549,7 @@
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Όνομα</translation>
     </message>
     <message>
         <source>Path</source>
@@ -3256,7 +3569,7 @@
     </message>
     <message>
         <source>Yes</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ναι</translation>
     </message>
     <message>
         <source>Add Shared Folder</source>
@@ -3335,7 +3648,7 @@
     <message>
         <source>Port %1</source>
         <comment>serial ports</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Θύρα %1</translation>
     </message>
     <message>
         <source>When checked, enables the given serial port of the virtual machine.</source>
@@ -3374,23 +3687,23 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Connect to existing pipe/socket</source>
+        <source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Path/Address:</source>
+        <source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>In <b>Host Pipe</b> mode: Holds the path to the serial port's pipe on the host. Examples: "\\.\pipe\myvbox" or "/tmp/myvbox", for Windows and UNIX-like systems respectively.</p><p>In <b>Host Device</b> mode: Holds the host serial device name. Examples: "COM1" or "/dev/ttyS0".</p><p>In <b>Raw File</b> mode: Holds the file-path on the host system, where the seri [...]
+        <source>&Connect to existing pipe/socket</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
+        <source>&Path/Address:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
+        <source><p>In <b>Host Pipe</b> mode: Holds the path to the serial port's pipe on the host. Examples: "\\.\pipe\myvbox" or "/tmp/myvbox", for Windows and UNIX-like systems respectively.</p><p>In <b>Host Device</b> mode: Holds the host serial device name. Examples: "COM1" or "/dev/ttyS0".</p><p>In <b>Raw File</b> mode: Holds the file-path on the host system, where the seri [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -3611,76 +3924,73 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Add USB Controller</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Hot-pluggable</source>
+        <source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Add Optical Drive</source>
+        <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Add Floppy Drive</source>
+        <source>When checked, allows to use host I/O caching capabilities.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Optical &Drive:</source>
+        <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
+        <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Encrypted with key:</source>
+        <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
+        <source>&Hot-pluggable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
+        <source>Encrypted with key:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, allows to use host I/O caching capabilities.</source>
+        <source>Choose disk image...</source>
+        <comment>This is used for hard disks, optical media and floppies</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
+        <source>Image</source>
+        <comment>storage image</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
+        <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
+        <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Image</source>
-        <comment>storage image</comment>
+        <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
+        <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
+        <source>Add USB Controller</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
+        <source>Add Optical Drive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
+        <source>Add Floppy Drive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -3700,6 +4010,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>Optical &Drive:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Create New Hard Disk...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3719,11 +4037,6 @@
         <source>Choose Virtual Floppy Disk File...</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Choose disk image...</source>
-        <comment>This is used for hard disks, optical media and floppies</comment>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>UIMachineSettingsSystem</name>
@@ -3741,7 +4054,7 @@
     </message>
     <message>
         <source>MB</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">MB</translation>
     </message>
     <message>
         <source>&Boot Order:</source>
@@ -3872,40 +4185,40 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Paravirtualization Interface:</source>
+        <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
+        <source>%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support a chip set of type ICH9 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
+        <source>&Paravirtualization Interface:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB input device you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
+        <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
+        <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support a chip set of type ICH9 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
+        <source>USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB input device you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
+        <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%</source>
+        <source>Hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">%1 MB</translation>
     </message>
     <message>
         <source>%1 CPU</source>
@@ -3919,7 +4232,7 @@
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">%1%</translation>
     </message>
 </context>
 <context>
@@ -3952,69 +4265,69 @@
     <message>
         <source><nobr>Vendor ID: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><nobr>Αναγνωριστικό προμηθευτή: %1</nobr></translation>
     </message>
     <message>
         <source><nobr>Product ID: %2</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><nobr>Αναγνωριστικό προϊόντος: %2</nobr></translation>
     </message>
     <message>
         <source><nobr>Revision: %3</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><nobr>Έκδοση: %3</nobr></translation>
     </message>
     <message>
         <source><nobr>Product: %4</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><nobr>Προϊόν: %4</nobr></translation>
     </message>
     <message>
         <source><nobr>Manufacturer: %5</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><nobr>Κατασκευαστής: %5</nobr></translation>
     </message>
     <message>
         <source><nobr>Serial No.: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><br><nobr>Σειριακό Νο. %1</nobr></translation>
     </message>
     <message>
         <source><nobr>Port: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><nobr>Πόρτα: %1</nobr></translation>
     </message>
     <message>
         <source><nobr>State: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished"><nobr>Κατάσταση: %1</nobr></translation>
     </message>
     <message>
-        <source>USB &1.1 (OHCI) Controller</source>
+        <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>USB &2.0 (EHCI) Controller</source>
+        <source>USB &1.1 (OHCI) Controller</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>USB &3.0 (xHCI) Controller</source>
+        <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>USB 2.0/3.0 is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0/3.0 to be able to start the machine.</source>
+        <source>USB &2.0 (EHCI) Controller</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
+        <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
+        <source>USB &3.0 (xHCI) Controller</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
+        <source>USB 2.0/3.0 is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0/3.0 to be able to start the machine.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -4076,12 +4389,12 @@
     <message>
         <source>Yes</source>
         <comment>remote</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ναι</translation>
     </message>
     <message>
         <source>No</source>
         <comment>remote</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Όχι</translation>
     </message>
     <message>
         <source>&Name:</source>
@@ -4219,11 +4532,11 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Close</source>
+        <source>Switch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Switch</source>
+        <source>Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -4440,7 +4753,7 @@
     <message>
         <source>Discard</source>
         <comment>saved state</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Αναίρεση</translation>
     </message>
     <message>
         <source><p>The host key is currently defined as <b>%1</b>.</p></source>
@@ -4460,7 +4773,7 @@
     <message>
         <source>Reset</source>
         <comment>machine</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Επαναφορά</translation>
     </message>
     <message>
         <source>Continue</source>
@@ -4554,7 +4867,7 @@
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ακύρωση</translation>
     </message>
     <message>
         <source>Failed to open/interpret appliance <b>%1</b>.</source>
@@ -4950,7 +5263,7 @@
     </message>
     <message>
         <source>Ignore</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Αγνόησε</translation>
     </message>
     <message>
         <source>Failed to create NAT network.</source>
@@ -5033,6 +5346,7 @@
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment>
         <translation type="unfinished">
             <numerusform></numerusform>
+            <numerusform></numerusform>
         </translation>
     </message>
     <message>
@@ -5104,20 +5418,20 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
+        <source>Insert</source>
+        <comment>additions</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to detach the webcam <b>%1</b> from the virtual machine <b>%2</b>.</source>
+        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully starte [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully starte [...]
+        <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Insert</source>
-        <comment>additions</comment>
+        <source>Failed to detach the webcam <b>%1</b> from the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -5125,147 +5439,147 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
+        <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
+        <source>Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
+        <source>Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.</source>
+        <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.</source>
+        <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to save the settings.</source>
+        <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
+        <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
+        <source>Failed to save the settings.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Could not insert the <b>VirtualBox Guest Additions</b> disk image file into the virtual machine <b>%1</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Bad password or authentication failure.</source>
+        <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nob [...]
+        <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>A critical error has occurred while running the virtual machine and the machine execution should be stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt>, which you can find in the virtual machine log directory, as well as a description of what you were doing when this  [...]
+        <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source>
+        <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Drag and drop operation from host to guest failed.</source>
+        <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unable to cancel host to guest drag and drop operation.</source>
+        <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Drag and drop operation from guest to host failed.</source>
+        <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
+        <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
+        <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
+        <source>Bad password or authentication failure.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
+        <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nob [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
+        <source><p>A critical error has occurred while running the virtual machine and the machine execution should be stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt>, which you can find in the virtual machine log directory, as well as a description of what you were doing when this  [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
+        <source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
+        <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
+        <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
+        <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
+        <source><p>Could not insert the <b>VirtualBox Guest Additions</b> disk image file into the virtual machine <b>%1</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
+        <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
+        <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
+        <source>Drag and drop operation from host to guest failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <source>Unable to cancel host to guest drag and drop operation.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <source>Drag and drop operation from guest to host failed.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5302,10 +5616,6 @@
 <context>
     <name>UINameAndSystemEditor</name>
     <message>
-        <source>N&ame:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Holds the name of the virtual machine.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5325,6 +5635,10 @@
         <source>Selects the operating system type that you plan to install into this virtual machine (called a guest operating system).</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>N&ame:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkManagerDialog</name>
@@ -5417,6 +5731,10 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Connection refused</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5455,7 +5773,7 @@
     <name>UIPortForwardingTable</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Όνομα</translation>
     </message>
     <message>
         <source>Protocol</source>
@@ -5593,7 +5911,7 @@
     <name>UISettingsDialogGlobal</name>
     <message>
         <source>General</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Γενικά</translation>
     </message>
     <message>
         <source>Input</source>
@@ -5605,15 +5923,15 @@
     </message>
     <message>
         <source>Language</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Γλώσσα</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Δίκτυο</translation>
     </message>
     <message>
         <source>Extensions</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Επεκτάσεις</translation>
     </message>
     <message>
         <source>VirtualBox - %1</source>
@@ -5625,7 +5943,7 @@
     </message>
     <message>
         <source>Display</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Οθόνη</translation>
     </message>
     <message>
         <source>Preferences</source>
@@ -5636,27 +5954,27 @@
     <name>UISettingsDialogMachine</name>
     <message>
         <source>General</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Γενικά</translation>
     </message>
     <message>
         <source>System</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Σύστημα</translation>
     </message>
     <message>
         <source>Display</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Οθόνη</translation>
     </message>
     <message>
         <source>Storage</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Αποθήκευση</translation>
     </message>
     <message>
         <source>Audio</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ήχος</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Δίκτυο</translation>
     </message>
     <message>
         <source>Ports</source>
@@ -5664,19 +5982,19 @@
     </message>
     <message>
         <source>Serial Ports</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Σειριακές Θύρες</translation>
     </message>
     <message>
         <source>Parallel Ports</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Παράλληλες Θύρες</translation>
     </message>
     <message>
         <source>USB</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">USB</translation>
     </message>
     <message>
         <source>Shared Folders</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Κοινοί Φάκελοι</translation>
     </message>
     <message>
         <source>%1 - %2</source>
@@ -5705,15 +6023,15 @@
 <context>
     <name>UIStatusBarEditorWidget</name>
     <message>
-        <source>Close</source>
+        <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Enable Status Bar</source>
+        <source>Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
+        <source>Enable Status Bar</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5853,7 +6171,7 @@
     <name>UIVMDesktop</name>
     <message>
         <source>&Details</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">&Λεπτομέρειες</translation>
     </message>
     <message>
         <source>&Snapshots</source>
@@ -5867,35 +6185,35 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>DMA Transfers</source>
+        <source>Configuration &Details</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>PIO Transfers</source>
+        <source>&Runtime Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Data Read</source>
+        <source>DMA Transfers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Data Written</source>
+        <source>PIO Transfers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Data Transmitted</source>
+        <source>Data Read</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Data Received</source>
+        <source>Data Written</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Runtime Attributes</source>
+        <source>Data Transmitted</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Screen Resolution</source>
+        <source>Data Received</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -5909,52 +6227,52 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Guest Additions</source>
+        <source>Not Available</source>
+        <comment>details report (VRDE server port)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Guest OS Type</source>
+        <source>Runtime Attributes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>No Network Adapters</source>
+        <source>Screen Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage Statistics</source>
+        <source>VM Uptime</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>No Storage Devices</source>
+        <source>Clipboard Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Network Statistics</source>
+        <source>Drag and Drop Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Not Available</source>
-        <comment>details report (VRDE server port)</comment>
+        <source>Guest Additions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Clipboard Mode</source>
-        <translation type="unfinished"></translation>
+        <source>Guest OS Type</source>
+        <translation type="unfinished">Τύπος ΛΣ Επισκέπτη</translation>
     </message>
     <message>
-        <source>Configuration &Details</source>
+        <source>Storage Statistics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&Runtime Information</source>
+        <source>No Storage Devices</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>VM Uptime</source>
+        <source>Network Statistics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Drag and Drop Mode</source>
+        <source>No Network Adapters</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5962,7 +6280,7 @@
     <name>UIVMListView</name>
     <message>
         <source>Inaccessible</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Μη προσβάσιμο</translation>
     </message>
     <message>
         <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source>
@@ -5999,7 +6317,7 @@
     </message>
     <message>
         <source>&Next</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">&Επόμενο</translation>
     </message>
     <message>
         <source>Search for the next occurrence of the string</source>
@@ -6065,7 +6383,7 @@
     <name>UIWizardCloneVD</name>
     <message>
         <source>Copy</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Αντιγραφή</translation>
     </message>
     <message>
         <source>&Dynamically allocated</source>
@@ -6189,7 +6507,7 @@
     </message>
     <message>
         <source>&Reinitialize the MAC address of all network cards</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Επαναρχικοποίησε τις διευθύνσεις MAC όλων των καρτών δικτύου</translation>
     </message>
     <message>
         <source>Clone type</source>
@@ -6276,7 +6594,7 @@
     </message>
     <message>
         <source>Restore Defaults</source>
-        <translation type="unfinished"></translation>
+        <translation>Εφαναφορά Προεπιλεγμένων</translation>
     </message>
     <message>
         <source>Export</source>
@@ -6468,7 +6786,7 @@
     <name>UIWizardImportApp</name>
     <message>
         <source>Restore Defaults</source>
-        <translation type="unfinished"></translation>
+        <translation>Εφαναφορά Προεπιλεγμένων</translation>
     </message>
     <message>
         <source>Import</source>
@@ -6649,61 +6967,77 @@
     <name>VBoxAboutDlg</name>
     <message>
         <source>VirtualBox - About</source>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Πληροφορίες</translation>
     </message>
     <message>
         <source>VirtualBox Graphical User Interface</source>
-        <translation type="unfinished"></translation>
+        <translation>Γραφικό Περιβάλλον VirtualBox</translation>
     </message>
     <message>
         <source>Version %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Έκδοση %1</translation>
     </message>
 </context>
 <context>
     <name>VBoxEmptyFileSelector</name>
     <message>
         <source>Choose...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε...</translation>
     </message>
 </context>
 <context>
     <name>VBoxFilePathSelectorWidget</name>
     <message>
         <source><reset to default></source>
-        <translation type="unfinished"></translation>
+        <translation><επαναφορά στα προεπιλεγμένα></translation>
     </message>
     <message>
         <source><not selected></source>
-        <translation type="unfinished"></translation>
+        <translation><μη επιλεγμένο></translation>
     </message>
     <message>
         <source>Please use the <b>Other...</b> item from the drop-down list to select a path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ χρησιμοποιήστε την επιλογή <b>Άλλο...</b> από τη λίστα για να διαλέξετε διαδρομή.</translation>
     </message>
     <message>
         <source>Other...</source>
-        <translation type="unfinished"></translation>
+        <translation>Άλλο...</translation>
     </message>
     <message>
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά</translation>
+    </message>
+    <message>
+        <source>Opens a window to select a different folder.</source>
+        <translation type="obsolete">Ανοίγει ένα παράθυρο για να διαλέξετε ένα διαφορετικό φάκελο.</translation>
     </message>
     <message>
         <source>Resets the folder path to the default value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφέρει τη διαδρομή φακέλου στην προεπιλεγμένη τιμή.</translation>
+    </message>
+    <message>
+        <source>Opens a window to select a different file.</source>
+        <translation type="obsolete">Ανοίγει ένα παράθυρο για να διαλέξετε ένα διαφορετικό αρχείο.</translation>
     </message>
     <message>
         <source>Resets the file path to the default value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφέρει τη διαδρομή αρχείου στην προεπιλεγμένη τιμή.</translation>
     </message>
     <message>
         <source>&Copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή</translation>
+    </message>
+    <message>
+        <source>Please type the folder path here.</source>
+        <translation type="obsolete">Παρακαλώ γράψτε τη διαδρομή φακέλου εδώ.</translation>
+    </message>
+    <message>
+        <source>Please type the file path here.</source>
+        <translation type="obsolete">Παρακαλώ γράψτε τη διαδρομή αρχείου εδώ.</translation>
     </message>
     <message>
         <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η πραγματική προεπιλεγμένη τιμή της διαδρομής θα εμφανιστεί αφού δεχτείτε τις αλλαγές και ξανανοίξετε αυτό το παράθυρο.</translation>
     </message>
     <message>
         <source>Displays a window to select a different folder.</source>
@@ -6727,167 +7061,167 @@
     <message>
         <source>Unknown device %1:%2</source>
         <comment>USB device details</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άγνωστη συσκευή %1:%2</translation>
     </message>
     <message>
         <source><nobr>Vendor ID: %1</nobr><br><nobr>Product ID: %2</nobr><br><nobr>Revision: %3</nobr></source>
         <comment>USB device tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Αναγνωριστικό προμηθευτή: %1</nobr><br><nobr>Αναγνωριστικό προϊόντος: %2</nobr><br><nobr>Έκδοση: %3</nobr></translation>
     </message>
     <message>
         <source><br><nobr>Serial No. %1</nobr></source>
         <comment>USB device tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><br><nobr>Σειριακό Νο. %1</nobr></translation>
     </message>
     <message>
         <source><br><nobr>State: %1</nobr></source>
         <comment>USB device tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><br><nobr>Κατάσταση: %1</nobr></translation>
     </message>
     <message>
         <source>Name</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>OS Type</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος ΛΣ</translation>
     </message>
     <message>
         <source>Base Memory</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Βασική Μνήμη</translation>
     </message>
     <message>
         <source>General</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γενικά</translation>
     </message>
     <message>
         <source>Video Memory</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μνήμη Βίντεο</translation>
     </message>
     <message>
         <source>Boot Order</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σειρά εκκίνησης</translation>
     </message>
     <message>
         <source>ACPI</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>ACPI</translation>
     </message>
     <message>
         <source>I/O APIC</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>I/O APIC</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (ACPI)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένο</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (ACPI)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (I/O APIC)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένο</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (I/O APIC)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Audio</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ήχος</translation>
     </message>
     <message>
         <source>Adapter %1</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κάρτα δικτύου %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Network</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο</translation>
     </message>
     <message>
         <source>Device Filters</source>
         <comment>details report (USB)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Φίλτρα Συσκευών</translation>
     </message>
     <message>
         <source>%1 (%2 active)</source>
         <comment>details report (USB)</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 (%2 ενεργό)</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (USB)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Powered Off</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σβηστή</translation>
     </message>
     <message>
         <source>Saved</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αποθηκευμένη</translation>
     </message>
     <message>
         <source>Aborted</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εγκαταλειμένη</translation>
     </message>
     <message>
         <source>Running</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχει</translation>
     </message>
     <message>
         <source>Paused</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σε παύση</translation>
     </message>
     <message>
         <source>Starting</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ξεκινάει</translation>
     </message>
     <message>
         <source>Stopping</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σταματάει</translation>
     </message>
     <message>
         <source>Saving</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σώζεται</translation>
     </message>
     <message>
         <source>Restoring</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφέρει</translation>
     </message>
     <message>
         <source>Spawning</source>
@@ -6897,157 +7231,162 @@
     <message>
         <source>None</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία</translation>
     </message>
     <message>
         <source>Floppy</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δισκέτα</translation>
+    </message>
+    <message>
+        <source>CD/DVD</source>
+        <comment>DeviceType</comment>
+        <translation type="obsolete">CD/DVD</translation>
     </message>
     <message>
         <source>Hard Disk</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σκληρός Δίσκος</translation>
     </message>
     <message>
         <source>Network</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο</translation>
     </message>
     <message>
         <source>Null Audio Driver</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κανένας οδηγός ήχου</translation>
     </message>
     <message>
         <source>Windows Multimedia</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πολυμέσα Windows</translation>
     </message>
     <message>
         <source>OSS Audio Driver</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός ήχου OSS</translation>
     </message>
     <message>
         <source>ALSA Audio Driver</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός ήχου ALSA</translation>
     </message>
     <message>
         <source>Windows DirectSound</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Windows DirectSound</translation>
     </message>
     <message>
         <source>CoreAudio</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>CoreAudio</translation>
     </message>
     <message>
         <source>Not attached</source>
         <comment>NetworkAttachmentType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη συνδεδεμένο</translation>
     </message>
     <message>
         <source>NAT</source>
         <comment>NetworkAttachmentType</comment>
-        <translation type="unfinished"></translation>
+        <translation>NAT</translation>
     </message>
     <message>
         <source>Internal Network</source>
         <comment>NetworkAttachmentType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εσωτερικό δίκτυο</translation>
     </message>
     <message>
         <source>Not supported</source>
         <comment>USBDeviceState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη υποστηριζόμενη</translation>
     </message>
     <message>
         <source>Unavailable</source>
         <comment>USBDeviceState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη διαθέσιμη</translation>
     </message>
     <message>
         <source>Busy</source>
         <comment>USBDeviceState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απασχολημένη</translation>
     </message>
     <message>
         <source>Available</source>
         <comment>USBDeviceState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Διαθέσιμη</translation>
     </message>
     <message>
         <source>Held</source>
         <comment>USBDeviceState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κρατημένη</translation>
     </message>
     <message>
         <source>Captured</source>
         <comment>USBDeviceState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πιασμένη</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>ClipboardType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Host To Guest</source>
         <comment>ClipboardType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οικοδεσπότης Προς Επισκέπτη</translation>
     </message>
     <message>
         <source>Guest To Host</source>
         <comment>ClipboardType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επισκέπτης Προς Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Bidirectional</source>
         <comment>ClipboardType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αμφίδρομο</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details report (serial ports)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (serial ports)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Serial Ports</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σειριακές Θύρες</translation>
     </message>
     <message>
         <source>USB</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>USB</translation>
     </message>
     <message>
         <source>Shared Folders</source>
         <comment>details report (shared folders)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κοινοί Φάκελοι</translation>
     </message>
     <message>
         <source>None</source>
         <comment>details report (shared folders)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κανένας</translation>
     </message>
     <message>
         <source>Shared Folders</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κοινοί Φάκελοι</translation>
     </message>
     <message>
         <source>Disconnected</source>
         <comment>PortMode</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αποσυνδεδεμένο</translation>
     </message>
     <message>
         <source>Host Pipe</source>
@@ -7057,202 +7396,202 @@
     <message>
         <source>Host Device</source>
         <comment>PortMode</comment>
-        <translation type="unfinished"></translation>
+        <translation>Συσκευή Οικοδεσπότη</translation>
     </message>
     <message>
         <source>User-defined</source>
         <comment>serial port</comment>
-        <translation type="unfinished"></translation>
+        <translation>Καθορισμένο από τον χρήστη</translation>
     </message>
     <message>
         <source>VT-x/AMD-V</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>VT-x/AMD-V</translation>
     </message>
     <message>
         <source>PAE/NX</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>PAE/NX</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένο</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (PAE/NX)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένο</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (PAE/NX)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Host Driver</source>
         <comment>details report (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Controller</source>
         <comment>details report (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details report (parallel ports)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (parallel ports)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Parallel Ports</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Παράλληλες Θύρες</translation>
     </message>
     <message>
         <source>USB</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>USB</translation>
     </message>
     <message>
         <source>Shared Folder</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κοινός Φάκελος</translation>
     </message>
     <message>
         <source>IDE</source>
         <comment>StorageBus</comment>
-        <translation type="unfinished"></translation>
+        <translation>IDE</translation>
     </message>
     <message>
         <source>SATA</source>
         <comment>StorageBus</comment>
-        <translation type="unfinished"></translation>
+        <translation>IDE</translation>
     </message>
     <message>
         <source>Solaris Audio</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ήχος Solaris</translation>
     </message>
     <message>
         <source>PulseAudio</source>
         <comment>AudioDriverType</comment>
-        <translation type="unfinished"></translation>
+        <translation>PulseAudio</translation>
     </message>
     <message>
         <source>ICH AC97</source>
         <comment>AudioControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>ICH AC97</translation>
     </message>
     <message>
         <source>SoundBlaster 16</source>
         <comment>AudioControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>SoundBlaster 16</translation>
     </message>
     <message>
         <source>PCnet-PCI II (Am79C970A)</source>
         <comment>NetworkAdapterType</comment>
-        <translation type="unfinished"></translation>
+        <translation>PCnet-PCI II (Am79C970A)</translation>
     </message>
     <message>
         <source>PCnet-FAST III (Am79C973)</source>
         <comment>NetworkAdapterType</comment>
-        <translation type="unfinished"></translation>
+        <translation>PCnet-FAST III (Am79C973)</translation>
     </message>
     <message>
         <source>Intel PRO/1000 MT Desktop (82540EM)</source>
         <comment>NetworkAdapterType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Intel PRO/1000 MT Desktop (82540EM)</translation>
     </message>
     <message>
         <source>Intel PRO/1000 T Server (82543GC)</source>
         <comment>NetworkAdapterType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Intel PRO/1000 T Server (82543GC)</translation>
     </message>
     <message>
         <source><nobr>Vendor ID: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Αναγνωριστικό προμηθευτή: %1</nobr></translation>
     </message>
     <message>
         <source><nobr>Product ID: %2</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Αναγνωριστικό προϊόντος: %2</nobr></translation>
     </message>
     <message>
         <source><nobr>Revision: %3</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Έκδοση: %3</nobr></translation>
     </message>
     <message>
         <source><nobr>Product: %4</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Προϊόν: %4</nobr></translation>
     </message>
     <message>
         <source><nobr>Manufacturer: %5</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Κατασκευαστής: %5</nobr></translation>
     </message>
     <message>
         <source><nobr>Serial No.: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><br><nobr>Σειριακό Νο. %1</nobr></translation>
     </message>
     <message>
         <source><nobr>Port: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Πόρτα: %1</nobr></translation>
     </message>
     <message>
         <source><nobr>State: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Κατάσταση: %1</nobr></translation>
     </message>
     <message>
         <source>Checking...</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ελέγχω...</translation>
     </message>
     <message>
         <source>Inaccessible</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη προσβάσιμο</translation>
     </message>
     <message>
         <source>3D Acceleration</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιτάχυνση 3Δ</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (3D Acceleration)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένη</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (3D Acceleration)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Setting Up</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίζεται</translation>
     </message>
     <message>
         <source>Differencing</source>
         <comment>DiskType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Διαφορικός</translation>
     </message>
     <message>
         <source>Nested Paging</source>
@@ -7262,52 +7601,52 @@
     <message>
         <source>Enabled</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένο</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Internal network, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εσωτερικό δίκτυο, '%1'</translation>
     </message>
     <message>
         <source>SCSI</source>
         <comment>StorageBus</comment>
-        <translation type="unfinished"></translation>
+        <translation>SCSI</translation>
     </message>
     <message>
         <source>PIIX3</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>PIIX3</translation>
     </message>
     <message>
         <source>PIIX4</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>PIIX4</translation>
     </message>
     <message>
         <source>ICH6</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>ICH6</translation>
     </message>
     <message>
         <source>AHCI</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>AHCI</translation>
     </message>
     <message>
         <source>Lsilogic</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Lsilogic</translation>
     </message>
     <message>
         <source>BusLogic</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>BusLogic</translation>
     </message>
     <message>
         <source>Bridged adapter, %1</source>
@@ -7317,12 +7656,12 @@
     <message>
         <source>Host-only adapter, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μόνο-με-οικοδεσπότη δίκτυο, '%1'</translation>
     </message>
     <message>
         <source>Intel PRO/1000 MT Server (82545EM)</source>
         <comment>NetworkAdapterType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Intel PRO/1000 MT Server (82545EM)</translation>
     </message>
     <message>
         <source>Bridged Adapter</source>
@@ -7332,62 +7671,62 @@
     <message>
         <source>Host-only Adapter</source>
         <comment>NetworkAttachmentType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μόνο-με-οικοδεσπότη δίκτυο</translation>
     </message>
     <message>
         <source><nobr>%1 MB</nobr></source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>%1 MB</nobr></translation>
     </message>
     <message>
         <source>Processor(s)</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργαστής(ές)</translation>
     </message>
     <message>
         <source><nobr>%1</nobr></source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>%1</nobr></translation>
     </message>
     <message>
         <source>System</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σύστημα</translation>
     </message>
     <message>
         <source>Display</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οθόνη</translation>
     </message>
     <message>
         <source>Raw File</source>
         <comment>PortMode</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πηγαίο αρχείο</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (2D Video Acceleration)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένη</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (2D Video Acceleration)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>2D Video Acceleration</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιτάχυνση 2Δ</translation>
     </message>
     <message>
         <source>Not Attached</source>
         <comment>details report (Storage)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη συνδεδεμένο</translation>
     </message>
     <message>
         <source>Storage</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αποθήκευση</translation>
     </message>
     <message>
         <source>Teleported</source>
@@ -7397,7 +7736,7 @@
     <message>
         <source>Guru Meditation</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Συλλογή σοφού</translation>
     </message>
     <message>
         <source>Teleporting</source>
@@ -7407,7 +7746,7 @@
     <message>
         <source>Taking Live Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Λαμβάνεται Ζωντανό Στιγμιότυπο</translation>
     </message>
     <message>
         <source>Teleporting Paused VM</source>
@@ -7417,17 +7756,17 @@
     <message>
         <source>Restoring Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφέρεται Στιγμιότυπο</translation>
     </message>
     <message>
         <source>Deleting Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σβήνεται Στιγμιότυπο</translation>
     </message>
     <message>
         <source>Floppy</source>
         <comment>StorageBus</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δισκέτα</translation>
     </message>
     <message>
         <source>Paravirtualized Network (virtio-net)</source>
@@ -7437,142 +7776,162 @@
     <message>
         <source>I82078</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>I82078</translation>
     </message>
     <message>
         <source>Empty</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άδειο</translation>
     </message>
     <message>
         <source>Host Drive '%1'</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός Οικοδεσπότη '%1'</translation>
     </message>
     <message>
         <source>Host Drive %1 (%2)</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός Οικοδεσπότη %1 (%2)</translation>
     </message>
     <message>
         <source><p style=white-space:pre>Type (Format):  %1 (%2)</p></source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style=white-space:pre>Τύπος (Διαμόρφωση):  %1 (%2)</p></translation>
     </message>
     <message>
         <source><p>Attached to:  %1</p></source>
         <comment>image</comment>
-        <translation type="unfinished"></translation>
+        <translation><p>Συνδεδεμένο σε:  %1</p></translation>
     </message>
     <message>
         <source><i>Not Attached</i></source>
         <comment>image</comment>
-        <translation type="unfinished"></translation>
+        <translation><i>Μη συνδεδεμένο</i></translation>
     </message>
     <message>
         <source><i>Checking accessibility...</i></source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation><i>Έλεγχος προσβασιμότητας...</i></translation>
     </message>
     <message>
         <source>Failed to check accessibility of disk image files.</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αδύνατος ο έλεγχος προσβασιμότητας των αρχείων εικόνας δίσκου.</translation>
     </message>
     <message>
         <source><b>No disk image file selected</b></source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation><b>Μη επιλεγμένο αρχείο εικόνας δίσκου</b></translation>
     </message>
     <message>
         <source>You can also change this while the machine is running.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μπορείτε να το αλλάξετε ενώ η μηχανή τρέχει.</translation>
     </message>
     <message>
         <source><b>No disk image files available</b></source>
         <comment>medium</comment>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
+        <comment>medium</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
+        <comment>medium</comment>
+        <translation type="unfinished"></translation>
+    </message>
     <message numerus="yes">
         <source>%n year(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n χρόνο</numerusform>
+            <numerusform>%n χρόνια</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%n month(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n μήνα</numerusform>
+            <numerusform>%n μήνες</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%n day(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n μέρα</numerusform>
+            <numerusform>%n μέρες</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%n hour(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n ώρα</numerusform>
+            <numerusform>%n ώρες</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%n minute(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n λεπτό</numerusform>
+            <numerusform>%n λεπτά</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%n second(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%n δευτερόλεπτο</numerusform>
+            <numerusform>%n δευτερόλεπτα</numerusform>
         </translation>
     </message>
     <message>
+        <source>(CD/DVD)</source>
+        <translation type="obsolete">(CD/DVD)</translation>
+    </message>
+    <message>
         <source>Screens</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οθόνες</translation>
     </message>
     <message>
         <source>SAS</source>
         <comment>StorageBus</comment>
-        <translation type="unfinished"></translation>
+        <translation>SAS</translation>
     </message>
     <message>
         <source>LsiLogic SAS</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>LsiLogic SAS</translation>
     </message>
     <message>
         <source>B</source>
         <comment>size suffix Bytes</comment>
-        <translation type="unfinished"></translation>
+        <translation>B</translation>
     </message>
     <message>
         <source>KB</source>
         <comment>size suffix KBytes=1024 Bytes</comment>
-        <translation type="unfinished"></translation>
+        <translation>KB</translation>
     </message>
     <message>
         <source>MB</source>
         <comment>size suffix MBytes=1024 KBytes</comment>
-        <translation type="unfinished"></translation>
+        <translation>MB</translation>
     </message>
     <message>
         <source>GB</source>
         <comment>size suffix GBytes=1024 MBytes</comment>
-        <translation type="unfinished"></translation>
+        <translation>GB</translation>
     </message>
     <message>
         <source>TB</source>
         <comment>size suffix TBytes=1024 GBytes</comment>
-        <translation type="unfinished"></translation>
+        <translation>TB</translation>
     </message>
     <message>
         <source>PB</source>
         <comment>size suffix PBytes=1024 TBytes</comment>
-        <translation type="unfinished"></translation>
+        <translation>PB</translation>
     </message>
     <message>
         <source>Nested Paging</source>
@@ -7581,7 +7940,7 @@
     <message>
         <source>Unknown device</source>
         <comment>USB device details</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άγνωστη συσκευή</translation>
     </message>
     <message>
         <source>Remote Desktop Server Port</source>
@@ -7596,11 +7955,11 @@
     <message>
         <source>Disabled</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>All files (*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Όλα τα αρχεία (*)</translation>
     </message>
     <message>
         <source>Fault Tolerant Syncing</source>
@@ -7610,101 +7969,101 @@
     <message>
         <source>Unlocked</source>
         <comment>SessionState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ξεκλειδωμένο</translation>
     </message>
     <message>
         <source>Locked</source>
         <comment>SessionState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κλειδωμένο</translation>
     </message>
     <message>
         <source>Unlocking</source>
         <comment>SessionState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ξεκλειδώνει</translation>
     </message>
     <message>
         <source>Null</source>
         <comment>AuthType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία</translation>
     </message>
     <message>
         <source>External</source>
         <comment>AuthType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εξωτερική</translation>
     </message>
     <message>
         <source>Guest</source>
         <comment>AuthType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επισκέπτης</translation>
     </message>
     <message>
         <source>Intel HD Audio</source>
         <comment>AudioControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ήχος Intel HD</translation>
     </message>
     <message>
         <source>PIIX3</source>
         <comment>ChipsetType</comment>
-        <translation type="unfinished"></translation>
+        <translation>PIIX3</translation>
     </message>
     <message>
         <source>ICH9</source>
         <comment>ChipsetType</comment>
-        <translation type="unfinished"></translation>
+        <translation>ICH9</translation>
     </message>
     <message>
         <source>Execution Cap</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Όριο εκτέλεσης</translation>
     </message>
     <message>
         <source><nobr>%1%</nobr></source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>%1</nobr></translation>
     </message>
     <message>
         <source>Generic, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γενικό, '%1'</translation>
     </message>
     <message>
         <source>Generic Driver</source>
         <comment>NetworkAttachmentType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γενικός Οδηγός</translation>
     </message>
     <message>
         <source>Adapter %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάρτα δικτύου %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>DragAndDropType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
         <source>Host To Guest</source>
         <comment>DragAndDropType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οικοδεσπότης Προς Επισκέπτη</translation>
     </message>
     <message>
         <source>Guest To Host</source>
         <comment>DragAndDropType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επισκέπτης Προς Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Bidirectional</source>
         <comment>DragAndDropType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αμφίδρομο</translation>
     </message>
     <message>
         <source>Normal</source>
         <comment>MediumType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κανονικό</translation>
     </message>
     <message>
         <source>Immutable</source>
         <comment>MediumType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αμετάβλητος</translation>
     </message>
     <message>
         <source>Writethrough</source>
@@ -7714,102 +8073,102 @@
     <message>
         <source>Shareable</source>
         <comment>MediumType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Διαμοιρασμένος</translation>
     </message>
     <message>
         <source>Readonly</source>
         <comment>MediumType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μόνο ανάγνωση</translation>
     </message>
     <message>
         <source>Multi-attach</source>
         <comment>MediumType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πολυ-συνδεδεμένο</translation>
     </message>
     <message>
         <source>Dynamically allocated storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμικά παρεχόμενη αποθήκευση</translation>
     </message>
     <message>
         <source>Dynamically allocated differencing storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμικά παρεχόμενη διαφορική αποθήκευση</translation>
     </message>
     <message>
         <source>Fixed size storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πάγια αποθήκευση</translation>
     </message>
     <message>
         <source>Dynamically allocated storage split into files of less than 2GB</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμικά παρεχόμενη αποθήκευση χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
     </message>
     <message>
         <source>Dynamically allocated differencing storage split into files of less than 2GB</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμικά παρεχόμενη διαφορική αποθήκευση χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
     </message>
     <message>
         <source>Fixed size storage split into files of less than 2GB</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πάγια αποθήκευση χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
     </message>
     <message>
         <source>Dynamically allocated compressed storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμικά παρεχόμενη συμπιεσμένη αποθήκευση</translation>
     </message>
     <message>
         <source>Dynamically allocated differencing compressed storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμικά παρεχόμενη διαφορική συμπιεσμένη αποθήκευση</translation>
     </message>
     <message>
         <source>Fixed size ESX storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πάγια αποθήκευση ESX</translation>
     </message>
     <message>
         <source>Fixed size storage on raw disk</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πάγια αποθήκευση σε πηγαίο δίσκο</translation>
     </message>
     <message>
         <source>Deny</source>
         <comment>NetworkAdapterPromiscModePolicy</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άρνηση</translation>
     </message>
     <message>
         <source>Allow VMs</source>
         <comment>NetworkAdapterPromiscModePolicy</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιτρέπονται οι ΕΜς</translation>
     </message>
     <message>
         <source>Allow All</source>
         <comment>NetworkAdapterPromiscModePolicy</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιτρέπονται όλα</translation>
     </message>
     <message>
         <source>Ignore</source>
         <comment>USBDeviceFilterAction</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αγνόησε</translation>
     </message>
     <message>
         <source>Hold</source>
         <comment>USBDeviceFilterAction</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κράτα</translation>
     </message>
     <message>
         <source>UDP</source>
         <comment>NATProtocol</comment>
-        <translation type="unfinished"></translation>
+        <translation>UDP</translation>
     </message>
     <message>
         <source>TCP</source>
         <comment>NATProtocol</comment>
-        <translation type="unfinished"></translation>
+        <translation>TCP</translation>
     </message>
     <message>
         <source>IDE Primary Master</source>
@@ -7834,180 +8193,192 @@
     <message>
         <source>SATA Port %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα SATA %1</translation>
     </message>
     <message>
         <source>SCSI Port %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα SCSI %1</translation>
     </message>
     <message>
         <source>SAS Port %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα SAS %1</translation>
     </message>
     <message>
         <source>Floppy Device %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>Συσκευή δισκέτας %1</translation>
     </message>
     <message>
         <source>General</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γενικά</translation>
     </message>
     <message>
         <source>Preview</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Προεπισκόπηση</translation>
     </message>
     <message>
         <source>System</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σύστημα</translation>
     </message>
     <message>
         <source>Display</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οθόνη</translation>
     </message>
     <message>
         <source>Storage</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αποθήκευση</translation>
     </message>
     <message>
         <source>Audio</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ήχος</translation>
     </message>
     <message>
         <source>Network</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο</translation>
     </message>
     <message>
         <source>Serial ports</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Σειριακές Θύρες</translation>
     </message>
     <message>
         <source>Parallel ports</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Παράλληλες Θύρες</translation>
     </message>
     <message>
         <source>USB</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>USB</translation>
     </message>
     <message>
         <source>Shared folders</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κοινοί φάκελοι</translation>
     </message>
     <message>
         <source>Description</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Περιγραφή</translation>
+    </message>
+    <message>
+        <source>Please choose a virtual hard drive file</source>
+        <translation type="obsolete">Παρακαλώ επιλέξτε έναν εικονικό σκληρό δίσκο</translation>
+    </message>
+    <message>
+        <source>All virtual hard drive files (%1)</source>
+        <translation type="obsolete">Όλοι οι εικονικοί σκληροί δίσκοι (%1)</translation>
     </message>
     <message>
         <source>Please choose a virtual optical disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ επιλέξτε έναν εικονικό οπτικό δίσκο</translation>
     </message>
     <message>
         <source>All virtual optical disk files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Όλοι οι εικονικοί οπτικοί δίσκοι (%1)</translation>
     </message>
     <message>
         <source>Please choose a virtual floppy disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ επιλέξτε μία εικονική δισκέτα</translation>
     </message>
     <message>
         <source>All virtual floppy disk files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Όλες οι εικονικές δισκέτες (%1)</translation>
     </message>
     <message>
         <source>VDI (VirtualBox Disk Image)</source>
-        <translation type="unfinished"></translation>
+        <translation>VDI (Εικόνα Δίσκου VirtualBox)</translation>
     </message>
     <message>
         <source>VMDK (Virtual Machine Disk)</source>
-        <translation type="unfinished"></translation>
+        <translation>VMDK (Εικονικός Δίσκος Μηχανής)</translation>
     </message>
     <message>
         <source>VHD (Virtual Hard Disk)</source>
-        <translation type="unfinished"></translation>
+        <translation>VHD (Εικονικός Σκληρός Δίσκος)</translation>
     </message>
     <message>
         <source>HDD (Parallels Hard Disk)</source>
-        <translation type="unfinished"></translation>
+        <translation>HDD (Σκληρός Δίσκος Parallels)</translation>
     </message>
     <message>
         <source>QED (QEMU enhanced disk)</source>
-        <translation type="unfinished"></translation>
+        <translation>QED (QEMU ενισχυμένος δίσκος)</translation>
     </message>
     <message>
         <source>QCOW (QEMU Copy-On-Write)</source>
-        <translation type="unfinished"></translation>
+        <translation>QCOW (QEMU Αντίγραφο-Στην-Εγγραφή)</translation>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual hard drive file</source>
+        <translation type="obsolete">Παρακαλώ επιλέξτε μία τοποθεσία για τον νέο εικονικό αρχείο του σκληρού δίσκου</translation>
+    </message>
+    <message>
+        <source>Enabled</source>
+        <comment>details report (Unrestricted Execution)</comment>
+        <translation type="obsolete">Ενεργοποιημένη</translation>
+    </message>
+    <message>
+        <source>Disabled</source>
+        <comment>details report (Unrestricted Execution)</comment>
+        <translation type="obsolete">Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Unrestricted Execution</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη-περιορισμένη εκτέλεση</translation>
     </message>
     <message>
         <source>PS/2 Mouse</source>
         <comment>PointingHIDType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ποντίκι PS/2</translation>
     </message>
     <message>
         <source>USB Mouse</source>
         <comment>PointingHIDType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ποντίκι USB</translation>
     </message>
     <message>
         <source>PS/2 and USB Mouse</source>
         <comment>PointingHIDType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ποντίκι PS/2 και USB</translation>
     </message>
     <message>
         <source>Unrestricted Execution</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη-περιορισμένη εκτέλεση</translation>
     </message>
     <message>
         <source>USB Tablet</source>
         <comment>PointingHIDType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ταμπλέτα USB</translation>
     </message>
     <message>
         <source>USB Multi-Touch Tablet</source>
         <comment>PointingHIDType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ταμπλέτα πολλαπλής αφής USB</translation>
     </message>
     <message>
         <source>NAT Network</source>
         <comment>NetworkAttachmentType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο NAT</translation>
     </message>
     <message>
         <source>NAT network, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο NAT, %1</translation>
     </message>
     <message>
         <source>You can create or add disk image files in the virtual machine settings.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>USB</source>
-        <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>USB Port %1</source>
-        <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μπορείτε να δημιουρήσετε ή να προσθέσετε αρχεία εικόνας δίσκου στις ρυθμίσεις της εικονικής μηχανής.</translation>
     </message>
     <message>
         <source>off</source>
@@ -8015,78 +8386,73 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Paravirtualization Interface</source>
-        <comment>details report</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>None</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <source>Active</source>
+        <comment>details report (VT-x/AMD-V)</comment>
+        <translation type="unfinished">Ενεργό</translation>
     </message>
     <message>
-        <source>Default</source>
-        <comment>ParavirtProvider</comment>
+        <source>Inactive</source>
+        <comment>details report (VT-x/AMD-V)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Legacy</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <source>Active</source>
+        <comment>details report (Nested Paging)</comment>
+        <translation type="unfinished">Ενεργό</translation>
     </message>
     <message>
-        <source>Minimal</source>
-        <comment>ParavirtProvider</comment>
+        <source>Inactive</source>
+        <comment>details report (Nested Paging)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hyper-V</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <source>Active</source>
+        <comment>details report (Unrestricted Execution)</comment>
+        <translation type="unfinished">Ενεργό</translation>
     </message>
     <message>
-        <source>New dynamically allocated storage</source>
-        <comment>MediumVariant</comment>
+        <source>Inactive</source>
+        <comment>details report (Unrestricted Execution)</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Active</source>
-        <comment>details report (VT-x/AMD-V)</comment>
+        <source>Paravirtualization Interface</source>
+        <comment>details report</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Inactive</source>
-        <comment>details report (VT-x/AMD-V)</comment>
+        <source>Taking Snapshot</source>
+        <comment>MachineState</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Active</source>
-        <comment>details report (Nested Paging)</comment>
+        <source>Taking Online Snapshot</source>
+        <comment>MachineState</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Inactive</source>
-        <comment>details report (Nested Paging)</comment>
+        <source>None</source>
+        <comment>ParavirtProvider</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Active</source>
-        <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished"></translation>
+        <source>Default</source>
+        <comment>ParavirtProvider</comment>
+        <translation type="unfinished">Προεπιλεγμένη</translation>
     </message>
     <message>
-        <source>Inactive</source>
-        <comment>details report (Unrestricted Execution)</comment>
+        <source>Legacy</source>
+        <comment>ParavirtProvider</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Taking Snapshot</source>
-        <comment>MachineState</comment>
+        <source>Minimal</source>
+        <comment>ParavirtProvider</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Taking Online Snapshot</source>
-        <comment>MachineState</comment>
+        <source>Hyper-V</source>
+        <comment>ParavirtProvider</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -8100,9 +8466,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>New dynamically allocated storage</source>
+        <comment>MediumVariant</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>TCP</source>
         <comment>PortMode</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">TCP</translation>
     </message>
     <message>
         <source>OHCI</source>
@@ -8120,17 +8491,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>User interface</source>
-        <comment>DetailsElementType</comment>
+        <source>USB</source>
+        <comment>StorageControllerType</comment>
+        <translation type="unfinished">USB</translation>
+    </message>
+    <message>
+        <source>USB Port %1</source>
+        <comment>StorageSlot</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>(Optical Drive)</source>
+        <source>User interface</source>
+        <comment>DetailsElementType</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Encrypted</source>
-        <comment>medium</comment>
+        <source>(Optical Drive)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -8142,7 +8518,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
+        <source>Encrypted</source>
         <comment>medium</comment>
         <translation type="unfinished"></translation>
     </message>
@@ -8152,11 +8528,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
-        <comment>medium</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Please choose a location for new virtual hard disk file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8240,7 +8611,7 @@
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Όνομα</translation>
     </message>
     <message>
         <source>Virtual Size</source>
@@ -8291,15 +8662,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>UUID:</source>
+        <source><i>Not&nbsp;Encrypted</i></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><i>Not&nbsp;Encrypted</i></source>
+        <source>Encrypted with key:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Encrypted with key:</source>
+        <source>UUID:</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8470,6 +8841,7 @@
         <source>Warning: You are taking a snapshot of a running machine which has %n immutable image(s) attached to it. As long as you are working from this snapshot the immutable image(s) will not be reset to avoid loss of data.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
+            <numerusform></numerusform>
         </translation>
     </message>
     <message>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
index 340e8c8..b6ee50a 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
@@ -96,12 +96,12 @@
 <context>
     <name>QApplication</name>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">El controlador del kernel no pudo asignar suficiente memoria o alguna operación de mapeo falló.<br/><br/>Existen problemas con el kernel Linux 2.6.29. Si usa dicha versión de kernel, edite /usr/src/vboxdrv-*/Makefile y habilite <i>VBOX_USE_INSERT_PAGE = 1</i>. Después, recompile el módulo del kernel ejecutando<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> como usua [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">El controlador del kernel no pudo asignar suficiente memoria o alguna operación de mapeo falló.<br/><br/>Existen problemas con el kernel Linux 2.6.29. Si usa dicha versión de kernel, edite /usr/src/vboxdrv-*/Makefile y habilite <i>VBOX_USE_INSERT_PAGE = 1</i>. Después, recompile el módulo del kernel ejecutando<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> como [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">El controlador de VirtualBox del kernel Linux (vboxdrv) no se encuentra cargado o existe un problema de permisos con /dev/vboxdrv. Reconfigure el módulo del kernel ejecuntando <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> como usuario root. Los usuarios de Ubuntu, Fedora o Mandriva deberían instalar el paquete DKMS primero. Este paquete monitoriza los cambios en el kernel y recompila el  [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">El controlador de VirtualBox del kernel Linux (vboxdrv) no se encuentra cargado o existe un problema de permisos con /dev/vboxdrv. Reconfigure el módulo del kernel ejecuntando <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> como usuario root. Los usuarios de Ubuntu, Fedora o Mandriva deberían instalar el paquete DKMS primero. Este paquete monitoriza los cambios en el kernel y recompil [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -148,16 +148,16 @@
         <translation>Los módulos del kernel de VirtualBox no son compatibles con esta versión de VirtualBox. La instalación de VirtualBox aparentemente no fue correcta. Desinstalar completamente y reinstalar de nuevo VirtualBox podría solucionar el problema.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Los módulos del kernel de VirtualBox no son compatibles con esta versión de VirtualBox. La instalación de VirtualBox aparentemente no fue correcta. Ejecutar <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> podría solucionar el problema. Asegúrese de no mezclar la versión OSE y la versión PUEL de VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Los módulos del kernel de VirtualBox no son compatibles con esta versión de VirtualBox. La instalación de VirtualBox aparentemente no fue correcta. Ejecutar <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> podría solucionar el problema. Asegúrese de no mezclar la versión OSE y la versión PUEL de VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Este error significa que el controlador del kernel no fue capaz de reservar suficiente memoria o que alguna operación de asignación falló.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>El controlador del núcleo de Linux (vboxdrv) no está cargado o hay un problema de permisos con /dev/vboxdrv. Reinstale el módulo del núcleo ejecutando<br/><br/>  <font color=blue>«/sbin/vboxconfig»</font><br/><br/> como root. Si está disponible en su distribución, debería instalar primero el paquete DKMS. Este paquete monitoriza los cambios del núcleo de Linux y recompila el módulo del núcleo si es necesario.    </translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>El controlador del núcleo de Linux (vboxdrv) no está cargado o hay un problema de permisos con /dev/vboxdrv. Reinstale el módulo del núcleo ejecutando<br/><br/>  <font color=blue>«/sbin/rcvboxdrv setup»</font><br/><br/> como root. Si está disponible en su distribución, debería instalar primero el paquete DKMS. Este paquete monitoriza los cambios del núcleo de Linux y recompila el módulo del núcleo si es necesario.    </translation>
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -10595,6 +10595,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
index e3526eb..3b9b29d 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
@@ -4,7 +4,7 @@
 <context>
     <name>@@@</name>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+2125"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+2132"/>
         <source>English</source>
         <comment>Native language name</comment>
         <translation>Euskara</translation>
@@ -93,8 +93,8 @@
     </message>
     <message>
         <location line="+7"/>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>VirtualBox kernel moduloak ez datoz bat VirtualBox bertsio honekin. VirtualBox-en ezarpena dirudienez ez da ongi egin. <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> exekutatzeak hau zuzendu dezake. Zihurtatu ez dituzula VirtualBox-en OSE bertsioa eta PUEL bertsioa nahastu.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>VirtualBox kernel moduloak ez datoz bat VirtualBox bertsio honekin. VirtualBox-en ezarpena dirudienez ez da ongi egin. <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> exekutatzeak hau zuzendu dezake. Zihurtatu ez dituzula VirtualBox-en OSE bertsioa eta PUEL bertsioa nahastu.</translation>
     </message>
     <message>
         <location line="-22"/>
@@ -103,8 +103,8 @@
     </message>
     <message>
         <location line="+5"/>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>VirtualBox Linux kernel gidatzailea (vboxdrv) ez dago gertatuta edo baimen arazo bat dago /dev/vboxdrv-rekin. Mesedez ber-ezarri kernel moduloa <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>exekutatuz erro bezala. Zure banaketan eskuragarri badago, lehenik DKMS paketea ezarri behar duzu. Pakete honek Linux kernelaren aldaketak aztarnatzen ditu eta vboxdrv kernel moduloa berbiltzen du beharrezkoa bada.</t [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>VirtualBox Linux kernel gidatzailea (vboxdrv) ez dago gertatuta edo baimen arazo bat dago /dev/vboxdrv-rekin. Mesedez ber-ezarri kernel moduloa <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>exekutatuz erro bezala. Zure banaketan eskuragarri badago, lehenik DKMS paketea ezarri behar duzu. Pakete honek Linux kernelaren aldaketak aztarnatzen ditu eta vboxdrv kernel moduloa berbiltzen du beharrezkoa bad [...]
     </message>
 </context>
 <context>
@@ -3718,32 +3718,32 @@
     <message>
         <location filename="../src/settings/global/UIGlobalSettingsProxy.ui" line="+24"/>
         <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hautatutakoan, VirtualBox-ek hostalari proxy ezarpenak berez-atzematen saiatuko da Gonbidatu Gehigarriak saretik jeisteko edo eguneraketak egiaztatzeko bezalako eginkizunetarako.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>&Berez-atzeman Hostalari Proxy Ezarpenak</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hautatutakoan, VirtualBox-ek Interneteko zuzeneko elkarketa erabiliko du Gonbidatu Gehigarriak saretik jeisteko edo eguneraketak egiaztatzeko bezalako eginkizunetarako.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <translation>&Zuzeneko Elkarketa Internet-era</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hautatutakoan, VirtualBox-ek proxy ezarpenak erabiliko ditu Gonbidatu Gehigarriak saretik jeisteko edo eguneraketak egiaztatzeko bezalako eginkizunetarako.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>&Eskuzko Proxy Itxurapena</translation>
     </message>
     <message>
         <location line="+35"/>
@@ -6136,7 +6136,7 @@
         <translation type="obsolete">Hautatu CD/DVD birtual diska agiri bat...</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-335"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-342"/>
         <source>Choose disk image...</source>
         <comment>This is used for hard disks, optical media and floppies</comment>
         <translation>Hautatu diska irudia...</translation>
@@ -7146,12 +7146,12 @@
     <message>
         <location line="+58"/>
         <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Oraingo berbidalketa ataka arauak ez dira baliozkoak. Hostalari edo gonbidatu helbide balio guztiak zuzen edo hutsik egon behar dira.</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Oraingo berbidalketa ataka arauak ez dira baliozkoak. Gonbidatu helbide balioetako bat ere ezin daiteke hutsik egon.</translation>
     </message>
     <message>
         <location line="+83"/>
@@ -8730,7 +8730,7 @@
 <context>
     <name>UINetworkReplyPrivate</name>
     <message>
-        <location filename="../src/net/UINetworkReply.cpp" line="+952"/>
+        <location filename="../src/net/UINetworkReply.cpp" line="+953"/>
         <source>Host not found</source>
         <translation>Hostalaria ez da aurkitu</translation>
     </message>
@@ -8747,7 +8747,7 @@
     <message>
         <location line="+1"/>
         <source>Connection refused</source>
-        <translation type="unfinished"></translation>
+        <translation>Elkarketa ukatua</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -8760,25 +8760,30 @@
         <translation>SSL egiaztapen hutsegitea</translation>
     </message>
     <message>
-        <location line="-30"/>
+        <location line="-31"/>
         <source>%1: %2</source>
         <comment>Context description: Error description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: %2</translation>
     </message>
     <message>
         <location line="+25"/>
         <source>Unable to initialize HTTP library</source>
-        <translation type="unfinished"></translation>
+        <translation>Ezinezkoa HTTP liburutegia abiaraztea</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Url not found on the server</source>
+        <translation>Url-a ez da zerbitzarian aurkitu</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Content moved</source>
-        <translation type="unfinished"></translation>
+        <translation>Edukia mugituta</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Proxy not found</source>
-        <translation type="unfinished"></translation>
+        <translation>Proxya ez da aurkitu</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -8789,20 +8794,20 @@
 <context>
     <name>UINetworkReplyPrivateThread</name>
     <message>
-        <location line="-575"/>
+        <location line="-576"/>
         <source>During proxy configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>Proxy itxurapenean zehar</translation>
     </message>
     <message>
         <location line="+33"/>
         <source>During certificate downloading</source>
-        <translation type="unfinished"></translation>
+        <translation>Egiaztagiri jeisketan zehar</translation>
     </message>
     <message>
         <location line="+85"/>
         <location line="+13"/>
         <source>During network request</source>
-        <translation type="unfinished"></translation>
+        <translation>Sare eskaeran zehar</translation>
     </message>
 </context>
 <context>
@@ -8874,7 +8879,7 @@
         <translation>Gonbidatu Ataka</translation>
     </message>
     <message>
-        <location line="+390"/>
+        <location line="+394"/>
         <source>Contains a list of port forwarding rules.</source>
         <translation>Berbidalketa ataka arauen zerrenda bat du.</translation>
     </message>
@@ -11251,14 +11256,14 @@
         <translation>Hostalari Gailua</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+673"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+680"/>
         <source>User-defined</source>
         <comment>serial port</comment>
         <translation>Erabiltzaileak-zehaztuta</translation>
     </message>
     <message>
         <location filename="../src/UIVMInfoDialog.cpp" line="-176"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-1040"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-1047"/>
         <location filename="../src/runtime/UIIndicatorsPool.cpp" line="-9"/>
         <source>VT-x/AMD-V</source>
         <comment>details report</comment>
@@ -11522,14 +11527,14 @@
         <translation>Ezarrita</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+1002"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+1009"/>
         <source>Differencing</source>
         <comment>DiskType</comment>
         <translation>Bereizlea</translation>
     </message>
     <message>
         <location filename="../src/UIVMInfoDialog.cpp" line="-1"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-1037"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-1044"/>
         <source>Nested Paging</source>
         <comment>details report</comment>
         <translation>Nested Orrialdeztapena</translation>
@@ -11947,7 +11952,7 @@
     <message>
         <location filename="../src/converter/UIConverterBackendGlobal.cpp" line="+76"/>
         <location line="+19"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+1587"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+1594"/>
         <location line="+32"/>
         <source>B</source>
         <comment>size suffix Bytes</comment>
@@ -12027,7 +12032,7 @@
         <translation>Mugagabeko Exekuzioa</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-1916"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-1923"/>
         <source>Unknown device</source>
         <comment>USB device details</comment>
         <translation>Gailu ezezaguna</translation>
@@ -12588,7 +12593,7 @@
         <translation>Disketa birtual agiri guztiak (%1)</translation>
     </message>
     <message>
-        <location line="+2052"/>
+        <location line="+2059"/>
         <source>VDI (VirtualBox Disk Image)</source>
         <translation>VDI (VirtualBox Diska Irudia)</translation>
     </message>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts
index 4ef80a2..de64f19 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts
@@ -88,11 +88,11 @@
         <translation type="obsolete">درایور هسته لینوکس ويرچوال باکس (vboxdrv) بارگیری نشده است یا مشکلی با سطح دسترسی /dev/vboxdrv دارد. لطفا مدل هسته را با اِجرای راه انداز<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>بعنوان ریشه مجددا نصب نمایید. اگر آن در توزیع شما موجود باشد، شما اول باید بسته دی کی اِم اِس را نصب کنید. این بسته تغییرات هسته لینوکس را ردگیری و ذخیره میکند و مدل هسته  vboxdrv در صورت نیاز مجددا  [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -7641,6 +7641,10 @@
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
index a74728e..9fe826f 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
@@ -77,12 +77,12 @@
 <context>
     <name>QApplication</name>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Tämä virhe tarkoittaa, että ytimen ajuri ei voinut varata tarpeeksi muistia  tai että joku muistin kartoitustoiminto epäonnistui.<br/><br/>Ydintä 2.6.29 käytettäessä on tunnettuja käyttöongelmia. Jos käytät tätä ydintä,  muokkaa tiedostoja /usr/src/vboxdrv-*/Makefile ja aseta arvo <i>VBOX_USE_INSERT_PAGE = 1</i>. Tämän jälkeen sinun täytyy kääntää ytimen moduli uudestaan komennolla <br/><br/>  <font color=blue&gt [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Tämä virhe tarkoittaa, että ytimen ajuri ei voinut varata tarpeeksi muistia  tai että joku muistin kartoitustoiminto epäonnistui.<br/><br/>Ydintä 2.6.29 käytettäessä on tunnettuja käyttöongelmia. Jos käytät tätä ydintä,  muokkaa tiedostoja /usr/src/vboxdrv-*/Makefile ja aseta arvo <i>VBOX_USE_INSERT_PAGE = 1</i>. Tämän jälkeen sinun täytyy kääntää ytimen moduli uudestaan komennolla <br/><br/>  <font color=blue&gt [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">VirtualBoxin Linux-ytimen ajuri (vboxdrv) ei ole joko ladattu tai laitetiedoston /dev/vboxdrv oikeudet ovat väärin. Määrittele ytimen moduulin asetukset uudestaan root-käyttäjänä komennolla <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Ubuntun, fedoran ja mandrivan käyttäjien tulisi ensin asentaa paketti dkms. Tämä paketti pitää kirjaa ytimen muutoksista ja kääntää moduulit automaattisest [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">VirtualBoxin Linux-ytimen ajuri (vboxdrv) ei ole joko ladattu tai laitetiedoston /dev/vboxdrv oikeudet ovat väärin. Määrittele ytimen moduulin asetukset uudestaan root-käyttäjänä komennolla <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Ubuntun, fedoran ja mandrivan käyttäjien tulisi ensin asentaa paketti dkms. Tämä paketti pitää kirjaa ytimen muutoksista ja kääntää moduulit automaatt [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -129,7 +129,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -137,7 +137,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8326,6 +8326,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
index c6592e2..03ee71b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
@@ -52,8 +52,8 @@
         <translation>Essayez de réinstaller VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Soit le pilote noyau Linux de VirtualBox (vboxdrv) n'est pas en mémoire, soit il y a un problème de permissions avec /dev/vboxdrv. Veuillez réinitialiser le module noyau en exécutant en tant qu'administrateur <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Les utilisateurs des distributions Ubuntu, Fedora et Mandriva devraient installer le paquet DKMS au préalable. Ce paquet suit  [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Soit le pilote noyau Linux de VirtualBox (vboxdrv) n'est pas en mémoire, soit il y a un problème de permissions avec /dev/vboxdrv. Veuillez réinitialiser le module noyau en exécutant en tant qu'administrateur <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Les utilisateurs des distributions Ubuntu, Fedora et Mandriva devraient installer le paquet DKMS au préalable. Ce paquet  [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -80,16 +80,16 @@
         <translation>Les modules noyaux VirtualBox ne correspondent pas à la version installée de VirtualBox. L'installation ne paraît pas correcte. Nous vous conseillons de désinstaller complètement VirtualBox et de le réinstaller.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Les modules noyaux VirtualBox ne correspondent pas à la version installée de VirtualBox. L'installation ne paraît pas correcte. Exécuter <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/> pourrait résoudre le problème. Faites attention à ne pas mélanger les versions OSE et PUEL de VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Les modules noyaux VirtualBox ne correspondent pas à la version installée de VirtualBox. L'installation ne paraît pas correcte. Exécuter <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> pourrait résoudre le problème. Faites attention à ne pas mélanger les versions OSE et PUEL de VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Cette erreur signifie que le module noyau n'a pas pu allouer suffisamment de mémoire, ou bien qu'une opération de translation a échoué.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Le pilote du noyau Linux de VirtualBox (vboxdrv) n'est soit pas chargé ou il y a un problème de permission sur /dev/vboxdrv. Veuillez réinstaller le module noyau en éxécutant<br><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> en tant qu'administrateur. S'il n'est pas disponible pour votre distribution, vous devriez installer d'abord le paquet DKMS. Ce paquet garde la trace des changeme [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Le pilote du noyau Linux de VirtualBox (vboxdrv) n'est soit pas chargé ou il y a un problème de permission sur /dev/vboxdrv. Veuillez réinstaller le module noyau en éxécutant<br><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> en tant qu'administrateur. S'il n'est pas disponible pour votre distribution, vous devriez installer d'abord le paquet DKMS. Ce paquet garde la trace des cha [...]
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -1452,7 +1452,7 @@
     </message>
     <message>
         <source>Description</source>
-        <translation>Déscription</translation>
+        <translation>Description</translation>
     </message>
     <message>
         <source>License</source>
@@ -9235,6 +9235,10 @@
         <source>Proxy not found</source>
         <translation>Proxy non trouvé</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
@@ -12975,7 +12979,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     <message>
         <source>Description</source>
         <comment>DetailsElementType</comment>
-        <translation>Déscription</translation>
+        <translation>Description</translation>
     </message>
     <message>
         <source>Please choose a virtual hard drive file</source>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts
index 4e5b238..0ebfd61 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts
@@ -67,12 +67,12 @@
         <translation>Unha solución podería ser a reinstalación do VirtualBox.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Este erro significa que ao controlador do núcleo lle foi imposíbel asignar a memoria suficiente ou que fallou algunha operación de mapeo.<br/><br/>Existen algúns problemas coa versión do núcleo de Linux 2.6.29. Se está empregando este núcleo edite /usr/src/vboxdrv-*/Makefile e active <i>VBOX_USE_INSERT_PAGE = 1</i>. A continuación, recompile o módulo do núcleo executando<br/><br/>  <font color=blue>'/sbin [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Este erro significa que ao controlador do núcleo lle foi imposíbel asignar a memoria suficiente ou que fallou algunha operación de mapeo.<br/><br/>Existen algúns problemas coa versión do núcleo de Linux 2.6.29. Se está empregando este núcleo edite /usr/src/vboxdrv-*/Makefile e active <i>VBOX_USE_INSERT_PAGE = 1</i>. A continuación, recompile o módulo do núcleo executando<br/><br/>  <font color=blue>'/sbin [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">O controlador do núcleo Linux de VirtualBox (vboxdrv) non está cargado ou existe un problema cos permisos de /dev/vboxdrv. Reconfigura o módulo do núcleo executando<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>como usuario root. Usuarios de Ubuntu, Fedora ou Mandriva deberían instalar primeiro o paquete DKMS. Este paquete vixía os cambios do núcleo Linux e recompila o módulo do núcleo vbo [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">O controlador do núcleo Linux de VirtualBox (vboxdrv) non está cargado ou existe un problema cos permisos de /dev/vboxdrv. Reconfigura o módulo do núcleo executando<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>como usuario root. Usuarios de Ubuntu, Fedora ou Mandriva deberían instalar primeiro o paquete DKMS. Este paquete vixía os cambios do núcleo Linux e recompila o módulo do núcle [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -99,15 +99,15 @@
         <translation>Os módulos de VirtualBox do núcleo non se axustan a esta versión de VirtualBox. Polo visto a instalación de Virtualbox non foi correcta. Unha solución podería ser desinstalar completamente VirtualBox e a súa reinstalación.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Os módulos de VirtualBox do núcleo non se axustan a esta versión de VirtualBox. Polo visto a instalación de Virtualbox non foi correcta. Ao executar<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>debería arranxarse este problema. Asegúrese de que non mestura a versión OSE e a versión PUEL de VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Os módulos de VirtualBox do núcleo non se axustan a esta versión de VirtualBox. Polo visto a instalación de Virtualbox non foi correcta. Ao executar<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>debería arranxarse este problema. Asegúrese de que non mestura a versión OSE e a versión PUEL de VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8219,6 +8219,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
index 43d55f8..b15aa5d 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
@@ -108,12 +108,12 @@
         <translation>Talán újra kellene telepítened a VirtualBoxot.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Ez a hiba azt jelenti,hogy a kernel driver nem tud elegendő memóriát foglalni, vagy valamilyen foglalási művelet nem sikerült.<br/><br/> Ez ismert probléma a Linux kernel 2.6.29-es verziójával. Ha ilyen, vagy újabb kernelt futtatsz, a /usr/src/vboxdrv-*/Makefile fájlban engedélyezni kell a <i>VBOX_USE_INSERT_PAGE = 1</i> beállítást. Ezután a kernel modul újrafordítását a <br/><br/>  <font color=blue>'/sbi [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Ez a hiba azt jelenti,hogy a kernel driver nem tud elegendő memóriát foglalni, vagy valamilyen foglalási művelet nem sikerült.<br/><br/> Ez ismert probléma a Linux kernel 2.6.29-es verziójával. Ha ilyen, vagy újabb kernelt futtatsz, a /usr/src/vboxdrv-*/Makefile fájlban engedélyezni kell a <i>VBOX_USE_INSERT_PAGE = 1</i> beállítást. Ezután a kernel modul újrafordítását a <br/><br/>  <font color=blue>'/sbi [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">A VirtualBox Linux kernel modulja (vboxdrv) nincs betöltve, vagy jogosultsági problémák léptek fel a /dev/vboxdrv eszközfájlon. Próbáld meg a <font color=blue>'/sbin/vboxconfig'</font> futtatásával újrakonfigurálni a kernelmodult root-ként. Ubuntu, Dedora és Mandriva felhasználóknak előbb a DKMS csomagot érdemes feltelepíteniük. Ez a csomag követi a Linux kernel változásait, és újrafordítja a modulokat, ha szükséges. </translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">A VirtualBox Linux kernel modulja (vboxdrv) nincs betöltve, vagy jogosultsági problémák léptek fel a /dev/vboxdrv eszközfájlon. Próbáld meg a <font color=blue>'/sbin/rcvboxdrv setup'</font> futtatásával újrakonfigurálni a kernelmodult root-ként. Ubuntu, Dedora és Mandriva felhasználóknak előbb a DKMS csomagot érdemes feltelepíteniük. Ez a csomag követi a Linux kernel változásait, és újrafordítja a modulokat, ha szükséges. </translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -140,8 +140,8 @@
         <translation>A VirtualBox kernel modul verziója nem megfelelő ehhez a VirtualBoxhoz. Valószínű, hogy a telepítés nem sikerült, és a program vagy a kernelmodul eltávolítása és újratelepítése segíthet.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>A VirtualBox kernel modul nem megfelelő a VirtualBoxhoz. Valószínű, hogy a telepítés nem volt sikeres, de a <br/><br/>  <font color=blue>/sbin/vboxconfig</font><br/><br/>parancs lefuttatása segíthet. Figyelj arra, hogy a VirtualBox OSE és a PUEL verziója nem kompatibilis egymással.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>A VirtualBox kernel modul nem megfelelő a VirtualBoxhoz. Valószínű, hogy a telepítés nem volt sikeres, de a <br/><br/>  <font color=blue>/sbin/rcvboxdrv setup</font><br/><br/>parancs lefuttatása segíthet. Figyelj arra, hogy a VirtualBox OSE és a PUEL verziója nem kompatibilis egymással.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
@@ -149,8 +149,8 @@
         <translation>A kernel driver nem tudott elegendő memóriát lefoglalni, vagy valamilyen memóriaművelet nem sikerült.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>A VirtualBox Linuxos eszközmeghajtója nem tölthető be, vagy jogosultságprobléma van a /dev/vboxdrv eszközfájllal. Kérlek, telepítsd újra a kernel modult a<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>parancs rendszergazdaként történő végrehajtásával. Lehet,  hogy ehhez előbb telepítened kell a megfelelő DKMS csomagot, ha ez elérhető a disztribúciódhoz. Ez a csomag figyeli a Linux kernel változásait, és ú [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>A VirtualBox Linuxos eszközmeghajtója nem tölthető be, vagy jogosultságprobléma van a /dev/vboxdrv eszközfájllal. Kérlek, telepítsd újra a kernel modult a<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>parancs rendszergazdaként történő végrehajtásával. Lehet,  hogy ehhez előbb telepítened kell a megfelelő DKMS csomagot, ha ez elérhető a disztribúciódhoz. Ez a csomag figyeli a Linux kernel változásait, [...]
     </message>
 </context>
 <context>
@@ -10258,6 +10258,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
index 8c9e73e..3da7560 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
@@ -132,16 +132,16 @@
         <translation>Modul kernel VirtualBox tak cocok dengan versi VirtualBox ini. Instalasi VirtualBox sepertinya tak sukses. Silakan coba membongkar seluruhnya dan memasang ulang VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Modul kernel VirtualBox tidak cocok dengan versi VirtualBox ini. Instalasi VirtualBox sepertinya tak sukses. Menjalankan <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>mungkin memperbaiki hal ini. Pastikan bahwa Anda tak mencampur VirtualBox versi OSE dan versi PUEL.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Modul kernel VirtualBox tidak cocok dengan versi VirtualBox ini. Instalasi VirtualBox sepertinya tak sukses. Menjalankan <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>mungkin memperbaiki hal ini. Pastikan bahwa Anda tak mencampur VirtualBox versi OSE dan versi PUEL.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Kesalahan ini berarti driver kernel tak dapat mengalokasikan memori yang cukup atau beberapa operasi pemetaan gagal.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Driver VirtualBox untuk kernel Linux (vboxdrv) mungkin tidak dimuat atau ada masalah ijin dengan /dev/vboxdrv. Silakan pasang ulang modul kernel dengan menjalankan<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>sebagai root. Bila tersedia untuk distribusi Anda, Anda mesti terlebih dahulu memasang paket DKMS. Paket ini mencatat perubahan kernel Linux dan mengkompail ulang modul kernel vboxdrv bila diperluka [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Driver VirtualBox untuk kernel Linux (vboxdrv) mungkin tidak dimuat atau ada masalah ijin dengan /dev/vboxdrv. Silakan pasang ulang modul kernel dengan menjalankan<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>sebagai root. Bila tersedia untuk distribusi Anda, Anda mesti terlebih dahulu memasang paket DKMS. Paket ini mencatat perubahan kernel Linux dan mengkompail ulang modul kernel vboxdrv bila dipe [...]
     </message>
 </context>
 <context>
@@ -9466,6 +9466,10 @@
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
index 7bd2cbc..8f4861b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
@@ -132,24 +132,24 @@
         <translation>I moduli del kernel non corrispondono a questa versione di VirtualBox. L'installazione di VirtualBox sembra non essere riuscita. Potrebbe essere d'aiuto la completa disinstallazione e reinstallazione di VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>I moduli del kernel non corrispondono a questa versione di VirtualBox. L'installazione di VirtualBox sembra non essere riuscita. L'esecuzione di <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>potrebbe risolvere il problema. Assicurati di non mischiare la versione OSE con la versione PUEL di VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>I moduli del kernel non corrispondono a questa versione di VirtualBox. L'installazione di VirtualBox sembra non essere riuscita. L'esecuzione di <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>potrebbe risolvere il problema. Assicurati di non mischiare la versione OSE con la versione PUEL di VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Questo errore significa che il driver del kernel non è stato in grado di allocare memoria sufficiente o che alcune operazioni di mappatura non sono riuscite.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Il driver del kernel Linux di VirtualBox (vboxdrv) non è stato caricato o esiste un problema di permessi con /dev/vboxdrv. Installa nuovamente il modulo del kernel eseguendo<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>come root. Se è disponibile nella tua distribuzione, dovresti installare prima il pacchetto DKMS. Questo pacchetto tiene traccia dei cambiamenti del kernel Linux e ricompila il modulo vbox [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Il driver del kernel Linux di VirtualBox (vboxdrv) non è stato caricato o esiste un problema di permessi con /dev/vboxdrv. Installa nuovamente il modulo del kernel eseguendo<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>come root. Se è disponibile nella tua distribuzione, dovresti installare prima il pacchetto DKMS. Questo pacchetto tiene traccia dei cambiamenti del kernel Linux e ricompila il modulo [...]
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Questo errore indica che il driver del kernel non è in grado di allocare memoria sufficiente o che l'operazione di mappatura non è riuscita.<br/><br/>Ci sono problemi noti con Linux 2.6.29. Se stai eseguendo questo kernel, modifica /usr/src/vboxdrv-*/Makefile e abilita <i>VBOX_USE_INSERT_PAGE = 1</i>. Ricompila poi il modulo del kernel eseguendo <br/><br/>  <font color=blue>'/sbin/vboxconfig'&lt [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Questo errore indica che il driver del kernel non è in grado di allocare memoria sufficiente o che l'operazione di mappatura non è riuscita.<br/><br/>Ci sono problemi noti con Linux 2.6.29. Se stai eseguendo questo kernel, modifica /usr/src/vboxdrv-*/Makefile e abilita <i>VBOX_USE_INSERT_PAGE = 1</i>. Ricompila poi il modulo del kernel eseguendo <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup&apo [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Il driver del kernel Linux di VirtualBox (vboxdrv) potrebbe non essere caricato o potrebbe esserci un problema di permessi con /dev/vboxdrv. Riconfigura il modulo del kernel eseguendo <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>come root. Gli utenti di Ubuntu, Fedora o Mandriva dovrebbero installare prima il pacchetto DKMS. Questo pacchetto tiene traccia delle modifiche del kernel e ric [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Il driver del kernel Linux di VirtualBox (vboxdrv) potrebbe non essere caricato o potrebbe esserci un problema di permessi con /dev/vboxdrv. Riconfigura il modulo del kernel eseguendo <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>come root. Gli utenti di Ubuntu, Fedora o Mandriva dovrebbero installare prima il pacchetto DKMS. Questo pacchetto tiene traccia delle modifiche del kernel  [...]
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -5149,27 +5149,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Se selezionata, VirtualBox proverà a rilevare automaticamente le impostazioni del proxy dell'host per operazioni come lo scaricamento delle Guest Additions dalla rete o il controllo degli aggiornamenti.</translation>
     </message>
     <message>
         <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Rileva &automaticamente le impostazioni del proxy dell'host</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Se selezionata, VirtualBox utilizzerà una connessione diretta a Internet per operazioni come lo scaricamento delle Guest Additions dalla rete o il controllo degli aggiornamenti.</translation>
     </message>
     <message>
         <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <translation>Connessione &diretta a Internet</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Se selezionata, VirtualBox utilizzerà le impostazioni del proxy fornite per operazioni come lo scaricamento delle Guest Additions dalla rete o il controllo degli aggiornamenti.</translation>
     </message>
     <message>
         <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>Configurazione proxy &manuale</translation>
     </message>
 </context>
 <context>
@@ -11148,6 +11148,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation>Proxy non trovato</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation>URL non trovato sul server</translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
index 825196a..ddeb36f 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
@@ -108,12 +108,12 @@
         <translation>VirtualBoxを再インストールしてください。</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">このエラーは、カーネルドライバーに十分なメモリーを割り当てできないか、またはマッピング操作に失敗したことを意味します。<br/><br/>これはLinux 2.6.29の既知の問題です。このバージョンのカーネルを使用するならば、/usr/src/vboxdrv-*/Makefileを編集し、<i>VBOX_USE_INSERT_PAGE = 1</i>を有効にしてください。その後、root権限で<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>を実行してカーネルモジュールを再コンパイルしてください。</translation>
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">このエラーは、カーネルドライバーに十分なメモリーを割り当てできないか、またはマッピング操作に失敗したことを意味します。<br/><br/>これはLinux 2.6.29の既知の問題です。このバージョンのカーネルを使用するならば、/usr/src/vboxdrv-*/Makefileを編集し、<i>VBOX_USE_INSERT_PAGE = 1</i>を有効にしてください。その後、root権限で<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>を実行してカーネルモジュールを再コンパイルしてください。</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">VirtualBoxのLinuxカーネルドライバー(vboxdrv)はロードされません。または/dev/vboxdrvのパーミッションに問題があります。root権限で<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>を実行してカーネルモジュールを再セットアップしてください。Ubuntu、FedoraまたはMandrivaユーザーは最初にDKMSパッケージをインストールしてください。このパッケージはLinuxカーネルの変更を把握し、必要ならばvboxdrvカーネルモジュールを再コンパイルします。</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">VirtualBoxのLinuxカーネルドライバー(vboxdrv)はロードされません。または/dev/vboxdrvのパーミッションに問題があります。root権限で<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>を実行してカーネルモジュールを再セットアップしてください。Ubuntu、FedoraまたはMandrivaユーザーは最初にDKMSパッケージをインストールしてください。このパッケージはLinuxカーネルの変更を把握し、必要ならばvboxdrvカーネルモジュールを再コンパイルします。</translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -136,16 +136,16 @@
         <translation>カーネルドライバーにアクセスできません</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>VirtualBoxのLinuxカーネルドライバー(vboxdrv)は読み込まれていないか、/dev/vboxdrvのパーミッションに問題があります。root権限で<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>を実行してカーネルモジュールを再インストールしてください。もしディストリビューションにある場合、まずDKMSパッケージをインストールしてください。このパッケージはLinuxカーネルの変更を把握し、必要ならばvboxdrvカーネルモジュールを再コンパイルします。</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>VirtualBoxのLinuxカーネルドライバー(vboxdrv)は読み込まれていないか、/dev/vboxdrvのパーミッションに問題があります。root権限で<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>を実行してカーネルモジュールを再インストールしてください。もしディストリビューションにある場合、まずDKMSパッケージをインストールしてください。このパッケージはLinuxカーネルの変更を把握し、必要ならばvboxdrvカーネルモジュールを再コンパイルします。</translation>
     </message>
     <message>
         <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
         <translation>カーネルモジュールのバージョンが適合しません。VirtualBoxのインストールは成功しませんでした。この問題はVirtualBoxを完全にアンインストール後、再インストールすることで解決するかもしれません。</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>カーネルモジュールのバージョンが適合しません。VirtualBoxのインストールは成功しませんでした。</br></br><font color=blue>'/sbin/vboxconfig'</font><br/><br/>を実行すると、この問題は修正されるでしょう。VirtualBoxのOSEバージョンとPUELバージョンを混在して使用しないでください。</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>カーネルモジュールのバージョンが適合しません。VirtualBoxのインストールは成功しませんでした。</br></br><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>を実行すると、この問題は修正されるでしょう。VirtualBoxのOSEバージョンとPUELバージョンを混在して使用しないでください。</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
@@ -10559,6 +10559,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
index c01ca09..1317ab6 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
@@ -56,7 +56,7 @@
         <translation>កំហុស​នេះ​មាន​ន័យ​ថា កម្មវិធី​បញ្ជា​ខឺណែល​មិនអាច​បម្រុង​ទុក​សតិ​គ្រប់គ្រាន់​ ឬ​បានបរាជ័យ​ក្នុងកា​រ​ផ្គូផ្គង​មួយ​ចំនួន ។</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
         <translation type="obsolete">កម្ម​វិធី​ខឺ​ណែល​លីនុច​ VirtualBox (vboxdrv) មិនត្រូវ​បាន​ផ្ទុក​ ឬ​មាន​បញ្ហា​សិទ្ធិ​ជាមួយ​ /dev/vboxdrv ។ សូម​ដំឡើង​ឡើង​វិញ​ម៉ូ​​ឌុល​ខឺ​ណែល​​​ដោយ​ការ​ប្រតិបត្តិ​​ <br/><br/>  <font color=blue>'/sbin/rcvboxdrv ដំឡើ​ង</font><br/><br/>​ដូច Root ។ អ្នក​ប្រើ​យូប៊ុន​ទូ​ Fedora ឬ​ Mandriva គួរ​តែដំឡើង​កញ្ចប់​ដំបូង​របស់​ DKMS ។ កញ្ចប់​នេះ​​តាម​ដាន​​រក្សា​ទុក​​នៃ​ការ​ផ្លាស់​ប្តូរ​ខឺ​ណែល​លីនុច​ និងចង​​ក្រង​ឡើងវិញ​នៃ​​ម៉ូ [...]
     </message>
     <message>
@@ -64,8 +64,8 @@
         <translation>ម៉ូ​ឌុល​ខឺ​ណែល​របស់​ VirtualBox មិន​ផ្គូផ្គង​​កំណែ​របស់​ VirtualBox នេះ​ទេ​ ។ ជាក់​ស្តែង​ការ​ដំឡើង VirtualBox ​​​មិន​ទទួល​បាន​ជោគជ័យ​នោះ​ទេ ។ សូម​ព្យាយាម​លុប​​ ហើយ​​ដំឡើង​ VirtualBox ឡើង​វិញ ។</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>ម៉ូឌុល​ខឺ​ណែល​របស់​ VirtualBox មិន​ផ្គូផ្គង​កំណែ​របស់​ VirtualBox នេះទេ ។ ជាក់​ស្តែង​ការ​ដំឡើង​របស់​ VirtualBox មិន​ទទួល​បាន​ជោគជ័យ​នោះ​ទេ ។ ការ​ប្រតិបត្តិ​<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>នេះ​អាច​ត្រឹមត្រូវ​ ។ សូម​ប្រាកដ​ថា​ អ្នក​មិនបញ្ចូល​កំណែ​ OSE និង​​កំណែ​ PUEL របស់​ VirtualBox ចូល​គ្នា​ឡើយ ។</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>ម៉ូឌុល​ខឺ​ណែល​របស់​ VirtualBox មិន​ផ្គូផ្គង​កំណែ​របស់​ VirtualBox នេះទេ ។ ជាក់​ស្តែង​ការ​ដំឡើង​របស់​ VirtualBox មិន​ទទួល​បាន​ជោគជ័យ​នោះ​ទេ ។ ការ​ប្រតិបត្តិ​<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>នេះ​អាច​ត្រឹមត្រូវ​ ។ សូម​ប្រាកដ​ថា​ អ្នក​មិនបញ្ចូល​កំណែ​ OSE និង​​កំណែ​ PUEL របស់​ VirtualBox ចូល​គ្នា​ឡើយ ។</translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -88,7 +88,7 @@
         <translation>មិន​ស្គាល់​កំហុស​ %2 អំឡុង​ពេល​ដែលការ​ចាប់​ផ្តើមពេលវេលា​រត់​</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8264,6 +8264,10 @@ medium</comment>
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
index 557f23e..319b75a 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
@@ -67,12 +67,12 @@
         <translation>VirtualBox를 다시 설치하시면 해결될 수도 있습니다.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">VirtualBox 커널 드라이버에서 충분한 메모리를 할당할 수 없었거나, 일부 매핑 동작이 실패한 것 같습니다.<br /><br />리눅스 커널 2.6.29에는 알려진 문제가 있습니다. 리눅스 커널 2.6.29를 사용하신다면, /usr/src/vboxdrv-*/Makefile을 편집하시고, <i>VBOX_USE_INSERT_PAGE = 1</i>을 추가하십시오. 그 다음 루트 권한으로 이 명령어를 내려서 커널 모듈을 다시 컴파일하십시오.<br /><br /><font color=blue>'/sbin/vboxconfig'</font><br /><br />.</translation>
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">VirtualBox 커널 드라이버에서 충분한 메모리를 할당할 수 없었거나, 일부 매핑 동작이 실패한 것 같습니다.<br /><br />리눅스 커널 2.6.29에는 알려진 문제가 있습니다. 리눅스 커널 2.6.29를 사용하신다면, /usr/src/vboxdrv-*/Makefile을 편집하시고, <i>VBOX_USE_INSERT_PAGE = 1</i>을 추가하십시오. 그 다음 루트 권한으로 이 명령어를 내려서 커널 모듈을 다시 컴파일하십시오.<br /><br /><font color=blue>'/sbin/rcvboxdrv setup'</font><br /><br />.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">VirtualBox 리눅스 커널 드라이버(vboxdrv)가 불러와지지 않았거나 /dev/vobxdrv에 접근할 수 없습니다. 루트 권한으로 다음 명령어를 실행시켜서 커널 모듈을 다시 설정하십시오.<br /><br /><font color=blue>'/sbin/vboxconfig'</font><br /><br />우분투, 페도라, 맨드리바 사용자들께서는 DKMS 패키지를 설치하는 것을 추천합니다. 이 패키지를 사용하면 리눅스 커널이 바뀌었을 때 자동으로 커널 모듈을 다시 컴파일합니다.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">VirtualBox 리눅스 커널 드라이버(vboxdrv)가 불러와지지 않았거나 /dev/vobxdrv에 접근할 수 없습니다. 루트 권한으로 다음 명령어를 실행시켜서 커널 모듈을 다시 설정하십시오.<br /><br /><font color=blue>'/sbin/rcvboxdrv setup'</font><br /><br />우분투, 페도라, 맨드리바 사용자들께서는 DKMS 패키지를 설치하는 것을 추천합니다. 이 패키지를 사용하면 리눅스 커널이 바뀌었을 때 자동으로 커널 모듈을 다시 컴파일합니다.</translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -99,16 +99,16 @@
         <translation>이 버전의 VirtualBox에서는 현재 설치되어 있는 커널 모듈을 사용할 수 없습니다. VirtualBox 설치 과정이 실패했을 수도 있습니다. 완전히 삭제한 다음 다시 설치해 보십시오.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>이 버전의 VirtualBox에서는 현재 설치되어 있는 커널 모듈을 사용할 수 없습니다. VirtualBox 설치 과정이 실패했을 수도 있습니다. <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> 명령을 실행시키면 문제를 해결할 수도 있습니다. VirtualBox OSE 버전과 PUEL 버전을 같이 설치하지 마십시오..</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>이 버전의 VirtualBox에서는 현재 설치되어 있는 커널 모듈을 사용할 수 없습니다. VirtualBox 설치 과정이 실패했을 수도 있습니다. <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> 명령을 실행시키면 문제를 해결할 수도 있습니다. VirtualBox OSE 버전과 PUEL 버전을 같이 설치하지 마십시오..</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
-        <translation>이 버전의 VirtualBox에서는 현재 설치되어 있는 커널 모듈을 사용할 수 없습니다. VirtualBox 설치 과정이 실패했을 수도 있습니다. <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> 명령을 실행시키면 문제를 해결할 수도 있습니다. VirtualBox OSE 버전과 PUEL 버전을 같이 설치하지 마십시오..</translation>
+        <translation>이 버전의 VirtualBox에서는 현재 설치되어 있는 커널 모듈을 사용할 수 없습니다. VirtualBox 설치 과정이 실패했을 수도 있습니다. <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> 명령을 실행시키면 문제를 해결할 수도 있습니다. VirtualBox OSE 버전과 PUEL 버전을 같이 설치하지 마십시오..</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>VirtualBox 리눅스 커널 드라이버(vboxdrv)가 로드되지 않았거나, /dev/vboxdrv 장치 파일에 접근할 수 없습니다. 루트 권한으로 다음 명령을 실행하여 커널 모듈을 다시 설치하십시오:<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> 사용 중인 배포판이 DKMS를 지원한다면 먼저 설치하는 것을 추천합니다. 리눅스 커널 버전 변경을 추적하고 필요한 경우 vboxdrv 커널 모듈을 다시 컴파일합니다.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>VirtualBox 리눅스 커널 드라이버(vboxdrv)가 로드되지 않았거나, /dev/vboxdrv 장치 파일에 접근할 수 없습니다. 루트 권한으로 다음 명령을 실행하여 커널 모듈을 다시 설치하십시오:<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> 사용 중인 배포판이 DKMS를 지원한다면 먼저 설치하는 것을 추천합니다. 리눅스 커널 버전 변경을 추적하고 필요한 경우 vboxdrv 커널 모듈을 다시 컴파일합니다.</translation>
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -10390,6 +10390,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
index f279da1..b0cf4aa 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
@@ -52,8 +52,8 @@
         <translation>Bandykite iš naujo įdiegti VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">VirtualBox Linux branduolio modulis (vboxdrv) arba nėra įkeltas, arba nepakanka leidimų dirbti su /dev/vboxdrv. Iš naujo įdiekite branduolio modulį root teisėmis įvykdydami <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Ubuntu, Fedora ir Mandriva platinamųjų paketų naudotojai pirma turi įsidiegti DKMS paketą. Šis paketas seka Linux branduolio pakeitimus ir, jei reikia, perkompiliuoja vboxd [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">VirtualBox Linux branduolio modulis (vboxdrv) arba nėra įkeltas, arba nepakanka leidimų dirbti su /dev/vboxdrv. Iš naujo įdiekite branduolio modulį root teisėmis įvykdydami <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Ubuntu, Fedora ir Mandriva platinamųjų paketų naudotojai pirma turi įsidiegti DKMS paketą. Šis paketas seka Linux branduolio pakeitimus ir, jei reikia, perkompiliuoja  [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -80,16 +80,16 @@
         <translation>VirtualBox branduolio moduliai neatitinka įdiegtos VirtualBox versijos. Tikriausiai VirtualBox nebuvo pilnai įdiegta. Patariame visiškai pašalinti VirtualBox ir įdiegti iš naujo.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>VirtualBox branduolio moduliai neatitinka įdiegtos VirtualBox versijos. Tikriausiai VirtualBox nebuvo pilnai įdiegta. Galbūt administratoriaus teisėmis įvykdžius <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/> ši problema išsispręs. Įsitikinkite, kad nenaudojate OSE ir PUEL VirtualBox versijų dalių vienu metu.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>VirtualBox branduolio moduliai neatitinka įdiegtos VirtualBox versijos. Tikriausiai VirtualBox nebuvo pilnai įdiegta. Galbūt administratoriaus teisėmis įvykdžius <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> ši problema išsispręs. Įsitikinkite, kad nenaudojate OSE ir PUEL VirtualBox versijų dalių vienu metu.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Ši klaida reiškia, kad branduolio modulis arba negali išnaudoti pakankamai atminties, arba nepavyko atlikti kai kurių planavimo operacijų.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>VirtualBox Linux branduolio modulis (vboxdrv) arba nėra įkeltas, arba nepakanka leidimų dirbti su /dev/vboxdrv. Iš naujo įdiekite branduolio modulį root teisėmis įvykdydami <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Jei įmanoma pirma turite įsidiegti DKMS paketą. Šis paketas seka Linux branduolio pakeitimus ir, jei reikia, perkompiliuoja vboxdrv branduolio modulį.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>VirtualBox Linux branduolio modulis (vboxdrv) arba nėra įkeltas, arba nepakanka leidimų dirbti su /dev/vboxdrv. Iš naujo įdiekite branduolio modulį root teisėmis įvykdydami <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Jei įmanoma pirma turite įsidiegti DKMS paketą. Šis paketas seka Linux branduolio pakeitimus ir, jei reikia, perkompiliuoja vboxdrv branduolio modulį.</translation>
     </message>
 </context>
 <context>
@@ -9141,6 +9141,10 @@
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
index 6fd5061..2653c19 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
@@ -77,16 +77,16 @@
         <translation>De VirtualBox kernelmodules passen niet bij deze versie van VirtualBox. De installatie van VirtualBox is kennelijk niet goed gelukt. Deïnstalleer VirtualBox eerst volledig en installeer VirtualBox daarna opnieuw.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>De VirtualBox kernelmodules passen niet bij deze versie van VirtualBox. De installatie van VirtualBox is kennelijk niet goed gelukt. Uitvoeren van <br/><br/><font color=blue>'/sbin/vboxconfig'</font><br/><br/> zou dit kunnen corrigeren. Controleer of u de OSE versie en de PUEL versie van VirtualBox niet hebt vermengd.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>De VirtualBox kernelmodules passen niet bij deze versie van VirtualBox. De installatie van VirtualBox is kennelijk niet goed gelukt. Uitvoeren van <br/><br/><font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> zou dit kunnen corrigeren. Controleer of u de OSE versie en de PUEL versie van VirtualBox niet hebt vermengd.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Deze fout betekent dat de kerneldriver óf te weinig geheugen kan reserveren óf dat uitvoeren van mapping mislukt is.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>De VirtualBox Linux-kerneldriver (vboxdrv) is niet geladen of er is een permissie-probleem met /dev/vboxdrv. Herinstalleer de kernelmodule door <br/></br>..<font color=blue>'/sbin/vboxconfig' </font><br/><br/>als root uit te voeren. Indien in uw distributie aanwezig, installeer dan eerst het DKMS pakket. Dit pakket houdt Linux kernelveranderingen bij en hercompileert indien nodig de vboxdrv-kernelmodule.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>De VirtualBox Linux-kerneldriver (vboxdrv) is niet geladen of er is een permissie-probleem met /dev/vboxdrv. Herinstalleer de kernelmodule door <br/></br>..<font color=blue>'/sbin/rcvboxdrv setup' </font><br/><br/>als root uit te voeren. Indien in uw distributie aanwezig, installeer dan eerst het DKMS pakket. Dit pakket houdt Linux kernelveranderingen bij en hercompileert indien nodig de vboxdrv-kernelmodule.</translation>
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -8916,6 +8916,10 @@
         <source>Proxy not found</source>
         <translation>Proxy niet gevonden</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
index f84b206..8d20db8 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
@@ -108,12 +108,12 @@
         <translation>Być może pomocna będzie ponowna instalacja VirtualBox.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Ten błąd oznacza, że sterownik jądra systemu (vboxdrv) nie był w stanie przydzielić wystarczającej ilości pamięci lub nie powiodła się operacja mapowania.<br/><br/>Występują pewne znane problemy w systemach typu Linux 2.6.29. Jeśli używany jest taki właśnie kernel, należy zmienić plik /usr/src/vboxdrv-*/Makefile i włączyć <i>VBOX_USE_INSERT_PAGE = 1</i>. Następnie należy przekompilować moduł kernela, wydając polecenie<br/&gt [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Ten błąd oznacza, że sterownik jądra systemu (vboxdrv) nie był w stanie przydzielić wystarczającej ilości pamięci lub nie powiodła się operacja mapowania.<br/><br/>Występują pewne znane problemy w systemach typu Linux 2.6.29. Jeśli używany jest taki właśnie kernel, należy zmienić plik /usr/src/vboxdrv-*/Makefile i włączyć <i>VBOX_USE_INSERT_PAGE = 1</i>. Następnie należy przekompilować moduł kernela, wydając polecenie<br/&gt [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Sterownik VirtualBox dla jądra systemu Linux (vboxdrv) nie jest załadowany lub występuje problem z uprawnieniami dla /dev/vboxdrv. Należy ponownie przygotować moduł kernela, wydając polecenie<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>jako administrator. Użytkownicy systemów Ubuntu, Fedora i Mandriva powinni najpierw zainstalować pakiet DKMS. Pakiet ten śledzi zmiany kernela Linux i prz [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Sterownik VirtualBox dla jądra systemu Linux (vboxdrv) nie jest załadowany lub występuje problem z uprawnieniami dla /dev/vboxdrv. Należy ponownie przygotować moduł kernela, wydając polecenie<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>jako administrator. Użytkownicy systemów Ubuntu, Fedora i Mandriva powinni najpierw zainstalować pakiet DKMS. Pakiet ten śledzi zmiany kernela Linux  [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -140,15 +140,15 @@
         <translation>Moduły jądra systemu nie odpowiadają tej wersji VirtualBox. Prawdopodobnie nie powiodła się instalacja oprogramowania. Proszę spróbować całkowicie odinstalować i ponownie zainstalować VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Moduły jądra systemu nie odpowiadają tej wersji VirtualBox. Prawdopodobnie nie powiodła się instalacja oprogramowania. Wywołanie<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>może pomóc rozwiązać ten problem. Proszę także pamiętać, aby nie mieszać ze sobą wersji OSE oraz PUEL programu VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Moduły jądra systemu nie odpowiadają tej wersji VirtualBox. Prawdopodobnie nie powiodła się instalacja oprogramowania. Wywołanie<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>może pomóc rozwiązać ten problem. Proszę także pamiętać, aby nie mieszać ze sobą wersji OSE oraz PUEL programu VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Ten błąd oznacza, że sterownik jądra systemu nie był w stanie przydzielić odpowiedniej ilości pamięci lub nie powiodła się operacja mapowania.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -9242,6 +9242,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
index 569122b..d8bd7a9 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
@@ -108,8 +108,8 @@
         <translation>Reinstalar o VirtualBox poderá ajudar.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">O controlador (vboxdrv) kernel Linux  do VirtualBox ou não está carregado, ou existe algum problema de permissões com /dev/vboxdrv. Por favor reinstall o módulo kernel ao executar como administrador <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Os utilizadores Ubuntu, Fedora ou Mandriva devem instalar primeiro o pacote DKMS. Este pacote mantém as alterações do kernel Linux actualizadas  [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">O controlador (vboxdrv) kernel Linux  do VirtualBox ou não está carregado, ou existe algum problema de permissões com /dev/vboxdrv. Por favor reinstall o módulo kernel ao executar como administrador <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Os utilizadores Ubuntu, Fedora ou Mandriva devem instalar primeiro o pacote DKMS. Este pacote mantém as alterações do kernel Linux actualiz [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -136,15 +136,15 @@
         <translation>Os módulos kernel do VirtualBox não correspondem a esta versão do VirtualBox. A instalação do VirtualBox aparentemente falhou. Por favor tente desinstalar completamente e reinstalar o VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Os módulos kernel do VirtualBox não correspondem a esta versão do VirtualBox. A instalação do VirtualBox aparentemente falhou. Pode corrigir isto ao executar <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Certifique-se que não mistura as versões OSE e a versão PUEL do VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Os módulos kernel do VirtualBox não correspondem a esta versão do VirtualBox. A instalação do VirtualBox aparentemente falhou. Pode corrigir isto ao executar <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Certifique-se que não mistura as versões OSE e a versão PUEL do VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Este erro significa que o controlador kernel não conseguiu alocar memória suficiente ou que falhou alfuma operação de mapeação.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8745,6 +8745,10 @@
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
index d989599..bebb589 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
@@ -108,12 +108,12 @@
         <translation>Sugerimos que o VirtualBox seja reinstalado.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Este erro significa que o driver do kernel não pôde alocar memória suficiente, ou que uma operação de mapeamento de memória falhou.<br/><br/>Existem problemas conhecidos com o kernel Linux2.6.29. Se você está utilizando esta versão de kernel, edite o arquivo /usr/src/vboxdrv-*/Makefile e habilite a opção <i>VBOX_USE_INSERT_PAGE = 1</i>. Em seguida, recompile o módulo do kernel executando o comando<br/><br/>  <fon [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Este erro significa que o driver do kernel não pôde alocar memória suficiente, ou que uma operação de mapeamento de memória falhou.<br/><br/>Existem problemas conhecidos com o kernel Linux2.6.29. Se você está utilizando esta versão de kernel, edite o arquivo /usr/src/vboxdrv-*/Makefile e habilite a opção <i>VBOX_USE_INSERT_PAGE = 1</i>. Em seguida, recompile o módulo do kernel executando o comando<br/><br/>  <fon [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">O driver de kernel para Linux do VirtualBox (vboxdrv) não está carregado, ou existe um problema de permissões no arquivo /dev/vboxdrv. Compile novamente o módulo de kernel executando o comando<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>como root. Usuários de Ubuntu, Fedora ou Mandriva devem instalar o pacote DKMS primeiro. Este pacote monitora as mudanças no kernel Linux e recompila o m [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">O driver de kernel para Linux do VirtualBox (vboxdrv) não está carregado, ou existe um problema de permissões no arquivo /dev/vboxdrv. Compile novamente o módulo de kernel executando o comando<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>como root. Usuários de Ubuntu, Fedora ou Mandriva devem instalar o pacote DKMS primeiro. Este pacote monitora as mudanças no kernel Linux e recompil [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -140,16 +140,16 @@
         <translation>Os módulos de kernel para o VirtualBox que estão carregados não servem para esta versão do VirtualBox. Aparentemente, a instalação do VirtualBox não foi completada corretamente. É recomendado que o VirtualBox seja completamente removido e instalado novamente.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Os módulos de kernel para o VirtualBox que estão carregados não servem para esta versão do VirtualBox. Aparentemente, a instalação do VirtualBox não foi completada corretamente. Execute <br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>para resolver este problema. Certifique-se de que não esteja misturando componentes da versão OSE com a versão PUEL do VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Os módulos de kernel para o VirtualBox que estão carregados não servem para esta versão do VirtualBox. Aparentemente, a instalação do VirtualBox não foi completada corretamente. Execute <br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>para resolver este problema. Certifique-se de que não esteja misturando componentes da versão OSE com a versão PUEL do VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Este erro indica que o driver de kernel não pode alocar memória suficiente ou que uma operação de mapeamento falhou.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>O driver de kernel do VirtualBox (vboxdrv) não está carregado ou existe um problema de permissão no dispositivo /dev/vboxdrv. Reinstale o módulo de kernel executando o comando<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>como  root. Se a sua distribuição dispuser do serviço DKMS, instale-o antes. O serviço DKMS detecta mudanças no kernel do Linux e recompila o módulo de kernel  'vboxdrv' se nec [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>O driver de kernel do VirtualBox (vboxdrv) não está carregado ou existe um problema de permissão no dispositivo /dev/vboxdrv. Reinstale o módulo de kernel executando o comando<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>como  root. Se a sua distribuição dispuser do serviço DKMS, instale-o antes. O serviço DKMS detecta mudanças no kernel do Linux e recompila o módulo de kernel  'vboxdrv' s [...]
     </message>
 </context>
 <context>
@@ -11037,6 +11037,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation>Proxy não encontrado</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
index 833d92f..5c3bf65 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
@@ -116,8 +116,8 @@
         <translation>Reinstalarea VirtualBox ar putea ajuta.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Fie Driverul de nucleu Linux al VirtualBox (vboxdrv) nu este încărcat fie există o problemă cu permisiunile pe /dev/vboxdrv. Vă rugăm reinstalați modulul kernel executând <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> ca root. Utilizatorii de Ubuntu, Fedora sau Mandriva ar trebui să instaleze pachetul DKMS mai întâi. Acest pachet urmărește schimbările nucleului și recompilează modulul vbo [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Fie Driverul de nucleu Linux al VirtualBox (vboxdrv) nu este încărcat fie există o problemă cu permisiunile pe /dev/vboxdrv. Vă rugăm reinstalați modulul kernel executând <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> ca root. Utilizatorii de Ubuntu, Fedora sau Mandriva ar trebui să instaleze pachetul DKMS mai întâi. Acest pachet urmărește schimbările nucleului și recompilează modulu [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -144,7 +144,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -152,7 +152,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8537,6 +8537,10 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
index 42f111c..3f736f5 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
@@ -67,12 +67,12 @@
         <translation>Попробуйте выполнить повторную установку приложения VirtualBox.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Данная ошибка означает, что либо драйвер ядра не смог выделить достаточное количество памяти, либо операция выделения памяти завершилась неудачно.<br/><br/>Подобные проблемы присутствуют в ядре Linux 2.6.29. Если Вы используете ядро данной версии, пожалуйста отредактируйте /usr/src/vboxdrv-*/Makefile, добавив <i>VBOX_USE_INSERT_PAGE = 1</i>. После этого пересоберите ядро запуском<br/><br/>  <font color=blue>&a [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Данная ошибка означает, что либо драйвер ядра не смог выделить достаточное количество памяти, либо операция выделения памяти завершилась неудачно.<br/><br/>Подобные проблемы присутствуют в ядре Linux 2.6.29. Если Вы используете ядро данной версии, пожалуйста отредактируйте /usr/src/vboxdrv-*/Makefile, добавив <i>VBOX_USE_INSERT_PAGE = 1</i>. После этого пересоберите ядро запуском<br/><br/>  <font color=blue>&a [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Драйвер ядра VirtualBox ОС Linux (vboxdrv) вероятно не загружен, либо присутствуют проблемы с правами доступа к /dev/vboxdrv. Переконфигурируйте модуль ядра запуском<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>от имени администратора. Пользователям Ubuntu, Fedora или Mandriva следует сперва установить пакет DKMS. Этот пакет отслеживает изменения ядра Linux и пересобирает модуль ядра vbox [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Драйвер ядра VirtualBox ОС Linux (vboxdrv) вероятно не загружен, либо присутствуют проблемы с правами доступа к /dev/vboxdrv. Переконфигурируйте модуль ядра запуском<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>от имени администратора. Пользователям Ubuntu, Fedora или Mandriva следует сперва установить пакет DKMS. Этот пакет отслеживает изменения ядра Linux и пересобирает модуль ядра [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -99,16 +99,16 @@
         <translation>Модуль ядра VirtualBox не совместим с текущей версией приложения. Возможно установка VirtualBox не была завершена или прошла некорректно. Попробуйте полностью удалить VirtualBox и установить заново.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Модуль ядра VirtualBox не совместим с текущей версией приложения. Возможно установка VirtualBox не была завершена или прошла некорректно. Запуск<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>должен исправить данную проблему. Убедитесь в том, что не используете платную (PUEL) и бесплатную (OSE) версии VirtualBox одновременно.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Модуль ядра VirtualBox не совместим с текущей версией приложения. Возможно установка VirtualBox не была завершена или прошла некорректно. Запуск<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>должен исправить данную проблему. Убедитесь в том, что не используете платную (PUEL) и бесплатную (OSE) версии VirtualBox одновременно.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Данная ошибка означает, что либо драйвер ядра не смог выделить достаточное количество памяти, либо некая операция с памятью неудачно завершена.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Драйвер ядра VirtualBox (vboxdrv) не загружен, либо присутствует проблема с доступом к /dev/vboxdrv. Пожалуйста переустановите драйвер, выполнив <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> от имени администратора. Учтите, что сперва Вам необходимо установить пакет DKMS, если он доступен Вашему дистрибутиву операционной системы. Этот пакет автоматически отслеживает изменения драйверов Linux и обновит д [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Драйвер ядра VirtualBox (vboxdrv) не загружен, либо присутствует проблема с доступом к /dev/vboxdrv. Пожалуйста переустановите драйвер, выполнив <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> от имени администратора. Учтите, что сперва Вам необходимо установить пакет DKMS, если он доступен Вашему дистрибутиву операционной системы. Этот пакет автоматически отслеживает изменения драйверов Linux и обно [...]
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -10251,6 +10251,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
index 8e93126..9c26f0d 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
@@ -104,12 +104,12 @@
         <translation>Možno pomôže preinštalovanie VirtualBoxu.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Táto chyba znamená, že kernelový ovládač buď nebol schopný alokovať dostatok pamäte alebo že nejaká operácia mapovania zlyhala.<br/><br/>Sú známe problémy s Linuxom 2.6.29. Ak používate toto jadro, prosím upravte /usr/src/vboxdrv-*/Makefile a povoľte <i>VBOX_USE_INSERT_PAGE = 1</i>. Potom rekompilujte kernelový modul spustením <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>&lt [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Táto chyba znamená, že kernelový ovládač buď nebol schopný alokovať dostatok pamäte alebo že nejaká operácia mapovania zlyhala.<br/><br/>Sú známe problémy s Linuxom 2.6.29. Ak používate toto jadro, prosím upravte /usr/src/vboxdrv-*/Makefile a povoľte <i>VBOX_USE_INSERT_PAGE = 1</i>. Potom rekompilujte kernelový modul spustením <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&g [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Ovládač Linuxového jadra pre VirtualBox (vboxdrv) buď nie je načítaný alebo je problém s právami na /dev/vboxdrv. Prosím, preinštalujte modul jadra spustením<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>ako užívateľ root. Užívatelia Ubuntu, Fedory alebo Mandrivy by mali najprv nainštalovať balíček DKMS. Tento balíček sleduje zmeny Linuxového jadra a prekompiluje modul jadra vboxdrv, ak je [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Ovládač Linuxového jadra pre VirtualBox (vboxdrv) buď nie je načítaný alebo je problém s právami na /dev/vboxdrv. Prosím, preinštalujte modul jadra spustením<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>ako užívateľ root. Užívatelia Ubuntu, Fedory alebo Mandrivy by mali najprv nainštalovať balíček DKMS. Tento balíček sleduje zmeny Linuxového jadra a prekompiluje modul jadra vboxdrv,  [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -136,15 +136,15 @@
         <translation>Jaderné moduly VirtualBoxu nezodpovedajú tejto verzii VirtualBoxu. Inštalácia VirtualBoxu bola podľa všetkého neúspešná. Skúste VirtualBoxu odinštalovať a znovu nainštalovať.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Moduly jadra VirtualBoxu nekorešpondujú s touto verziou VirtualBoxu. Inštalácia VirtualBoxu pravdepodobne nebola úspešná. Spustenie<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>by to malo napraviť. Uistite sa, že nemiešate OSE verziu a PUEL verziu VirtualBoxu.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Moduly jadra VirtualBoxu nekorešpondujú s touto verziou VirtualBoxu. Inštalácia VirtualBoxu pravdepodobne nebola úspešná. Spustenie<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>by to malo napraviť. Uistite sa, že nemiešate OSE verziu a PUEL verziu VirtualBoxu.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Táto chyba znamená, že ovládač jadra nebol schopný alokovať dostatok pamäte alebo zlyhala operácia mapovania.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8499,6 +8499,10 @@
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
index c4603cd..c66a484 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
@@ -67,12 +67,12 @@
         <translation>Поново инсталирати VirtualBox.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Грешка пошто драјвер језгра није могао да допуни меморију или је имало грешке у мапирању.<br/><br/>Ово су познате грешке са Linux 2.6.29. Ако користите то језгро, уредити /usr/src/vboxdrv-*/Makefile и упалити <i>VBOX_USE_INSERT_PAGE = 1</i>. После тога, поново компулујте језгро са <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>као root.</translation>
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Грешка пошто драјвер језгра није могао да допуни меморију или је имало грешке у мапирању.<br/><br/>Ово су познате грешке са Linux 2.6.29. Ако користите то језгро, уредити /usr/src/vboxdrv-*/Makefile и упалити <i>VBOX_USE_INSERT_PAGE = 1</i>. После тога, поново компулујте језгро са <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>као root.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">VirtualBox Linux kernel driver (vboxdrv) или није учитан или нема довољно права са /dev/vboxdrv. Поново инсталирати модул са<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>као root. Корисници Ubuntu, Fedora или Mandriva требају да прво инсталирају DKMS пакет. Пакет компилује vboxdrv ако потребно према промене језгра.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">VirtualBox Linux kernel driver (vboxdrv) или није учитан или нема довољно права са /dev/vboxdrv. Поново инсталирати модул са<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>као root. Корисници Ubuntu, Fedora или Mandriva требају да прво инсталирају DKMS пакет. Пакет компилује vboxdrv ако потребно према промене језгра.</translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -95,8 +95,8 @@
         <translation>Кернел VirtualBox-а није исти као у овој верзији. Можда је инсталација програма погрешна. Може помоћи да се уклони и поново инсталира програм.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Кернел VirtualBox-а није исти као у овој верзији. Можда је инсталација програма погрешна. Покретање<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>требало би да поправи проблем. Проверите да не промешате верзију OSE и PUEL „VirtualBox-а“.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Кернел VirtualBox-а није исти као у овој верзији. Можда је инсталација програма погрешна. Покретање<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>требало би да поправи проблем. Проверите да не промешате верзију OSE и PUEL „VirtualBox-а“.</translation>
     </message>
     <message>
         <source>Kernel driver not accessible</source>
@@ -107,7 +107,7 @@
         <translation>Грешка знаћи да или кернел ноије успео да алоцира довољно меморије или да је нека мапажа погрешна.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -9492,6 +9492,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
index ef14c42..b8d3b12 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
@@ -82,12 +82,12 @@
         <translation>Det kan hjälpa att installera om VirtualBox.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Detta fel betyder att kärndrivrutinen antingen inte kunde allokera tillräckligt mycket minne eller att någon mappningsåtgärd misslyckades.<br/><br/>Det finns kända problem med Linux 2.6.29. Om du kör en sådan kärna så redigera /usr/src/vboxdrv-*/Makefile och aktivera <i>VBOX_USE_INSERT_PAGE = 1</i>. Kompilera sedan om kärnmodulen genom att köra<br/><br/>  <font color=blue>"/sbin/vboxconfig"</font& [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Detta fel betyder att kärndrivrutinen antingen inte kunde allokera tillräckligt mycket minne eller att någon mappningsåtgärd misslyckades.<br/><br/>Det finns kända problem med Linux 2.6.29. Om du kör en sådan kärna så redigera /usr/src/vboxdrv-*/Makefile och aktivera <i>VBOX_USE_INSERT_PAGE = 1</i>. Kompilera sedan om kärnmodulen genom att köra<br/><br/>  <font color=blue>"/sbin/rcvboxdrv setup"</ [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Linux-kärndrivrutinen för VirtualBox (vboxdrv) är antingen inte inläst eller så finns det ett behörighetsproblem med /dev/vboxdrv. Konfigurera om kärnmodulen genom att köra<br/><br/>  <font color=blue>"/sbin/vboxconfig"</font><br/><br/> som root. Användare med Ubuntu, Fedora eller Mandriva bör installera DKMS-paketett först. Detta paket håller koll på ändringar i Linux-kärnan och kompilerar om kärnmodulen  [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Linux-kärndrivrutinen för VirtualBox (vboxdrv) är antingen inte inläst eller så finns det ett behörighetsproblem med /dev/vboxdrv. Konfigurera om kärnmodulen genom att köra<br/><br/>  <font color=blue>"/sbin/rcvboxdrv setup"</font><br/><br/> som root. Användare med Ubuntu, Fedora eller Mandriva bör installera DKMS-paketett först. Detta paket håller koll på ändringar i Linux-kärnan och kompilerar om kärnmod [...]
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -114,16 +114,16 @@
         <translation>VirtualBox kärnmoduler passar inte denna version av VirtualBox. Installationen av VirtualBox lyckades inte. Det kan hjälpa att helt avinstallera och sedan återinstallera VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>VirtualBox kärnmoduler passar inte denna version av VirtualBox. Installationen av VirtualBox lyckades inte. Kör kommandot<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>vilket bör rätta till problemet. Försäkra dig om att du inte blandar OSE-versionen och PUEL-versionen av VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>VirtualBox kärnmoduler passar inte denna version av VirtualBox. Installationen av VirtualBox lyckades inte. Kör kommandot<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>vilket bör rätta till problemet. Försäkra dig om att du inte blandar OSE-versionen och PUEL-versionen av VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Detta fel betyder att kärndrivrutinen inte kunde allokera tillräckligt mycket minne eller att någon mappningsåtgärd misslyckades.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Linux-kärndrivrutinen för VirtualBox (vboxdrv) är antingen inte inläst eller så finns det ett behörighetsproblem med /dev/vboxdrv. Installera om kärnmodulen genom att köra<br/><br/>  <font color=blue>"/sbin/vboxconfig"</font><br/><br/> som root. Om den finns tillgänglig för din distribution så bör du installera DKMS-paketet först. Detta paket håller koll på ändringar i Linux-kärnan och kompilerar om kärnmodulen vboxdrv om [...]
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Linux-kärndrivrutinen för VirtualBox (vboxdrv) är antingen inte inläst eller så finns det ett behörighetsproblem med /dev/vboxdrv. Installera om kärnmodulen genom att köra<br/><br/>  <font color=blue>"/sbin/rcvboxdrv setup"</font><br/><br/> som root. Om den finns tillgänglig för din distribution så bör du installera DKMS-paketet först. Detta paket håller koll på ändringar i Linux-kärnan och kompilerar om kärnmodulen vboxd [...]
     </message>
 </context>
 <context>
@@ -10561,6 +10561,10 @@ serial ports</comment>
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
index f4f8773..ebcfcd9 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
@@ -132,16 +132,16 @@
         <translation>VirtualBox kernel modülleri VirtualBox'ın bu sürümüyle uyuşmuyor. VirtualBox'ın kurulumu görünüşe göre başarılı olmadı. Lütfen VirtualBox'ı tamamen kaldırmayı ve yeniden yüklemeyi deneyin.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>VirtualBox kernel modülleri VirtualBox'ın bu sürümüyle uyuşmuyor. VirtualBox'ın kurulumu görünüşe göre başarılı olmadı. <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> dosyasını çalıştırmak bunu düzeltebilir. VirtualBox'ın OSE ve PUEL sürümlerini karıştırmadığınızdan emin olun.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>VirtualBox kernel modülleri VirtualBox'ın bu sürümüyle uyuşmuyor. VirtualBox'ın kurulumu görünüşe göre başarılı olmadı. <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> dosyasını çalıştırmak bunu düzeltebilir. VirtualBox'ın OSE ve PUEL sürümlerini karıştırmadığınızdan emin olun.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Bu hata kernel sürücüsünün ya yeterli bellek ayıramadığını ya da bazı planlama işleminin başarısız olduğu anlamına gelir.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>VirtualBox Linux kernel sürücüsü (vboxdrv) ya yüklenemiyor ya da /dev/vboxdrv ile ilgili izin sorunu var. Lütfen root olarak <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> dosyasını çalıştırıp kernel modülünü yeniden yükleyin. Eğer dağıtımınızda mevcutsa, önce DKMS paketini yüklemelisiniz. Bu paket Linux kernel değişikliklerinin izini tutar ve eğer gerekirse vboxdrv kernel modülünü yeniden derler.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>VirtualBox Linux kernel sürücüsü (vboxdrv) ya yüklenemiyor ya da /dev/vboxdrv ile ilgili izin sorunu var. Lütfen root olarak <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/> dosyasını çalıştırıp kernel modülünü yeniden yükleyin. Eğer dağıtımınızda mevcutsa, önce DKMS paketini yüklemelisiniz. Bu paket Linux kernel değişikliklerinin izini tutar ve eğer gerekirse vboxdrv kernel modülünü yeniden derler.</ [...]
     </message>
     <message>
         <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
@@ -4087,27 +4087,27 @@
     </message>
     <message>
         <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Seçildiğinde, VirtualBox ağdan Misafir Eklentilerini indirme ya da güncellemeleri kontrol etme gibi görevler için anamakine proksi ayarlarını otomatik algılamaya çalışacak.</translation>
     </message>
     <message>
         <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Anamakine Proksi Ayarlarını Otomatik &Algıla</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Seçildiğinde, VirtualBox ağdan Misafir Eklentilerini indirme ya da güncellemeleri kontrol etme gibi görevler için doğrudan Internet bağlantısı kullanacak.</translation>
     </message>
     <message>
         <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <translation>Internet'e &Doğrudan Bağlantı</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>Seçildiğinde, VirtualBox ağdan Misafir Eklentilerini indirme ya da güncellemeleri kontrol etme gibi görevler için sağlanan proksi ayarlarını kullanacak.</translation>
     </message>
     <message>
         <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>&Elle Proksi Yapılandırması</translation>
     </message>
 </context>
 <context>
@@ -9371,6 +9371,10 @@
         <source>Proxy not found</source>
         <translation>Proksi bulunamadı</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation>URL sunucuda bulunamadı</translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
index 53e2416..8a2dcae 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
@@ -67,20 +67,20 @@
         <translation>Будь ласка, перевстановіть VirtualBox.</translation>
     </message>
     <message>
-        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/>< [...]
-        <translation type="obsolete">Ця помилка означає, що драйвер ядра не зміг виділити достатньо пам'яті або не вдалось виконати відображення деякої операції.<br/><br/>Це відомі проблеми з версією ядра 2.6.29. Якщо ви запускаєте саме це ядро, будь ласка, редагуйте  /usr/src/vboxdrv-*/Makefile і ввімкніть <i>VBOX_USE_INSERT_PAGE = 1</i>. Після чого, перекомпілюйте модуль ядра, виконавши з-під адміністратора<br/><br/>  <font color=blue>&apo [...]
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/&gt [...]
+        <translation type="obsolete">Ця помилка означає, що драйвер ядра не зміг виділити достатньо пам'яті або не вдалось виконати відображення деякої операції.<br/><br/>Це відомі проблеми з версією ядра 2.6.29. Якщо ви запускаєте саме це ядро, будь ласка, редагуйте  /usr/src/vboxdrv-*/Makefile і ввімкніть <i>VBOX_USE_INSERT_PAGE = 1</i>. Після чого, перекомпілюйте модуль ядра, виконавши з-під адміністратора<br/><br/>  <font color=blue>&apo [...]
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">Драйвер ядра VirtualBox (vboxdrv) або не завантажений, або має проблеми з правами доступу /dev/vboxdrv. Перевстановіть модуль ядра, виконавши з-під адміністратора<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>. Користувачі Ubuntu, Fedora або Mandriva слід спочатку встановити DKMS. Цей пакунок утримує доріжку змін і перекомпіляцій модуля ядра vboxdrv, якщо це необхідно.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">Драйвер ядра VirtualBox (vboxdrv) або не завантажений, або має проблеми з правами доступу /dev/vboxdrv. Перевстановіть модуль ядра, виконавши з-під адміністратора<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>. Користувачі Ubuntu, Fedora або Mandriva слід спочатку встановити DKMS. Цей пакунок утримує доріжку змін і перекомпіляцій модуля ядра vboxdrv, якщо це необхідно.</translation>
     </message>
     <message>
         <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
         <translation>Модуль ядра VirtualBox не придатний для цієї версії VirtualBox. Напевно, встановлення VirtualBox закінчилось невдало. Вилучення і повторне встановлення може допомогти.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>Модуль ядра VirtualBox не придатний для цієї версії VirtualBox. Напевно, встановлення VirtualBox закінчилось невдало. Здійснення<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>має виправити цю проблему. Переконайтесь, що ви не змішували версію OSE та PUEL.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Модуль ядра VirtualBox не придатний для цієї версії VirtualBox. Напевно, встановлення VirtualBox закінчилось невдало. Здійснення<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>має виправити цю проблему. Переконайтесь, що ви не змішували версію OSE та PUEL.</translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -107,8 +107,8 @@
         <translation>Ця помилка означає, що драйвер ядра не має достатньо пам'яті або помилка певної операції відображення.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>Драйвер ядра VirtualBox для Linux (vboxdrv) або не завантажено, або проблема з доступом до /dev/vboxdrv. Перевстановіть модуль ядра, виконавши<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>з-під адміністратора, якщо це можливо у вашому дистрибутиві, споачтку слід установити пакунок DKMS. Цей пакунок слідкує за змінами у ядрі й перезбирує модуль ядра vboxdrv, якщо в цьому є потреба.</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>Драйвер ядра VirtualBox для Linux (vboxdrv) або не завантажено, або проблема з доступом до /dev/vboxdrv. Перевстановіть модуль ядра, виконавши<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>з-під адміністратора, якщо це можливо у вашому дистрибутиві, споачтку слід установити пакунок DKMS. Цей пакунок слідкує за змінами у ядрі й перезбирує модуль ядра vboxdrv, якщо в цьому є потреба.</translation>
     </message>
 </context>
 <context>
@@ -9754,6 +9754,10 @@ p, li { white-space: pre-wrap; }
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
index f6cab19..d4aaeeb 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
@@ -76,7 +76,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -84,7 +84,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5428,6 +5428,10 @@
         <source>Proxy not found</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
index 34dfde1..08260c3 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
@@ -52,8 +52,8 @@
         <translation>重新安装VirtualBox可能解决该问题。</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation type="obsolete">VirtualBox Linux 内核驱动程序 (vboxdrv) 没有加载,或 /dev/vboxdrv 有权限问题。请以 root 权限执行<br/><br/><font color=blue>“/sbin/vboxconfig”</font><br/><br/>,以便重新安装核心模块。Ubuntu、Fedora 或 Mandriva 的用户应该首先安装 DKMS 软件包。此程序包跟踪 Linux 内核的更改,并在必要时重新编译 vboxdrv 内核模块。</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="obsolete">VirtualBox Linux 内核驱动程序 (vboxdrv) 没有加载,或 /dev/vboxdrv 有权限问题。请以 root 权限执行<br/><br/><font color=blue>“/sbin/rcvboxdrv setup”</font><br/><br/>,以便重新安装核心模块。Ubuntu、Fedora 或 Mandriva 的用户应该首先安装 DKMS 软件包。此程序包跟踪 Linux 内核的更改,并在必要时重新编译 vboxdrv 内核模块。</translation>
     </message>
     <message>
         <source>Make sure the kernel module has been loaded successfully.</source>
@@ -80,16 +80,16 @@
         <translation>现有的内核模块与当前版本的VirtualBox不匹配。因此导致安装失败,请试着完全卸载VirtualBox后,再重新安装一次.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>现有的内核模块与当前版本的VirtualBox不匹配。因此导致安装失败。可尝试执行 <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>以修复该问题。并确认你没有混合OSE和PUEL版本的VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>现有的内核模块与当前版本的VirtualBox不匹配。因此导致安装失败。可尝试执行 <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>以修复该问题。并确认你没有混合OSE和PUEL版本的VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>该错误意味着当前的内核驱动模块无法分配足够的内存或某些映射操作失败.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>VirtualBox Linux 内核驱动程序 (vboxdrv) 没有加载,或 /dev/vboxdrv 有权限问题。请以 root 权限执行<br/><br/><font color=blue>“/sbin/vboxconfig”</font><br/><br/>,以便重新安装内核模块。如果你所用的发行版bs有DKMS软件包,你应该首先安装之。此程序包跟踪 Linux 内核的更改,并在必要时重新编译 vboxdrv 内核模块。</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>VirtualBox Linux 内核驱动程序 (vboxdrv) 没有加载,或 /dev/vboxdrv 有权限问题。请以 root 权限执行<br/><br/><font color=blue>“/sbin/rcvboxdrv setup”</font><br/><br/>,以便重新安装内核模块。如果你所用的发行版bs有DKMS软件包,你应该首先安装之。此程序包跟踪 Linux 内核的更改,并在必要时重新编译 vboxdrv 内核模块。</translation>
     </message>
 </context>
 <context>
@@ -4146,27 +4146,27 @@
     </message>
     <message>
         <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>选中时,VirtualBox 将使用自动检测到的主机的代理设置连接网络,如从网络下载增强功能包,或检查更新。</translation>
     </message>
     <message>
         <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>自动检测主机代理设置(&A)</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>选中时,VirtualBox 将直接连接网络,如从网络下载增强功能包,或检查更新。</translation>
     </message>
     <message>
         <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <translation>直接连接互联网(&D)</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>选中时,VirtualBox 将使用提供的代理设置连接网络,如从网络下载增强功能包,或检查更新。</translation>
     </message>
     <message>
         <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>手动配置代理(&M)</translation>
     </message>
 </context>
 <context>
@@ -8676,11 +8676,11 @@
     </message>
     <message>
         <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>当前端口转发规则无效。主机或虚拟机地址应正确设置或留空。</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>当前端口转发规则无效。虚拟机地址不能留空。</translation>
     </message>
 </context>
 <context>
@@ -8866,22 +8866,26 @@
     <message>
         <source>%1: %2</source>
         <comment>Context description: Error description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: %2</translation>
     </message>
     <message>
         <source>Unable to initialize HTTP library</source>
-        <translation type="unfinished"></translation>
+        <translation>未能初始化 HTTP 库</translation>
     </message>
     <message>
         <source>Connection refused</source>
-        <translation type="unfinished"></translation>
+        <translation>连接遭拒</translation>
     </message>
     <message>
         <source>Content moved</source>
-        <translation type="unfinished"></translation>
+        <translation>内容已移走</translation>
     </message>
     <message>
         <source>Proxy not found</source>
+        <translation>未发现代理</translation>
+    </message>
+    <message>
+        <source>Url not found on the server</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -8889,15 +8893,15 @@
     <name>UINetworkReplyPrivateThread</name>
     <message>
         <source>During proxy configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>代理配置期间</translation>
     </message>
     <message>
         <source>During certificate downloading</source>
-        <translation type="unfinished"></translation>
+        <translation>证书下载期间</translation>
     </message>
     <message>
         <source>During network request</source>
-        <translation type="unfinished"></translation>
+        <translation>网络请求期间</translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
index fef8488..1f7eaa0 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
@@ -76,16 +76,16 @@
         <translation>VirtualBox 核心模組不符合這個 VirtualBox 的版本。 顯然 VirtualBox 的安裝不成功。 請嘗試完整解除安裝並重新安裝 VirtualBox。</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation>VirtualBox 核心模組不符合這個 VirtualBox 的版本。 顯然 VirtualBox 的安裝不成功。 執行<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>應能修正問題。 請確認您未混合 VirtualBox 的 OSE 版本與 PUEL 版本。</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>VirtualBox 核心模組不符合這個 VirtualBox 的版本。 顯然 VirtualBox 的安裝不成功。 執行<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>應能修正問題。 請確認您未混合 VirtualBox 的 OSE 版本與 PUEL 版本。</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>這個錯誤代表核心驅動程式無法配置足夠的記憶體或某些對應操作失敗。</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>未載入 VirtualBox Linux 核心驅動程式 (vboxdrv) 或是 /dev/vboxdrv 的權限問題。 請以 root 執行 <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>來重新安裝核心模組。 如果在您的發行中可以使用,您應先安裝 DKMS 套件。 這個套件保留 Linux 核心變更的追蹤並在需要時重新編譯 vboxdrv 核心模組。</translation>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation>未載入 VirtualBox Linux 核心驅動程式 (vboxdrv) 或是 /dev/vboxdrv 的權限問題。 請以 root 執行 <br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>來重新安裝核心模組。 如果在您的發行中可以使用,您應先安裝 DKMS 套件。 這個套件保留 Linux 核心變更的追蹤並在需要時重新編譯 vboxdrv 核心模組。</translation>
     </message>
 </context>
 <context>
@@ -2228,14 +2228,6 @@
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="obsolete">勾選時,VirtualBox 將使用提供的 Proxy 設定工作,如從網路下載 Guest Additions 或檢查更新。</translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="obsolete">啟用 Proxy(&E)</translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation>主機(&S):</translation>
     </message>
@@ -2261,27 +2253,27 @@
     </message>
     <message>
         <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>選擇時,VirtualBox 將嘗試自動偵測主機 Proxy 設定來工作,如從網路下載 Guest Additions 或檢查更新。</translation>
     </message>
     <message>
         <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>自動偵測主機 Proxy 設定(&A)</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>選擇時,VirtualBox 將直接使用 Internet 連線來工作,如從網路下載 Guest Additions 或檢查更新。</translation>
     </message>
     <message>
         <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <translation>直接連線到 Internet(&D)</translation>
     </message>
     <message>
         <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <translation>選擇時,VirtualBox 將使用提供的 Proxy 設定來工作,如從網路下載 Guest Additions 或檢查更新。</translation>
     </message>
     <message>
         <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>手動 Proxy 組態(&M)</translation>
     </message>
 </context>
 <context>
@@ -5040,7 +5032,7 @@
         <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment>
         <translation>
-            <numerusform><p>%n 以下虛擬機器目前在儲存的狀態: <b>%1</b></p><p>如果您繼續匯出機器的執行階段狀態將捨棄。 其它機器將無法變更。</p></numerusform>
+            <numerusform><p>%n 以下虛擬機器目前在儲存的狀態: <b>%1</b></p><p>如果您繼續,匯出機器的執行階段狀態將捨棄。 其它機器將不會變更。</p></numerusform>
         </translation>
     </message>
     <message>
@@ -5436,6 +5428,10 @@
         <source>Proxy not found</source>
         <translation>找不到 Proxy</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation>在伺服器找不到 Url</translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_el.ts b/src/VBox/Frontends/VirtualBox/nls/qt_el.ts
index bb1c5dc..a89f24e 100644
--- a/src/VBox/Frontends/VirtualBox/nls/qt_el.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/qt_el.ts
@@ -5,73 +5,73 @@
     <name>MAC_APPLICATION_MENU</name>
     <message>
         <source>Services</source>
-        <translation type="unfinished"></translation>
+        <translation>Υπηρεσίες</translation>
     </message>
     <message>
         <source>Hide %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Απόκρυψη %1</translation>
     </message>
     <message>
         <source>Hide Others</source>
-        <translation type="unfinished"></translation>
+        <translation>Απόκρυψη άλλων</translation>
     </message>
     <message>
         <source>Show All</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση όλων</translation>
     </message>
     <message>
         <source>Preferences...</source>
-        <translation type="unfinished"></translation>
+        <translation>Προτιμήσεις...</translation>
     </message>
     <message>
         <source>Quit %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Τερματισμός %1</translation>
     </message>
     <message>
         <source>About %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Πληροφορίες για το %1</translation>
     </message>
 </context>
 <context>
     <name>AudioOutput</name>
     <message>
         <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source>
-        <translation type="unfinished"></translation>
+        <translation><html>Η συσκευή αναπαραγωγής ήχου <b>%1</b> δεν δουλεύει.<br/>Επαναφορά σε <b>%2</b>.</html></translation>
     </message>
     <message>
         <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source>
-        <translation type="unfinished"></translation>
+        <translation><html>Αλλαγή στη συσκευή αναπαραγωγής ήχου <b>%1</b><br/>η οποία είναι διαθέσιμη και έχει μεγαλύτερη προτεραιότητα.</html></translation>
     </message>
     <message>
         <source>Revert back to device '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά στη συσκευή '%1'</translation>
     </message>
 </context>
 <context>
     <name>Phonon::</name>
     <message>
         <source>Notifications</source>
-        <translation type="unfinished"></translation>
+        <translation>Γνωστοποιήσεις</translation>
     </message>
     <message>
         <source>Music</source>
-        <translation type="unfinished"></translation>
+        <translation>Μουσική</translation>
     </message>
     <message>
         <source>Video</source>
-        <translation type="unfinished"></translation>
+        <translation>Βίντεο</translation>
     </message>
     <message>
         <source>Communication</source>
-        <translation type="unfinished"></translation>
+        <translation>Επικοινωνία</translation>
     </message>
     <message>
         <source>Games</source>
-        <translation type="unfinished"></translation>
+        <translation>Παιχνίδια</translation>
     </message>
     <message>
         <source>Accessibility</source>
-        <translation type="unfinished"></translation>
+        <translation>Βοηθήματα</translation>
     </message>
 </context>
 <context>
@@ -79,12 +79,14 @@
     <message>
         <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
           Some video features have been disabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προειδοποίηση: Δεν έχετε το πακέτο gstreamer0.10-plugins-good εγκατεστημένο.
+          Κάποιες εφαρμογές βίντεο θα είναι απενεργοποιημένες.</translation>
     </message>
     <message>
         <source>Warning: You do not seem to have the base GStreamer plugins installed.
           All audio and video support has been disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Προειδοποίηση: Δεν έχετε τη βάση gstreamer plugins εγκατεστημένη.
+          Όλες οι εφαρμογές ήχου και βίντεο έχουν απενεργοποιηθεί</translation>
     </message>
 </context>
 <context>
@@ -94,321 +96,325 @@
 
 Check your Gstreamer installation and make sure you 
 have libgstreamer-plugins-base installed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν είναι δυνατή η αναπαραγωγή. 
+
+Ελέξτε την εγκατάσταση του Gstreamer και σιγουρευτείτε οτι
+έχετε εγκαταστήσει το  libgstreamer-plugins-base.</translation>
     </message>
     <message numerus="yes">
         <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Ένα απαιτούμενο codec λείπει. Χρειάζεται να εγκαταστήσετε το ακόλουθο codec για να παίξετε το περιεχόμενο: %0</numerusform>
+            <numerusform>Ένα απαιτούμενο codec λείπει. Χρειάζεται να εγκαταστήσετε τα ακόλουθα codec για να παίξετε το περιεχόμενο: %0</numerusform>
         </translation>
     </message>
     <message>
         <source>Could not open media source.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατό το άνοιγμα πηγής μέσου.</translation>
     </message>
     <message>
         <source>Invalid source type.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μή έγκυρος τύπος πηγής.</translation>
     </message>
     <message>
         <source>Could not locate media source.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατός ο εντοπισμός πηγής μέσου.</translation>
     </message>
     <message>
         <source>Could not open audio device. The device is already in use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατό το άνοιγμα της συσκευής ήχου. Η συσκευή ήδη χρησιμοποιείται.</translation>
     </message>
     <message>
         <source>Could not decode media source.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η αποκωδικοποίηση της πηγής μέσου.</translation>
     </message>
 </context>
 <context>
     <name>Phonon::VolumeSlider</name>
     <message>
         <source>Volume: %1%</source>
-        <translation type="unfinished"></translation>
+        <translation>Ένταση: %1%</translation>
     </message>
     <message>
         <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
-        <translation type="unfinished"></translation>
+        <translation>Χρησιμοποιήστε τον ολισθητή για να ρυθμίσετε την ένταση. Η πιο αριστερή θέση είναι 0%, η πιο δεξιά είναι %1</translation>
     </message>
 </context>
 <context>
     <name>Q3Accel</name>
     <message>
         <source>%1, %2 not defined</source>
-        <translation type="unfinished">%1, %2 δεν έχει καθοριστεί</translation>
+        <translation>%1, %2 δεν έχει καθοριστεί</translation>
     </message>
     <message>
         <source>Ambiguous %1 not handled</source>
-        <translation type="unfinished">Αμφίβολο %1 δεν μπορει να χειριστεί</translation>
+        <translation>Αμφίβολο %1 δεν μπορεί να χειριστεί</translation>
     </message>
 </context>
 <context>
     <name>Q3DataTable</name>
     <message>
         <source>True</source>
-        <translation type="unfinished">Σωστό</translation>
+        <translation>Σωστό</translation>
     </message>
     <message>
         <source>False</source>
-        <translation type="unfinished">Λάθος</translation>
+        <translation>Λάθος</translation>
     </message>
     <message>
         <source>Insert</source>
-        <translation type="unfinished">Εισαγωγή</translation>
+        <translation>Εισαγωγή</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished">Ανανέωση</translation>
+        <translation>Ανανέωση</translation>
     </message>
     <message>
         <source>Delete</source>
-        <translation type="unfinished">Διαγραφή</translation>
+        <translation>Διαγραφή</translation>
     </message>
 </context>
 <context>
     <name>Q3FileDialog</name>
     <message>
         <source>Copy or Move a File</source>
-        <translation type="unfinished">Αντιγραφή ή μετακίνηση αρχείου</translation>
+        <translation>Αντιγραφή ή Μετακίνηση αρχείου</translation>
     </message>
     <message>
         <source>Read: %1</source>
-        <translation type="unfinished">Ανάγνωση : %1</translation>
+        <translation>Ανάγνωση : %1</translation>
     </message>
     <message>
         <source>Write: %1</source>
-        <translation type="unfinished">Εγγραφή : %1</translation>
+        <translation>Εγγραφή : %1</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Ακύρωση</translation>
+        <translation>Ακύρωση</translation>
     </message>
     <message>
         <source>All Files (*)</source>
-        <translation type="unfinished">Όλα τα αρχεία (*)</translation>
+        <translation>Όλα τα Αρχεία (*)</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Size</source>
-        <translation type="unfinished">Μέγεθος</translation>
+        <translation>Μέγεθος</translation>
     </message>
     <message>
         <source>Type</source>
-        <translation type="unfinished">Τύπος</translation>
+        <translation>Τύπος</translation>
     </message>
     <message>
         <source>Date</source>
-        <translation type="unfinished">Ημερομηνία</translation>
+        <translation>Ημερομηνία</translation>
     </message>
     <message>
         <source>Attributes</source>
-        <translation type="unfinished">Ιδιότητες</translation>
+        <translation>Ιδιότητες</translation>
     </message>
     <message>
         <source>&OK</source>
-        <translation type="unfinished">&Εντάξει</translation>
+        <translation>&Εντάξει</translation>
     </message>
     <message>
         <source>Look &in:</source>
-        <translation type="unfinished">Ψάξε &in :</translation>
+        <translation>Ψάξε &in :</translation>
     </message>
     <message>
         <source>File &name:</source>
-        <translation type="unfinished">Όνομα αρχεiου &Όνομα :</translation>
+        <translation>&Όνομα αρχεiου:</translation>
     </message>
     <message>
         <source>File &type:</source>
-        <translation type="unfinished">Τύπος αρχείου &Τύπος:</translation>
+        <translation>&Τύπος αρχείου:</translation>
     </message>
     <message>
         <source>Back</source>
-        <translation type="unfinished">Πίσω</translation>
+        <translation>Πίσω</translation>
     </message>
     <message>
         <source>One directory up</source>
-        <translation type="unfinished">Επάνω</translation>
+        <translation>Επάνω</translation>
     </message>
     <message>
         <source>Create New Folder</source>
-        <translation type="unfinished">Δημιουργία νέου φακέλου</translation>
+        <translation>Δημιουργία Νέου Φακέλου</translation>
     </message>
     <message>
         <source>List View</source>
-        <translation type="unfinished">Προβολή Λίστας</translation>
+        <translation>Προβολή Λίστας</translation>
     </message>
     <message>
         <source>Detail View</source>
-        <translation type="unfinished">Προβολή με λεπτομέρειες</translation>
+        <translation>Προβολή με Λεπτομέρειες</translation>
     </message>
     <message>
         <source>Preview File Info</source>
-        <translation type="unfinished">Προεπισκόπηση πληροφοριών αρχείου</translation>
+        <translation>Προεπισκόπηση Πληροφοριών Αρχείου</translation>
     </message>
     <message>
         <source>Preview File Contents</source>
-        <translation type="unfinished">Προεπισκόπηση περιεχομένων αρχείου</translation>
+        <translation>Προεπισκόπηση Περιεχομένων Αρχείου</translation>
     </message>
     <message>
         <source>Read-write</source>
-        <translation type="unfinished">Ανάγνωση-Εγγραφή</translation>
+        <translation>Ανάγνωση-εγγραφή</translation>
     </message>
     <message>
         <source>Read-only</source>
-        <translation type="unfinished">Ανάγνωση μόνο</translation>
+        <translation>Ανάγνωση μόνο</translation>
     </message>
     <message>
         <source>Write-only</source>
-        <translation type="unfinished">Εγγραφή μόνο</translation>
+        <translation>Εγγραφή-μόνο</translation>
     </message>
     <message>
         <source>Inaccessible</source>
-        <translation type="unfinished">Μη προσπελάσιμο</translation>
+        <translation>Απροσπέλαστο</translation>
     </message>
     <message>
         <source>Symlink to File</source>
-        <translation type="unfinished">Σύνδεσμος σε αρχείο</translation>
+        <translation>Σύνδεσμος σε αρχείο</translation>
     </message>
     <message>
         <source>Symlink to Directory</source>
-        <translation type="unfinished">Σύνδεσμος σε κατάλογο</translation>
+        <translation>Σύνδεσμος σε φάκελλο</translation>
     </message>
     <message>
         <source>Symlink to Special</source>
-        <translation type="unfinished">Σύνδεσμος σε ειδικό</translation>
+        <translation>Σύνδεσμος σε ειδικό</translation>
     </message>
     <message>
         <source>File</source>
-        <translation type="unfinished">Αρχείο</translation>
+        <translation>Αρχείο</translation>
     </message>
     <message>
         <source>Dir</source>
-        <translation type="unfinished">Κατάλογος</translation>
+        <translation>Κατάλογος</translation>
     </message>
     <message>
         <source>Special</source>
-        <translation type="unfinished">Ειδικό</translation>
+        <translation>Ειδικό</translation>
     </message>
     <message>
         <source>Open</source>
-        <translation type="unfinished">Άνοιγμα</translation>
+        <translation>Άνοιγμα</translation>
     </message>
     <message>
         <source>Save As</source>
-        <translation type="unfinished">Αποθήκευση ως</translation>
+        <translation>Αποθήκευση ως</translation>
     </message>
     <message>
         <source>&Open</source>
-        <translation type="unfinished">&Άνοιγμα</translation>
+        <translation>&Άνοιγμα</translation>
     </message>
     <message>
         <source>&Save</source>
-        <translation type="unfinished">&Αποθήκευση</translation>
+        <translation>&Αποθήκευση</translation>
     </message>
     <message>
         <source>&Rename</source>
-        <translation type="unfinished">&Μετονομασία</translation>
+        <translation>&Μετονομασία</translation>
     </message>
     <message>
         <source>&Delete</source>
-        <translation type="unfinished">&Διαγραφή</translation>
+        <translation>&Διαγραφή</translation>
     </message>
     <message>
         <source>R&eload</source>
-        <translation type="unfinished">Φ&όρτωμα</translation>
+        <translation>Φ&όρτωμα</translation>
     </message>
     <message>
         <source>Sort by &Name</source>
-        <translation type="unfinished">Ταξινόμηση κατά &Όνομα</translation>
+        <translation>Ταξινόμηση κατά &Όνομα</translation>
     </message>
     <message>
         <source>Sort by &Size</source>
-        <translation type="unfinished">Ταξινόμηση κατά &Μέγεθος</translation>
+        <translation>Ταξινόμηση κατά &Μέγεθος</translation>
     </message>
     <message>
         <source>Sort by &Date</source>
-        <translation type="unfinished">Ταξινόμηση κατά &Ημερομηνία</translation>
+        <translation>Ταξινόμηση κατά &Ημερομηνία</translation>
     </message>
     <message>
         <source>&Unsorted</source>
-        <translation type="unfinished">&Αταξινόμητα</translation>
+        <translation>&Αταξινόμητα</translation>
     </message>
     <message>
         <source>Sort</source>
-        <translation type="unfinished">Ταξινόμηση</translation>
+        <translation>Ταξινόμηση</translation>
     </message>
     <message>
         <source>Show &hidden files</source>
-        <translation type="unfinished">Εμφάνιση &Κρυφών Αρχείων</translation>
+        <translation>Εμφάνιση &Κρυφών Αρχείων</translation>
     </message>
     <message>
         <source>the file</source>
-        <translation type="unfinished">το αρχείο</translation>
+        <translation>το αρχείο</translation>
     </message>
     <message>
         <source>the directory</source>
-        <translation type="unfinished">ο φάκελος</translation>
+        <translation>ο φάκελος</translation>
     </message>
     <message>
         <source>the symlink</source>
-        <translation type="unfinished">ο συνδεσμος</translation>
+        <translation>ο σύνδεσμος</translation>
     </message>
     <message>
         <source>Delete %1</source>
-        <translation type="unfinished">Διαγραφή %1</translation>
+        <translation>Διαγραφή %1</translation>
     </message>
     <message>
         <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source>
-        <translation type="unfinished"><qt>Είστε σίγουρος ότι θέλετε να διαγράψετε %1 "%2"?</qt?\></translation>
+        <translation><qt>Είστε σίγουροι ότι θέλετε να διαγράψετε %1 "%2"?</qt?\></translation>
     </message>
     <message>
         <source>&Yes</source>
-        <translation type="unfinished">&Ναι</translation>
+        <translation>&Ναι</translation>
     </message>
     <message>
         <source>&No</source>
-        <translation type="unfinished">&Όχι</translation>
+        <translation>&Όχι</translation>
     </message>
     <message>
         <source>New Folder 1</source>
-        <translation type="unfinished">Νέος Φάκελος 1</translation>
+        <translation>Νέος Φάκελος 1</translation>
     </message>
     <message>
         <source>New Folder</source>
-        <translation type="unfinished">Νέος Φάκελος</translation>
+        <translation>Νέος Φάκελος</translation>
     </message>
     <message>
         <source>New Folder %1</source>
-        <translation type="unfinished">Νέος Φάκελος %1</translation>
+        <translation>Νέος Φάκελος %1</translation>
     </message>
     <message>
         <source>Find Directory</source>
-        <translation type="unfinished">Εύρεση φακέλου</translation>
+        <translation>Εύρεση Φακέλου</translation>
     </message>
     <message>
         <source>Directories</source>
-        <translation type="unfinished">Φάκελοι</translation>
+        <translation>Φάκελοι</translation>
     </message>
     <message>
         <source>Directory:</source>
-        <translation type="unfinished">Φάκελος :</translation>
+        <translation>Φάκελος:</translation>
     </message>
     <message>
         <source>Error</source>
-        <translation type="unfinished">Σφάλμα</translation>
+        <translation>Λάθος</translation>
     </message>
     <message>
         <source>%1
 File not found.
 Check path and filename.</source>
-        <translation type="unfinished">%1
-Το αρχέιο δεν βρέθηκε.Ελέγξτε την διαδρομή και το όνομα του αρχειου.</translation>
+        <translation>%1
+Το αρχείο δεν βρέθηκε.
+Ελέγξτε την διαδρομή και το όνομα του αρχείου.</translation>
     </message>
 </context>
 <context>
@@ -416,18 +422,19 @@ Check path and filename.</source>
     <message>
         <source>Could not read directory
 %1</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η ανάγνωση του φακέλου
+        <translation>Δεν ήταν δυνατή η ανάγνωση του φακέλου
 %1</translation>
     </message>
     <message>
         <source>Could not create directory
 %1</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η δημιουργία του φακέλου%1</translation>
+        <translation>Δεν ήταν δυνατή η δημιουργία του φακέλου
+%1</translation>
     </message>
     <message>
         <source>Could not remove file or directory
 %1</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η διαγραφή του αρχείου ή του φακέλου
+        <translation>Δεν ήταν δυνατή η διαγραφή του αρχείου ή του φακέλου
 %1</translation>
     </message>
     <message>
@@ -435,7 +442,7 @@ Check path and filename.</source>
 %1
 to
 %2</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η μετονομασια
+        <translation>Δεν ήταν δυνατή η μετονομασία
 %1
 σε
 %2</translation>
@@ -443,13 +450,13 @@ to
     <message>
         <source>Could not open
 %1</source>
-        <translation type="unfinished">Δεν ήταν δυνατό το άνοιγμα
+        <translation>Δεν ήταν δυνατό το άνοιγμα
 %1</translation>
     </message>
     <message>
         <source>Could not write
 %1</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εγγραφή
+        <translation>Δεν ήταν δυνατή η εγγραφή
 %1</translation>
     </message>
 </context>
@@ -457,342 +464,342 @@ to
     <name>Q3MainWindow</name>
     <message>
         <source>Line up</source>
-        <translation type="unfinished">Ευθυγράμμιση</translation>
+        <translation>Ευθυγράμμιση</translation>
     </message>
     <message>
         <source>Customize...</source>
-        <translation type="unfinished">Προσαρμογή...</translation>
+        <translation>Προσαρμογή...</translation>
     </message>
 </context>
 <context>
     <name>Q3NetworkProtocol</name>
     <message>
         <source>Operation stopped by the user</source>
-        <translation type="unfinished">Η λειτουργία σταμάτησε από τον χρήστη</translation>
+        <translation>Η λειτουργία σταμάτησε από τον χρήστη</translation>
     </message>
 </context>
 <context>
     <name>Q3ProgressDialog</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Άκυρο</translation>
+        <translation>Άκυρο</translation>
     </message>
 </context>
 <context>
     <name>Q3TabDialog</name>
     <message>
         <source>OK</source>
-        <translation type="unfinished">Ναι</translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished">Εφαρμογή</translation>
+        <translation>Εφαρμογή</translation>
     </message>
     <message>
         <source>Help</source>
-        <translation type="unfinished">Βοήθεια</translation>
+        <translation>Βοήθεια</translation>
     </message>
     <message>
         <source>Defaults</source>
-        <translation type="unfinished">Επαναφορά σε αρχικά</translation>
+        <translation>Επαναφορά σε αρχικά</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Άκυρο</translation>
+        <translation>Άκυρο</translation>
     </message>
 </context>
 <context>
     <name>Q3TextEdit</name>
     <message>
         <source>&Undo</source>
-        <translation type="unfinished">&Αναίρεση</translation>
+        <translation>&Αναίρεση</translation>
     </message>
     <message>
         <source>&Redo</source>
-        <translation type="unfinished">&Ακύρωση Αναίρεσης</translation>
+        <translation>&Ακύρωση Αναίρεσης</translation>
     </message>
     <message>
         <source>Cu&t</source>
-        <translation type="unfinished">Αποκοπ&ή</translation>
+        <translation>Αποκοπ&ή</translation>
     </message>
     <message>
         <source>&Copy</source>
-        <translation type="unfinished">&Αντιγραφή</translation>
+        <translation>&Αντιγραφή</translation>
     </message>
     <message>
         <source>&Paste</source>
-        <translation type="unfinished">&Επικόλληση</translation>
+        <translation>&Επικόλληση</translation>
     </message>
     <message>
         <source>Clear</source>
-        <translation type="unfinished">Καθαρισμός</translation>
+        <translation>Καθαρισμός</translation>
     </message>
     <message>
         <source>Select All</source>
-        <translation type="unfinished">Επιλογή όλων</translation>
+        <translation>Επιλογή Όλων</translation>
     </message>
 </context>
 <context>
     <name>Q3TitleBar</name>
     <message>
         <source>System</source>
-        <translation type="unfinished">Σύστημα</translation>
+        <translation>Σύστημα</translation>
     </message>
     <message>
         <source>Restore up</source>
-        <translation type="unfinished">Επαναφορά Πάνω</translation>
+        <translation>Επαναφορά πάνω</translation>
     </message>
     <message>
         <source>Minimize</source>
-        <translation type="unfinished">Ελαχιστοποίηση</translation>
+        <translation>Ελαχιστοποίηση</translation>
     </message>
     <message>
         <source>Restore down</source>
-        <translation type="unfinished">Επαναφορά Κάτω</translation>
+        <translation>Επαναφορά κάτω</translation>
     </message>
     <message>
         <source>Maximize</source>
-        <translation type="unfinished">Μεγιστοποίηση</translation>
+        <translation>Μεγιστοποίηση</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Contains commands to manipulate the window</source>
-        <translation type="unfinished">Περιέχει εντολές για τον έλεγχο του παραθύρου</translation>
+        <translation>Περιέχει εντολές για τον έλεγχο του παραθύρου</translation>
     </message>
     <message>
         <source>Puts a minimized back to normal</source>
-        <translation type="unfinished">Θετεί από ελαχιστοποίηση σε κανονικό μέγεθος</translation>
+        <translation>Θετεί από ελαχιστοποίηση σε κανονικό μέγεθος</translation>
     </message>
     <message>
         <source>Moves the window out of the way</source>
-        <translation type="unfinished">Θέτει το παράθυρο εκτος όψης</translation>
+        <translation>Θέτει το παράθυρο εκτός όψης</translation>
     </message>
     <message>
         <source>Puts a maximized window back to normal</source>
-        <translation type="unfinished">Θετεί το παράθυρο από μεγιστοποίηση σε κανονικό μέγεθος</translation>
+        <translation>Θέτει το παράθυρο από μεγιστοποίηση σε κανονικό μέγεθος</translation>
     </message>
     <message>
         <source>Makes the window full screen</source>
-        <translation type="unfinished">Θέτει το παράθυρο σε πλήρη οθόνη</translation>
+        <translation>Θέτει το παράθυρο σε πλήρη οθόνη</translation>
     </message>
     <message>
         <source>Closes the window</source>
-        <translation type="unfinished">Κλείνει το παράθυρο</translation>
+        <translation>Κλείνει το παράθυρο</translation>
     </message>
     <message>
         <source>Holds the name of the window and contains controls to manipulate it</source>
-        <translation type="unfinished">Εμφανίζει το όνομα του παραθύρου και περιέχει εντολές για τον έλεγχο του</translation>
+        <translation>Εμφανίζει το όνομα του παραθύρου και περιέχει εντολές για τον έλεγχο του</translation>
     </message>
 </context>
 <context>
     <name>Q3ToolBar</name>
     <message>
         <source>More...</source>
-        <translation type="unfinished">Περισσότερα...</translation>
+        <translation>Περισσότερα...</translation>
     </message>
 </context>
 <context>
     <name>Q3UrlOperator</name>
     <message>
         <source>The protocol `%1' is not supported</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζεται</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζεται</translation>
     </message>
     <message>
         <source>The protocol `%1' does not support listing directories</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζει τον κατάλογο φακέλων</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζει τον κατάλογο φακέλων</translation>
     </message>
     <message>
         <source>The protocol `%1' does not support creating new directories</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζει την δημιουργια νέων φακέλων</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζει την δημιουργία νέων φακέλων</translation>
     </message>
     <message>
         <source>The protocol `%1' does not support removing files or directories</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζει την μετακίνηση αρχείων ή φακέλων</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζει την μετακίνηση αρχείων ή φακέλων</translation>
     </message>
     <message>
         <source>The protocol `%1' does not support renaming files or directories</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζει την μετονομασία αρχείων ή φακέλων</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζει την μετονομασία αρχείων ή φακέλων</translation>
     </message>
     <message>
         <source>The protocol `%1' does not support getting files</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζει την απόκτηση αρχείων</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζει την απόκτηση αρχείων</translation>
     </message>
     <message>
         <source>The protocol `%1' does not support putting files</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζει την υποβολή αρχείων</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζει την υποβολή αρχείων</translation>
     </message>
     <message>
         <source>The protocol `%1' does not support copying or moving files or directories</source>
-        <translation type="unfinished">Το πρωτόκολλο '%1' δεν υποστηρίζει την αντιγραφή ή μεταφορά αρχείων ή φακέλων</translation>
+        <translation>Το πρωτόκολλο '%1' δεν υποστηρίζει την αντιγραφή ή μεταφορά αρχείων ή φακέλων</translation>
     </message>
     <message>
         <source>(unknown)</source>
-        <translation type="unfinished">Άγνωστο</translation>
+        <translation>(άγνωστο)</translation>
     </message>
 </context>
 <context>
     <name>Q3Wizard</name>
     <message>
         <source>&Cancel</source>
-        <translation type="unfinished">&Άκυρο</translation>
+        <translation>&Άκυρο</translation>
     </message>
     <message>
         <source>< &Back</source>
-        <translation type="unfinished"><&Πίσω</translation>
+        <translation>< &Πίσω</translation>
     </message>
     <message>
         <source>&Next ></source>
-        <translation type="unfinished">&Επόμενο></translation>
+        <translation>&Επόμενο ></translation>
     </message>
     <message>
         <source>&Finish</source>
-        <translation type="unfinished">&Τέλος</translation>
+        <translation>&Τέλος</translation>
     </message>
     <message>
         <source>&Help</source>
-        <translation type="unfinished">&Βοήθεια</translation>
+        <translation>&Βοήθεια</translation>
     </message>
 </context>
 <context>
     <name>QAbstractSocket</name>
     <message>
         <source>Host not found</source>
-        <translation type="unfinished">Ο διακομιστής δεν βρέθηκε</translation>
+        <translation>Ο διακομιστής δεν βρέθηκε</translation>
     </message>
     <message>
         <source>Connection refused</source>
-        <translation type="unfinished">Άρνηση σύνδεσης</translation>
+        <translation>Άρνηση σύνδεσης</translation>
     </message>
     <message>
         <source>Socket operation timed out</source>
-        <translation type="unfinished">Η λειτουργία socket εξάντλησε το χρονικό περιθώριο</translation>
+        <translation>Η λειτουργία socket εξάντλησε το χρονικό περιθώριο</translation>
     </message>
     <message>
         <source>Socket is not connected</source>
-        <translation type="unfinished">Το socket δεν ειναι συνεδεμένο</translation>
+        <translation>Το socket δεν ειναι συνεδεμένο</translation>
     </message>
 </context>
 <context>
     <name>QAbstractSpinBox</name>
     <message>
         <source>&Step up</source>
-        <translation type="unfinished">&Βήμα πάνω</translation>
+        <translation>&Βήμα πάνω</translation>
     </message>
     <message>
         <source>Step &down</source>
-        <translation type="unfinished">Βήμα &κάτω</translation>
+        <translation>Βήμα &κάτω</translation>
     </message>
     <message>
         <source>&Select All</source>
-        <translation type="unfinished">&Επιλογή Όλων</translation>
+        <translation>&Επιλογή Όλων</translation>
     </message>
 </context>
 <context>
     <name>QApplication</name>
     <message>
         <source>Activate</source>
-        <translation type="unfinished">Ενεργοποίηση</translation>
+        <translation>Ενεργοποίηση</translation>
     </message>
     <message>
         <source>Executable '%1' requires Qt %2, found Qt %3.</source>
-        <translation type="unfinished">Το εκτελέσιμο '%1' απαιτεί Qt %2, βρέθηκε Qt %3.</translation>
+        <translation>Το εκτελέσιμο '%1' απαιτεί Qt %2, βρέθηκε Qt %3.</translation>
     </message>
     <message>
         <source>Incompatible Qt Library Error</source>
-        <translation type="unfinished">Σφάκμα μη συμβατής βιβλιοθήκης Qt</translation>
+        <translation>Λάθος μη συμβατής βιβλιοθήκης Qt</translation>
     </message>
     <message>
         <source>QT_LAYOUT_DIRECTION</source>
         <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
-        <translation type="unfinished">QT_ΚΑΤΕΥΘΥΝΣΗ_ΠΑΡΑΘΕΣΗΣ</translation>
+        <translation>QT_ΚΑΤΕΥΘΥΝΣΗ_ΠΑΡΑΘΕΣΗΣ</translation>
     </message>
     <message>
         <source>Activates the program's main window</source>
-        <translation type="unfinished">Ενεργοποιεί το κεντρικό παράθυρο της εφαρμογής</translation>
+        <translation>Ενεργοποιεί το κεντρικό παράθυρο της εφαρμογής</translation>
     </message>
 </context>
 <context>
     <name>QCheckBox</name>
     <message>
         <source>Uncheck</source>
-        <translation type="unfinished">Απεπιλογή</translation>
+        <translation>Απεπιλογή</translation>
     </message>
     <message>
         <source>Check</source>
-        <translation type="unfinished">Επιλογή</translation>
+        <translation>Επιλογή</translation>
     </message>
     <message>
         <source>Toggle</source>
-        <translation type="unfinished">Αντιστροφή</translation>
+        <translation>Αντιστροφή</translation>
     </message>
 </context>
 <context>
     <name>QColorDialog</name>
     <message>
         <source>Hu&e:</source>
-        <translation type="unfinished">Απόχρωσ&η:</translation>
+        <translation>Απόχρωσ&η:</translation>
     </message>
     <message>
         <source>&Sat:</source>
-        <translation type="unfinished">&Κορεσμός:</translation>
+        <translation>&Κορεσμός:</translation>
     </message>
     <message>
         <source>&Val:</source>
-        <translation type="unfinished">&Φωτεινότητα:</translation>
+        <translation>&Φωτεινότητα:</translation>
     </message>
     <message>
         <source>&Red:</source>
-        <translation type="unfinished">&Κόκκινο:</translation>
+        <translation>&Κόκκινο:</translation>
     </message>
     <message>
         <source>&Green:</source>
-        <translation type="unfinished">&Πράσινο:</translation>
+        <translation>&Πράσινο:</translation>
     </message>
     <message>
         <source>Bl&ue:</source>
-        <translation type="unfinished">Μπ&λε:</translation>
+        <translation>Μπ&λε:</translation>
     </message>
     <message>
         <source>A&lpha channel:</source>
-        <translation type="unfinished">Ά&λφα κανάλι:</translation>
+        <translation>Ά&λφα κανάλι:</translation>
     </message>
     <message>
         <source>&Basic colors</source>
-        <translation type="unfinished">&Βασικά χρώματα</translation>
+        <translation>&Βασικά χρώματα</translation>
     </message>
     <message>
         <source>&Custom colors</source>
-        <translation type="unfinished">&Ειδικά χρώματα</translation>
+        <translation>&Ειδικά χρώματα</translation>
     </message>
     <message>
         <source>&Add to Custom Colors</source>
-        <translation type="unfinished">&Πρόσθεση σε ειδικά χρώματα</translation>
+        <translation>&Πρόσθεση σε ειδικά χρώματα</translation>
     </message>
     <message>
         <source>Select color</source>
-        <translation type="unfinished">Επέλεξε χρώμα</translation>
+        <translation>Επιλέξτε χρώμα</translation>
     </message>
 </context>
 <context>
     <name>QComboBox</name>
     <message>
         <source>Open</source>
-        <translation type="unfinished">Άνοιγμα</translation>
+        <translation>Άνοιγμα</translation>
     </message>
     <message>
         <source>False</source>
-        <translation type="unfinished">Λάθος</translation>
+        <translation>Λάθος</translation>
     </message>
     <message>
         <source>True</source>
-        <translation type="unfinished">Σωστό</translation>
+        <translation>Σωστό</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
 </context>
 <context>
@@ -800,2263 +807,2261 @@ to
     <message>
         <source>%1: permission denied</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: άρνηση άδειας</translation>
     </message>
     <message>
         <source>%1: already exists</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: υπάρχει ήδη</translation>
     </message>
     <message>
         <source>%1: doesn't exists</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: δεν υπάρχει</translation>
     </message>
     <message>
         <source>%1: out of resources</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: έλλειψη πόρων</translation>
     </message>
     <message>
         <source>%1: unknown error %2</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: άγνωστο λάθος %2</translation>
     </message>
     <message>
         <source>%1: key is empty</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: το κλειδί είναι άδειο</translation>
     </message>
     <message>
         <source>%1: unable to make key</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: αδύνατη η δημιουργία κλειδιού</translation>
     </message>
     <message>
         <source>%1: ftok failed</source>
         <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: αποτυχία ftok</translation>
     </message>
 </context>
 <context>
     <name>QDB2Driver</name>
     <message>
         <source>Unable to connect</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η σύνδεση</translation>
+        <translation>Δεν ήταν δυνατή η σύνδεση</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η διεκπαιρέωση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to rollback transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to set autocommit</source>
-        <translation type="unfinished">Δεν ήταν δυνατος ο ορισμός της αυτόματης αντιστοίχησης</translation>
+        <translation>Δεν ήταν δυνατος ο ορισμός της αυτόματης αντιστοίχησης</translation>
     </message>
 </context>
 <context>
     <name>QDB2Result</name>
     <message>
         <source>Unable to execute statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
     </message>
     <message>
         <source>Unable to prepare statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
     </message>
     <message>
         <source>Unable to bind variable</source>
-        <translation type="unfinished">Δεν ήταν δυνατός ο εγκλωβισμός της μεταβλητής</translation>
+        <translation>Δεν ήταν δυνατή η δέσμευση της μεταβλητής</translation>
     </message>
     <message>
         <source>Unable to fetch record %1</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προσκόμιση της εγγραφής %1</translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση της εγγραφής %1</translation>
     </message>
     <message>
         <source>Unable to fetch next</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προσκόμιση  του επόμενου</translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση του επόμενου</translation>
     </message>
     <message>
         <source>Unable to fetch first</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προσκόμιση του πρώτου</translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση του πρώτου</translation>
     </message>
 </context>
 <context>
     <name>QDateTimeEdit</name>
     <message>
         <source>AM</source>
-        <translation type="unfinished">ΜΜ</translation>
+        <translation>ΜΜ</translation>
     </message>
     <message>
         <source>am</source>
-        <translation type="unfinished">μμ</translation>
+        <translation>μμ</translation>
     </message>
     <message>
         <source>PM</source>
-        <translation type="unfinished">ΠΜ</translation>
+        <translation>ΠΜ</translation>
     </message>
     <message>
         <source>pm</source>
-        <translation type="unfinished">πμ</translation>
+        <translation>πμ</translation>
     </message>
 </context>
 <context>
     <name>QDial</name>
     <message>
         <source>QDial</source>
-        <translation type="unfinished">QDial</translation>
+        <translation>Ποντεσιόμετρο</translation>
     </message>
     <message>
         <source>SpeedoMeter</source>
-        <translation type="unfinished">Ταχύμετρο</translation>
+        <translation>Ταχύμετρο</translation>
     </message>
     <message>
         <source>SliderHandle</source>
-        <translation type="unfinished">Ελεγκτης Ολίσθησης</translation>
+        <translation>Ελεγκτής Ολίσθησης</translation>
     </message>
 </context>
 <context>
     <name>QDialog</name>
     <message>
         <source>What's This?</source>
-        <translation type="unfinished">Τι είναι αυτό ?</translation>
+        <translation>Τι είναι αυτό;</translation>
     </message>
     <message>
         <source>Done</source>
-        <translation type="unfinished"></translation>
+        <translation>Εντάξει</translation>
     </message>
 </context>
 <context>
     <name>QDialogButtonBox</name>
     <message>
         <source>OK</source>
-        <translation type="unfinished">Ναι</translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>Save</source>
-        <translation type="unfinished">Αποθήκευση</translation>
+        <translation>Αποθήκευση</translation>
     </message>
     <message>
         <source>Open</source>
-        <translation type="unfinished">Άνοιγμα</translation>
+        <translation>Άνοιγμα</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Άκυρο</translation>
+        <translation>Άκυρο</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished">Εφαρμογή</translation>
+        <translation>Εφαρμογή</translation>
     </message>
     <message>
         <source>Reset</source>
-        <translation type="unfinished">Επανέναρξη</translation>
+        <translation>Επανέναρξη</translation>
     </message>
     <message>
         <source>Help</source>
-        <translation type="unfinished">Βοήθεια</translation>
+        <translation>Βοήθεια</translation>
     </message>
     <message>
         <source>Don't Save</source>
-        <translation type="unfinished">Μην αποθηκεύσεις</translation>
+        <translation>Μην αποθηκεύσεις</translation>
     </message>
     <message>
         <source>Discard</source>
-        <translation type="unfinished">Αποβολή αλλαγών</translation>
+        <translation>Αποβολή αλλαγών</translation>
     </message>
     <message>
         <source>&Yes</source>
-        <translation type="unfinished">&Ναι</translation>
+        <translation>&Ναι</translation>
     </message>
     <message>
         <source>Yes to &All</source>
-        <translation type="unfinished">Ναι σε &Όλα</translation>
+        <translation>Ναι σε &Όλα</translation>
     </message>
     <message>
         <source>&No</source>
-        <translation type="unfinished">&Όχι</translation>
+        <translation>&Όχι</translation>
     </message>
     <message>
         <source>N&o to All</source>
-        <translation type="unfinished">Ό&χι σε Όλα</translation>
+        <translation>Ό&χι σε Όλα</translation>
     </message>
     <message>
         <source>Save All</source>
-        <translation type="unfinished">Αποθήκευση Όλων</translation>
+        <translation>Αποθήκευση Όλων</translation>
     </message>
     <message>
         <source>Abort</source>
-        <translation type="unfinished">Ματαίωσε</translation>
+        <translation>Ματαίωσε</translation>
     </message>
     <message>
         <source>Retry</source>
-        <translation type="unfinished">Προσπάθησε πάλι</translation>
+        <translation>Προσπάθησε πάλι</translation>
     </message>
     <message>
         <source>Ignore</source>
-        <translation type="unfinished">Αγνόησε</translation>
+        <translation>Αγνόησε</translation>
     </message>
     <message>
         <source>Restore Defaults</source>
-        <translation type="unfinished">Επανέφερε τα αρχικά</translation>
+        <translation>Επανέφερε τα αρχικά</translation>
     </message>
     <message>
         <source>Close without Saving</source>
-        <translation type="unfinished">Κλείσιμο χωρίς αποθήκευση</translation>
+        <translation>Κλείσιμο χωρίς αποθήκευση</translation>
     </message>
     <message>
         <source>&OK</source>
-        <translation type="unfinished"></translation>
+        <translation>&Ναι</translation>
     </message>
 </context>
 <context>
     <name>QDirModel</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Size</source>
-        <translation type="unfinished">Μέγεθος</translation>
+        <translation>Μέγεθος</translation>
     </message>
     <message>
         <source>Kind</source>
         <comment>Match OS X Finder</comment>
-        <translation type="unfinished">Έίδος</translation>
+        <translation>Είδος</translation>
     </message>
     <message>
         <source>Type</source>
         <comment>All other platforms</comment>
-        <translation type="unfinished">Τύπος</translation>
+        <translation>Τύπος</translation>
     </message>
     <message>
         <source>Date Modified</source>
-        <translation type="unfinished">Ημερομηνία Τροποποίησης</translation>
+        <translation>Ημερομηνία Τροποποίησης</translation>
     </message>
 </context>
 <context>
     <name>QDockWidget</name>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Dock</source>
-        <translation type="unfinished">Προσάρτηση</translation>
+        <translation>Προσάρτηση</translation>
     </message>
     <message>
         <source>Float</source>
-        <translation type="unfinished">Ελεύθεση μετακίνηση</translation>
+        <translation>Επίπλευση</translation>
     </message>
 </context>
 <context>
     <name>QDoubleSpinBox</name>
     <message>
         <source>More</source>
-        <translation type="unfinished">Περισσότερα</translation>
+        <translation>Περισσότερα</translation>
     </message>
     <message>
         <source>Less</source>
-        <translation type="unfinished">Λιγοτερα</translation>
+        <translation>Λιγότερα</translation>
     </message>
 </context>
 <context>
     <name>QErrorMessage</name>
     <message>
         <source>Debug Message:</source>
-        <translation type="unfinished">Μήνυμα αποσφαλμάτωσης :</translation>
+        <translation>Μήνυμα αποσφαλμάτωσης:</translation>
     </message>
     <message>
         <source>Warning:</source>
-        <translation type="unfinished">Προειδοποίηση :</translation>
+        <translation>Προειδοποίηση:</translation>
     </message>
     <message>
         <source>Fatal Error:</source>
-        <translation type="unfinished">Κριτικό σφάλμα :</translation>
+        <translation>Κριτικό λάθος:</translation>
     </message>
     <message>
         <source>&Show this message again</source>
-        <translation type="unfinished">&Προβολή αυτού του μηνύματος πάλι</translation>
+        <translation>&Προβολή αυτού του μηνύματος πάλι</translation>
     </message>
     <message>
         <source>&OK</source>
-        <translation type="unfinished">&Ναι</translation>
+        <translation>&Ναι</translation>
     </message>
 </context>
 <context>
     <name>QFileDialog</name>
     <message>
         <source>All Files (*)</source>
-        <translation type="unfinished">Όλα τα αρχεία (*)</translation>
+        <translation>Όλα τα Αρχεία (*)</translation>
     </message>
     <message>
         <source>Directories</source>
-        <translation type="unfinished">Φάκελοι</translation>
+        <translation>Φάκελοι</translation>
     </message>
     <message>
         <source>&Open</source>
-        <translation type="unfinished">&Άνοιγμα</translation>
+        <translation>&Άνοιγμα</translation>
     </message>
     <message>
         <source>&Save</source>
-        <translation type="unfinished">&Αποθήκευση</translation>
+        <translation>&Αποθήκευση</translation>
     </message>
     <message>
         <source>Open</source>
-        <translation type="unfinished">Άνοιγμα</translation>
+        <translation>Άνοιγμα</translation>
     </message>
     <message>
         <source>%1 already exists.
 Do you want to replace it?</source>
-        <translation type="unfinished">%1 υπάρχει ήδη.
-Να γίνει η αντικατάσταση του ?</translation>
+        <translation>%1 υπάρχει ήδη.
+Να γίνει η αντικατάστασή του;</translation>
     </message>
     <message>
         <source>%1
 File not found.
 Please verify the correct file name was given.</source>
-        <translation type="unfinished">%1
+        <translation>%1
 Δεν υπάρχει το αρχείο.
-Παρακαλώ επιβεβαιώστε το όνομα του αρχείου.
-</translation>
+Παρακαλώ επιβεβαιώστε το όνομα του αρχείου.</translation>
     </message>
     <message>
         <source>My Computer</source>
-        <translation type="unfinished">Ο υπολογιστής μου</translation>
+        <translation>Ο υπολογιστής μου</translation>
     </message>
     <message>
         <source>&Rename</source>
-        <translation type="unfinished">&Μετονομασία</translation>
+        <translation>&Μετονομασία</translation>
     </message>
     <message>
         <source>&Delete</source>
-        <translation type="unfinished">&Διαγραφή</translation>
+        <translation>&Διαγραφή</translation>
     </message>
     <message>
         <source>Show &hidden files</source>
-        <translation type="unfinished">Εμφάνιση &κρυφών αρχείων</translation>
+        <translation>Εμφάνιση &κρυφών αρχείων</translation>
     </message>
     <message>
         <source>Back</source>
-        <translation type="unfinished">Πίσω</translation>
+        <translation>Πίσω</translation>
     </message>
     <message>
         <source>Parent Directory</source>
-        <translation type="unfinished">Γονικός φάκελος</translation>
+        <translation>Γονικός φάκελος</translation>
     </message>
     <message>
         <source>List View</source>
-        <translation type="unfinished">Προβολή λίστας</translation>
+        <translation>Προβολή Λίστας</translation>
     </message>
     <message>
         <source>Detail View</source>
-        <translation type="unfinished">Προβολή με λεπτομέρειες</translation>
+        <translation>Προβολή με Λεπτομέρειες</translation>
     </message>
     <message>
         <source>Files of type:</source>
-        <translation type="unfinished">Αρχεία τύπου :</translation>
+        <translation>Αρχεία τύπου:</translation>
     </message>
     <message>
         <source>Directory:</source>
-        <translation type="unfinished">Φάκελος :</translation>
+        <translation>Φάκελος:</translation>
     </message>
     <message>
         <source>%1
 Directory not found.
 Please verify the correct directory name was given.</source>
-        <translation type="unfinished">%1
+        <translation>%1
 Ο φάκελος δεν βρέθηκε.
 Παρακαλώ επιβεβαιώστε το όνομα του φακέλου.</translation>
     </message>
     <message>
         <source>'%1' is write protected.
 Do you want to delete it anyway?</source>
-        <translation type="unfinished">'%1' έχει προστασία εγγραφής.
+        <translation>'%1' έχει προστασία εγγραφής.
 Να γίνει διαγραφή ?</translation>
     </message>
     <message>
         <source>Are sure you want to delete '%1'?</source>
-        <translation type="unfinished">Είστε σιγουρος/η ότι θέλετε να διαγράψετε το '%1'?</translation>
+        <translation>Είστε σίγουροι οτι θέλετε να διαγράψετε το '%1'?</translation>
     </message>
     <message>
         <source>Could not delete directory.</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η διαγραφή του φακέλου.</translation>
+        <translation>Δεν ήταν δυνατή η διαγραφή του φακέλου.</translation>
     </message>
     <message>
         <source>Save As</source>
-        <translation type="unfinished">Αποθήκευση ως</translation>
+        <translation>Αποθήκευση ως</translation>
     </message>
     <message>
         <source>Drive</source>
-        <translation type="unfinished">Δίσκος</translation>
+        <translation>Δίσκος</translation>
     </message>
     <message>
         <source>File</source>
-        <translation type="unfinished">Αρχειο</translation>
+        <translation>Αρχείο</translation>
     </message>
     <message>
         <source>Unknown</source>
-        <translation type="unfinished">Άγνωστο</translation>
+        <translation>Άγνωστο</translation>
     </message>
     <message>
         <source>Find Directory</source>
-        <translation type="unfinished">Εύρεση φακέλου</translation>
+        <translation>Εύρεση φακέλου</translation>
     </message>
     <message>
         <source>Show </source>
-        <translation type="unfinished">Εμφάνιση</translation>
+        <translation>Εμφάνιση</translation>
     </message>
     <message>
         <source>Forward</source>
-        <translation type="unfinished">Μπρος</translation>
+        <translation>Μπροστά</translation>
     </message>
     <message>
         <source>New Folder</source>
-        <translation type="unfinished">Νέος Φάκελος</translation>
+        <translation>Νέος Φάκελος</translation>
     </message>
     <message>
         <source>&New Folder</source>
-        <translation type="unfinished">&Νέος Φάκελος</translation>
+        <translation>&Νέος Φάκελος</translation>
     </message>
     <message>
         <source>&Choose</source>
-        <translation type="unfinished">&Επιλογη</translation>
+        <translation>&Επιλογή</translation>
     </message>
     <message>
         <source>Remove</source>
-        <translation type="unfinished">Διαγραφή</translation>
+        <translation>Διαγραφή</translation>
     </message>
     <message>
         <source>File &name:</source>
-        <translation type="unfinished">Όνομα &αρχείου  :</translation>
+        <translation>Όνομα &αρχείου  :</translation>
     </message>
     <message>
         <source>Look in:</source>
-        <translation type="unfinished">Ψάξε σε :</translation>
+        <translation>Ψάξε σε :</translation>
     </message>
     <message>
         <source>Create New Folder</source>
-        <translation type="unfinished">Δημιοργία Νέου Φακέλου</translation>
+        <translation>Δημιουργία Νέου Φακέλου</translation>
     </message>
 </context>
 <context>
     <name>QFileSystemModel</name>
     <message>
         <source>Invalid filename</source>
-        <translation type="unfinished">Μη έγκυρο όνομα</translation>
+        <translation>Μη έγκυρο όνομα</translation>
     </message>
     <message>
         <source><b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.</source>
-        <translation type="unfinished"><b>Το όνομα "%1" δεν μπορεί να χρησιμοποιηθεί</b><p>Προσπαθήστε να χρησιμοποιήστε άλλο όνομα, με λιγότερους χαρακτήρες ή χωρις σημεία στίξης.</translation>
+        <translation><b>Το όνομα "%1" δεν μπορεί να χρησιμοποιηθεί</b><p>Προσπαθήστε να χρησιμοποιήστε άλλο όνομα, με λιγότερους χαρακτήρες ή χωρίς σημεία στίξης.</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Size</source>
-        <translation type="unfinished">Μέγεθος</translation>
+        <translation>Μέγεθος</translation>
     </message>
     <message>
         <source>Kind</source>
         <comment>Match OS X Finder</comment>
-        <translation type="unfinished">Έιδος</translation>
+        <translation>Είδος</translation>
     </message>
     <message>
         <source>Type</source>
         <comment>All other platforms</comment>
-        <translation type="unfinished">Τύπος</translation>
+        <translation>Τύπος</translation>
     </message>
     <message>
         <source>Date Modified</source>
-        <translation type="unfinished">Ημερομηνία Τροποποίησης</translation>
+        <translation>Ημερομηνία Τροποποίησης</translation>
     </message>
     <message>
         <source>My Computer</source>
-        <translation type="unfinished">Ο υπολογιστής μου</translation>
+        <translation>Ο υπολογιστής μου</translation>
     </message>
     <message>
         <source>Computer</source>
-        <translation type="unfinished">Υπολογιστης</translation>
+        <translation>Υπολογιστής</translation>
     </message>
     <message>
         <source>%1 TB</source>
-        <translation type="unfinished">%1 TB</translation>
+        <translation>%1 TB</translation>
     </message>
     <message>
         <source>%1 GB</source>
-        <translation type="unfinished">%1 GB</translation>
+        <translation>%1 GB</translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished">%1 MB</translation>
+        <translation>%1 MB</translation>
     </message>
     <message>
         <source>%1 KB</source>
-        <translation type="unfinished">%1 KB</translation>
+        <translation>%1 KB</translation>
     </message>
     <message>
         <source>%1 bytes</source>
-        <translation type="unfinished">%1 bytes</translation>
+        <translation>%1 bytes</translation>
     </message>
 </context>
 <context>
     <name>QFontDatabase</name>
     <message>
         <source>Normal</source>
-        <translation type="unfinished"></translation>
+        <translation>Κανονικά</translation>
     </message>
     <message>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Έντονα</translation>
     </message>
     <message>
         <source>Demi Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Ήμι Έντονα</translation>
     </message>
     <message>
         <source>Black</source>
-        <translation type="unfinished"></translation>
+        <translation>Σκούρα</translation>
     </message>
     <message>
         <source>Demi</source>
-        <translation type="unfinished"></translation>
+        <translation>Μεσαία</translation>
     </message>
     <message>
         <source>Light</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελαφριά</translation>
     </message>
     <message>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλάγια</translation>
     </message>
     <message>
         <source>Oblique</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλάγια</translation>
     </message>
     <message>
         <source>Any</source>
-        <translation type="unfinished"></translation>
+        <translation>Οτιδήποτε</translation>
     </message>
     <message>
         <source>Latin</source>
-        <translation type="unfinished"></translation>
+        <translation>Λατινικά</translation>
     </message>
     <message>
         <source>Greek</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελληνικά</translation>
     </message>
     <message>
         <source>Cyrillic</source>
-        <translation type="unfinished"></translation>
+        <translation>Κυριλλικά</translation>
     </message>
     <message>
         <source>Armenian</source>
-        <translation type="unfinished"></translation>
+        <translation>Αρμενικά</translation>
     </message>
     <message>
         <source>Hebrew</source>
-        <translation type="unfinished"></translation>
+        <translation>Εβραϊκά</translation>
     </message>
     <message>
         <source>Arabic</source>
-        <translation type="unfinished"></translation>
+        <translation>Αραβικά</translation>
     </message>
     <message>
         <source>Syriac</source>
-        <translation type="unfinished"></translation>
+        <translation>Συριακά</translation>
     </message>
     <message>
         <source>Thaana</source>
-        <translation type="unfinished"></translation>
+        <translation>Τάανα</translation>
     </message>
     <message>
         <source>Devanagari</source>
-        <translation type="unfinished"></translation>
+        <translation>Ντεβανγκάρι</translation>
     </message>
     <message>
         <source>Bengali</source>
-        <translation type="unfinished"></translation>
+        <translation>Μπενγάλι</translation>
     </message>
     <message>
         <source>Gurmukhi</source>
-        <translation type="unfinished"></translation>
+        <translation>Γκουρκούκι</translation>
     </message>
     <message>
         <source>Gujarati</source>
-        <translation type="unfinished"></translation>
+        <translation>Γκουτζαράτι</translation>
     </message>
     <message>
         <source>Oriya</source>
-        <translation type="unfinished"></translation>
+        <translation>Ορίγια</translation>
     </message>
     <message>
         <source>Tamil</source>
-        <translation type="unfinished"></translation>
+        <translation>Ταμίλ</translation>
     </message>
     <message>
         <source>Telugu</source>
-        <translation type="unfinished"></translation>
+        <translation>Τελούγκου</translation>
     </message>
     <message>
         <source>Kannada</source>
-        <translation type="unfinished"></translation>
+        <translation>Κανάντα</translation>
     </message>
     <message>
         <source>Malayalam</source>
-        <translation type="unfinished"></translation>
+        <translation>Μαλαγιαλάμ</translation>
     </message>
     <message>
         <source>Sinhala</source>
-        <translation type="unfinished"></translation>
+        <translation>Σινχάλα</translation>
     </message>
     <message>
         <source>Thai</source>
-        <translation type="unfinished"></translation>
+        <translation>Ταϋλανδέζικα</translation>
     </message>
     <message>
         <source>Lao</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάο</translation>
     </message>
     <message>
         <source>Tibetan</source>
-        <translation type="unfinished"></translation>
+        <translation>Θιβετιανά</translation>
     </message>
     <message>
         <source>Myanmar</source>
-        <translation type="unfinished"></translation>
+        <translation>Μιανμάρ</translation>
     </message>
     <message>
         <source>Georgian</source>
-        <translation type="unfinished"></translation>
+        <translation>Γεωργιανά</translation>
     </message>
     <message>
         <source>Khmer</source>
-        <translation type="unfinished"></translation>
+        <translation>Χμερ</translation>
     </message>
     <message>
         <source>Simplified Chinese</source>
-        <translation type="unfinished"></translation>
+        <translation>Απλοποιημένα Κινεζικά</translation>
     </message>
     <message>
         <source>Traditional Chinese</source>
-        <translation type="unfinished"></translation>
+        <translation>Παραδοσιακά Κινεζικά</translation>
     </message>
     <message>
         <source>Japanese</source>
-        <translation type="unfinished"></translation>
+        <translation>Ιαπωνικά</translation>
     </message>
     <message>
         <source>Korean</source>
-        <translation type="unfinished"></translation>
+        <translation>Κορεάτικα</translation>
     </message>
     <message>
         <source>Vietnamese</source>
-        <translation type="unfinished"></translation>
+        <translation>Βιετναμέζικα</translation>
     </message>
     <message>
         <source>Symbol</source>
-        <translation type="unfinished"></translation>
+        <translation>Σύμβολα</translation>
     </message>
     <message>
         <source>Ogham</source>
-        <translation type="unfinished"></translation>
+        <translation>Όγκαμ</translation>
     </message>
     <message>
         <source>Runic</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρουνική</translation>
     </message>
 </context>
 <context>
     <name>QFontDialog</name>
     <message>
         <source>&Font</source>
-        <translation type="unfinished">&Γραμματοσειρά</translation>
+        <translation>&Γραμματοσειρά</translation>
     </message>
     <message>
         <source>Font st&yle</source>
-        <translation type="unfinished">Στυλ γρ&αμματοσειράς</translation>
+        <translation>Στυλ γρ&αμματοσειράς</translation>
     </message>
     <message>
         <source>&Size</source>
-        <translation type="unfinished">&Μέγεθος</translation>
+        <translation>&Μέγεθος</translation>
     </message>
     <message>
         <source>Effects</source>
-        <translation type="unfinished">Εφφέ</translation>
+        <translation>Εφφέ</translation>
     </message>
     <message>
         <source>Stri&keout</source>
-        <translation type="unfinished">Γρά&μμιση</translation>
+        <translation>Γρά&μμιση</translation>
     </message>
     <message>
         <source>&Underline</source>
-        <translation type="unfinished">&Υπογράμμιση</translation>
+        <translation>&Υπογράμμιση</translation>
     </message>
     <message>
         <source>Sample</source>
-        <translation type="unfinished">Δείγμα</translation>
+        <translation>Δείγμα</translation>
     </message>
     <message>
         <source>Wr&iting System</source>
-        <translation type="unfinished">Σύ&στημα εγγραφής</translation>
+        <translation>Σύ&στημα εγγραφής</translation>
     </message>
     <message>
         <source>Select Font</source>
-        <translation type="unfinished">Επιλογή γραμματοσειράς</translation>
+        <translation>Επιλογή γραμματοσειράς</translation>
     </message>
 </context>
 <context>
     <name>QFtp</name>
     <message>
         <source>Not connected</source>
-        <translation type="unfinished">Χωρίς σύνδεση</translation>
+        <translation>Χωρίς σύνδεση</translation>
     </message>
     <message>
         <source>Host %1 not found</source>
-        <translation type="unfinished">Ο διακομιστής %1 δεν βρέθηκε</translation>
+        <translation>Ο διακομιστής %1 δεν βρέθηκε</translation>
     </message>
     <message>
         <source>Connection refused to host %1</source>
-        <translation type="unfinished">Άρνηση σύνδεσης στον διακομιστή %1</translation>
+        <translation>Άρνηση σύνδεσης στον διακομιστή %1</translation>
     </message>
     <message>
         <source>Connected to host %1</source>
-        <translation type="unfinished">Σύνδεση στον διακομιστη %1</translation>
+        <translation>Σύνδεση στον διακομιστή %1</translation>
     </message>
     <message>
         <source>Connection refused for data connection</source>
-        <translation type="unfinished">Άρνηση συνδεσης για σύνδεση δεδομένων</translation>
+        <translation>Άρνηση σύνδεσης για σύνδεση δεδομένων</translation>
     </message>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο πρόβλημα</translation>
+        <translation>Άγνωστο πρόβλημα</translation>
     </message>
     <message>
         <source>Connecting to host failed:
 %1</source>
-        <translation type="unfinished">Η σύνδεση στον διακομιστη απέτυχε:
+        <translation>Η σύνδεση στον διακομιστή απέτυχε:
 %1</translation>
     </message>
     <message>
         <source>Login failed:
 %1</source>
-        <translation type="unfinished">Η είσοδςο απέτυχε :
+        <translation>Η είσοδςο απέτυχε :
 %1</translation>
     </message>
     <message>
         <source>Listing directory failed:
 %1</source>
-        <translation type="unfinished">Η λίστα φακέλων απέτυχε :
+        <translation>Η λίστα φακέλων απέτυχε :
 %1</translation>
     </message>
     <message>
         <source>Changing directory failed:
 %1</source>
-        <translation type="unfinished">Η αλλαγή φακέλου απέτυχε :
+        <translation>Η αλλαγή φακέλου απέτυχε :
 %1</translation>
     </message>
     <message>
         <source>Downloading file failed:
 %1</source>
-        <translation type="unfinished">Το κατέβασμε του αρχείου απέτυχε :
+        <translation>Το κατέβασμα του αρχείου απέτυχε :
 %1</translation>
     </message>
     <message>
         <source>Uploading file failed:
 %1</source>
-        <translation type="unfinished">Το ανέβασμα του αρχειου απέτυχε :
+        <translation>Το ανέβασμα του αρχείου απέτυχε :
 %1</translation>
     </message>
     <message>
         <source>Removing file failed:
 %1</source>
-        <translation type="unfinished">Η διαγραφή του αρχείου απέτυχε :
+        <translation>Η διαγραφή του αρχείου απέτυχε :
 %1</translation>
     </message>
     <message>
         <source>Creating directory failed:
 %1</source>
-        <translation type="unfinished">Η δημιουργία του φακέλου απέτυχε:
+        <translation>Η δημιουργία του φακέλου απέτυχε:
 %1</translation>
     </message>
     <message>
         <source>Removing directory failed:
 %1</source>
-        <translation type="unfinished">Η διαγραφή του φακέλου απέτυχε:
+        <translation>Η διαγραφή του φακέλου απέτυχε:
 %1</translation>
     </message>
     <message>
         <source>Connection closed</source>
-        <translation type="unfinished">Η σύνδεση τερματίστηκε</translation>
+        <translation>Η σύνδεση τερματίστηκε</translation>
     </message>
     <message>
         <source>Host %1 found</source>
-        <translation type="unfinished">Ο διακομιστης %1  βρέθηκε</translation>
+        <translation>Ο διακομιστής %1 βρέθηκε</translation>
     </message>
     <message>
         <source>Connection to %1 closed</source>
-        <translation type="unfinished">Η σύνδεση στο %1 τερματίστηκε</translation>
+        <translation>Η σύνδεση στο %1 τερματίστηκε</translation>
     </message>
     <message>
         <source>Host found</source>
-        <translation type="unfinished">Ο διακομιστής βρέθηκε</translation>
+        <translation>Ο διακομιστής βρέθηκε</translation>
     </message>
     <message>
         <source>Connected to host</source>
-        <translation type="unfinished">Συνεδεμένος στον διακομιστή</translation>
+        <translation>Συνεδεμένος στον διακομιστή</translation>
     </message>
 </context>
 <context>
     <name>QHostInfo</name>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο πρόβλημα</translation>
+        <translation>Άγνωστο πρόβλημα</translation>
     </message>
 </context>
 <context>
     <name>QHostInfoAgent</name>
     <message>
         <source>Host not found</source>
-        <translation type="unfinished">Ο διακομιστής δεν βρέθηκε</translation>
+        <translation>Ο διακομιστής δεν βρέθηκε</translation>
     </message>
     <message>
         <source>Unknown address type</source>
-        <translation type="unfinished">Άγνωστος τυπος διεύθυνσης</translation>
+        <translation>Άγνωστος τύπος διεύθυνσης</translation>
     </message>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο πρόβλημα</translation>
+        <translation>Άγνωστο πρόβλημα</translation>
     </message>
 </context>
 <context>
     <name>QHttp</name>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο πρόβλημα</translation>
+        <translation>Άγνωστο πρόβλημα</translation>
     </message>
     <message>
         <source>Request aborted</source>
-        <translation type="unfinished">Το αίτημα ματαιώθηκε</translation>
+        <translation>Το αίτημα ματαιώθηκε</translation>
     </message>
     <message>
         <source>No server set to connect to</source>
-        <translation type="unfinished">Δεν έχει οριστεί εξυπηρετητής για σύνδεση</translation>
+        <translation>Δεν έχει οριστεί εξυπηρετητής για σύνδεση</translation>
     </message>
     <message>
         <source>Wrong content length</source>
-        <translation type="unfinished">Λάθος μέγέθος περιεχομένου</translation>
+        <translation>Λάθος μέγεθος περιεχομένου</translation>
     </message>
     <message>
         <source>Server closed connection unexpectedly</source>
-        <translation type="unfinished">Ο εξυπηρετητής τερματισε τη σύνδεση απρόσμενα</translation>
+        <translation>Ο εξυπηρετητής τερμάτισε τη σύνδεση απρόσμενα</translation>
     </message>
     <message>
         <source>Connection refused</source>
-        <translation type="unfinished">Η σύνδεση δεν επιτράπηκε</translation>
+        <translation>Άρνηση σύνδεσης</translation>
     </message>
     <message>
         <source>Host %1 not found</source>
-        <translation type="unfinished">Ο διακομιστης %1 δεν βρέθηκε</translation>
+        <translation>Ο διακομιστής %1 δεν βρέθηκε</translation>
     </message>
     <message>
         <source>HTTP request failed</source>
-        <translation type="unfinished">Το αίτημα HTTP απέτυχε</translation>
+        <translation>Το αίτημα HTTP απέτυχε</translation>
     </message>
     <message>
         <source>Invalid HTTP response header</source>
-        <translation type="unfinished">Μη έγκυρη HTTP κεφαλίδα στην απάντηση</translation>
+        <translation>Μη έγκυρη HTTP κεφαλίδα στην απάντηση</translation>
     </message>
     <message>
         <source>Invalid HTTP chunked body</source>
-        <translation type="unfinished">Μη έγκυρος HTTP κορμός</translation>
+        <translation>Μη έγκυρος HTTP κορμός</translation>
     </message>
     <message>
         <source>Host %1 found</source>
-        <translation type="unfinished">Ο διακομιστής %1 βρέθηκε</translation>
+        <translation>Ο διακομιστής %1 βρέθηκε</translation>
     </message>
     <message>
         <source>Connected to host %1</source>
-        <translation type="unfinished">Συνδεδεμένος στον διακομιστή %1</translation>
+        <translation>Συνδεδεμένος στον διακομιστή %1</translation>
     </message>
     <message>
         <source>Connection to %1 closed</source>
-        <translation type="unfinished">Η σύνδεση στο %1 τερματίστηκε</translation>
+        <translation>Η σύνδεση στο %1 τερματίστηκε</translation>
     </message>
     <message>
         <source>Host found</source>
-        <translation type="unfinished">Ο διακομιστής βρέθηκε</translation>
+        <translation>Ο διακομιστής βρέθηκε</translation>
     </message>
     <message>
         <source>Connected to host</source>
-        <translation type="unfinished">Συνδεδεμένος στον διακομιστή</translation>
+        <translation>Συνδεδεμένος στον διακομιστή</translation>
     </message>
     <message>
         <source>Connection closed</source>
-        <translation type="unfinished">Η σύνδεση τερματίστηκε</translation>
+        <translation>Η σύνδεση τερματίστηκε</translation>
     </message>
     <message>
         <source>Proxy authentication required</source>
-        <translation type="unfinished">Η αυθεντικοποίηση με τον μεσολαβητή απέτυχε</translation>
+        <translation>Ο μεσολαβητής απαιτεί αυθεντικοποίηση</translation>
     </message>
     <message>
         <source>Authentication required</source>
-        <translation type="unfinished">Απαιτείται αυθεντικοποίηση</translation>
+        <translation>Απαιτείται αυθεντικοποίηση</translation>
     </message>
     <message>
         <source>HTTPS connection requested but SSL support not compiled in</source>
-        <translation type="unfinished"></translation>
+        <translation>Ζητήθηκε σύνδεση HTTPS αλλά η υποστήριξη για SSL δεν έχει περιληφθεί</translation>
     </message>
     <message>
         <source>Connection refused (or timed out)</source>
-        <translation type="unfinished"></translation>
+        <translation>Άρνηση σύνδεσης (ή εξαντλήθηκε το χρονικό όριο)</translation>
     </message>
     <message>
         <source>Proxy requires authentication</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο μεσολαβητής απαιτεί αυθεντικοποίηση</translation>
     </message>
     <message>
         <source>Host requires authentication</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο διακομιστής απαιτεί αυθεντικοποίηση</translation>
     </message>
     <message>
         <source>Data corrupted</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαβρωμένα δεδομένα</translation>
     </message>
     <message>
         <source>Unknown protocol specified</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσδιορίστηκε άγνωστο πρωτόκολλο</translation>
     </message>
     <message>
         <source>SSL handshake failed</source>
-        <translation type="unfinished"></translation>
+        <translation>Η χειραψία SSL απέτυχε</translation>
     </message>
 </context>
 <context>
     <name>QHttpSocketEngine</name>
     <message>
         <source>Authentication required</source>
-        <translation type="unfinished">Απαιτείται αυθεντικοποίηση</translation>
+        <translation>Απαιτείται αυθεντικοποίηση</translation>
     </message>
 </context>
 <context>
     <name>QIBaseDriver</name>
     <message>
         <source>Error opening database</source>
-        <translation type="unfinished">Σφάλμα στο άνοιγμα της βάσης δεδομενων</translation>
+        <translation>Λάθος στο άνοιγμα της βάσης δεδομενων</translation>
     </message>
     <message>
         <source>Could not start transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκκίνηση συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η πραγραγματοποίηση συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to rollback transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
 </context>
 <context>
     <name>QIBaseResult</name>
     <message>
         <source>Unable to create BLOB</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η δημιουργία BLOB</translation>
+        <translation>Δεν ήταν δυνατή η δημιουργία BLOB</translation>
     </message>
     <message>
         <source>Unable to write BLOB</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εγγραφή BLOB</translation>
+        <translation>Δεν ήταν δυνατή η εγγραφή BLOB</translation>
     </message>
     <message>
         <source>Unable to open BLOB</source>
-        <translation type="unfinished">Δεν ήταν δυνατό το άνοιγμα BLOB</translation>
+        <translation>Δεν ήταν δυνατό το άνοιγμα BLOB</translation>
     </message>
     <message>
         <source>Unable to read BLOB</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η ανάγνωση BLOB</translation>
+        <translation>Δεν ήταν δυνατή η ανάγνωση BLOB</translation>
     </message>
     <message>
         <source>Could not find array</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εύρεση του πίνακα</translation>
+        <translation>Δεν ήταν δυνατή η εύρεση του πίνακα</translation>
     </message>
     <message>
         <source>Could not get array data</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απόκτηση δεδομένων πίνακα</translation>
+        <translation>Δεν ήταν δυνατή η απόκτηση δεδομένων πίνακα</translation>
     </message>
     <message>
         <source>Could not get query info</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απόκτηση πληροφοριών ερωτήματος</translation>
+        <translation>Δεν ήταν δυνατή η απόκτηση πληροφοριών ερωτήματος</translation>
     </message>
     <message>
         <source>Could not start transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Could not allocate statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατός ο εντοπισμός της πρότασης</translation>
+        <translation>Δεν ήταν δυνατός ο εντοπισμός της πρότασης</translation>
     </message>
     <message>
         <source>Could not prepare statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προετοιμασια της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
     </message>
     <message>
         <source>Could not describe input statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η περιγραφή της προτασης εισόδου</translation>
+        <translation>Δεν ήταν δυνατή η περιγραφή της πρότασης εισόδου</translation>
     </message>
     <message>
         <source>Could not describe statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η περιγραφή της προτασης</translation>
+        <translation>Δεν ήταν δυνατή η περιγραφή της πρότασης</translation>
     </message>
     <message>
         <source>Unable to close statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατό το κλείσιμο της πρότασης</translation>
+        <translation>Δεν ήταν δυνατό το κλείσιμο της πρότασης</translation>
     </message>
     <message>
         <source>Unable to execute query</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση του ερωτήματος</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση του ερωτήματος</translation>
     </message>
     <message>
         <source>Could not fetch next item</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απόκτηση του επόμενου αντικειμένου</translation>
+        <translation>Δεν ήταν δυνατή η απόκτηση του επόμενου αντικειμένου</translation>
     </message>
     <message>
         <source>Could not get statement info</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απόκτηση πληροφοριών πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η απόκτηση πληροφοριών πρότασης</translation>
     </message>
 </context>
 <context>
     <name>QIODevice</name>
     <message>
         <source>Permission denied</source>
-        <translation type="unfinished">Άρνηση άδειας</translation>
+        <translation>Άρνηση άδειας</translation>
     </message>
     <message>
         <source>Too many open files</source>
-        <translation type="unfinished">Πολλά ανοιχτα αρχεία</translation>
+        <translation>Πολλά ανοιχτά αρχεία</translation>
     </message>
     <message>
         <source>No such file or directory</source>
-        <translation type="unfinished">Δεν υπάρχει τέτοιο αρχείο ή φάκελος</translation>
+        <translation>Δεν υπάρχει τέτοιο αρχείο ή φάκελος</translation>
     </message>
     <message>
         <source>No space left on device</source>
-        <translation type="unfinished">Δεν υπάρχει χώρος στη συσκευή</translation>
+        <translation>Δεν υπάρχει χώρος στη συσκευή</translation>
     </message>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο πρόβλημα</translation>
+        <translation>Άγνωστο πρόβλημα</translation>
     </message>
 </context>
 <context>
     <name>QInputContext</name>
     <message>
         <source>XIM</source>
-        <translation type="unfinished">XIM</translation>
+        <translation>XIM</translation>
     </message>
     <message>
         <source>XIM input method</source>
-        <translation type="unfinished">XIM μέθοδος εισαγωγής</translation>
+        <translation>Μέθοδος εισαγωγής XIM</translation>
     </message>
     <message>
         <source>Windows input method</source>
-        <translation type="unfinished">Μέθοδος εισαγωγής Windows</translation>
+        <translation>Μέθοδος εισαγωγής Windows</translation>
     </message>
     <message>
         <source>Mac OS X input method</source>
-        <translation type="unfinished">MAC OS Χ μέθοδος εισαγωγής</translation>
+        <translation>Μέθοδος εισαγωγής MAC OS Χ</translation>
     </message>
 </context>
 <context>
     <name>QLibrary</name>
     <message>
         <source>QLibrary::load_sys: Cannot load %1 (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>QLibrary::load_sys: Δεν μπορεί να φορτωθεί %1 (%2)</translation>
     </message>
     <message>
         <source>QLibrary::unload_sys: Cannot unload %1 (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>QLibrary::load_sys: Δεν μπορεί να ξεφορτωθεί %1 (%2)</translation>
     </message>
     <message>
         <source>QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3)</source>
-        <translation type="unfinished"></translation>
+        <translation>QLibrary::resolve_sys: Το σύμβολο "%1" δεν είναι ορισμένο στο %2 (%3)</translation>
     </message>
     <message>
         <source>Could not mmap '%1': %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν γίνεται mmap '%1': %2</translation>
     </message>
     <message>
         <source>Plugin verification data mismatch in '%1'</source>
-        <translation type="unfinished">Δεδομένα επιβεβαίωσης plugin λανθασμένα στο '%1'</translation>
+        <translation>Δεδομένα επιβεβαίωσης plugin λανθασμένα στο '%1'</translation>
     </message>
     <message>
         <source>Could not unmap '%1': %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν γίνεται unmap '%1': %2</translation>
     </message>
     <message>
         <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source>
-        <translation type="unfinished">Το plugin '%1' χρησιμοποιεί μη συμβατή Qt βιβλιοθληκη.(%2.%3.%4)[%5]</translation>
+        <translation>Το plugin '%1' χρησιμοποιεί μη συμβατή Qt βιβλιοθήκη. (%2.%3.%4) [%5]</translation>
     </message>
     <message>
         <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source>
-        <translation type="unfinished">Το plugin '%1' χρησιμοποιεί μη συμβατή Qt βιβλιοθήκη. Αναμενόταν κλειδί  "%2" αντί του "%3"</translation>
+        <translation>Το plugin '%1' χρησιμοποιεί μη συμβατή Qt βιβλιοθήκη. Αναμενόταν κλειδί "%2" αντί του "%3"</translation>
     </message>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο προβλημα</translation>
+        <translation>Άγνωστο λάθος</translation>
     </message>
     <message>
         <source>The shared library was not found.</source>
-        <translation type="unfinished">Η κοινόχρηστη βιβλιοθήκη δεν βρέθηκε.</translation>
+        <translation>Η κοινόχρηστη βιβλιοθήκη δεν βρέθηκε.</translation>
     </message>
     <message>
         <source>The file '%1' is not a valid Qt plugin.</source>
-        <translation type="unfinished">Το αρχείο '%1' δεν είναι ένα έγκυρο Qt plugin.</translation>
+        <translation>Το αρχείο '%1' δεν είναι έγκυρο Qt plugin.</translation>
     </message>
     <message>
         <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
-        <translation type="unfinished">Το '%1' plugin χρησιμοποιεί μη συμβατή βιβλιοθήκη Qt.(Δεν ειναι δυνατή η πρόσμιξη βιβλιοθηκών αποσφαλμάτωσης και τελικών εκδόσεων)</translation>
+        <translation>Το '%1' plugin χρησιμοποιεί μη συμβατή βιβλιοθήκη Qt. (Δεν ειναι δυνατή η πρόσμιξη βιβλιοθηκών αποσφαλμάτωσης και τελικών εκδόσεων)</translation>
     </message>
 </context>
 <context>
     <name>QLineEdit</name>
     <message>
         <source>&Undo</source>
-        <translation type="unfinished">&Αναίρεση</translation>
+        <translation>&Αναίρεση</translation>
     </message>
     <message>
         <source>&Redo</source>
-        <translation type="unfinished">&Ακύρωση Αναίρεσης</translation>
+        <translation>&Ακύρωση Αναίρεσης</translation>
     </message>
     <message>
         <source>Cu&t</source>
-        <translation type="unfinished">Αποκοπ&ή</translation>
+        <translation>Αποκοπ&ή</translation>
     </message>
     <message>
         <source>&Copy</source>
-        <translation type="unfinished">&Αντιγραφή</translation>
+        <translation>&Αντιγραφή</translation>
     </message>
     <message>
         <source>&Paste</source>
-        <translation type="unfinished">&Επικόλληση</translation>
+        <translation>&Επικόλληση</translation>
     </message>
     <message>
         <source>Delete</source>
-        <translation type="unfinished">Διαγραφή</translation>
+        <translation>Διαγραφή</translation>
     </message>
     <message>
         <source>Select All</source>
-        <translation type="unfinished">Επιλογή Όλων</translation>
+        <translation>Επιλογή Όλων</translation>
     </message>
 </context>
 <context>
     <name>QLocalServer</name>
     <message>
         <source>%1: Name error</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Λάθος όνομα</translation>
     </message>
     <message>
         <source>%1: Permission denied</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Άρνηση άδειας</translation>
     </message>
     <message>
         <source>%1: Address in use</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Η διεύθυνση χρησιμοποιείται</translation>
     </message>
     <message>
         <source>%1: Unknown error %2</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Άγνωστο λάθος %2</translation>
     </message>
 </context>
 <context>
     <name>QLocalSocket</name>
     <message>
         <source>%1: Connection refused</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Άρνηση σύνδεσης</translation>
     </message>
     <message>
         <source>%1: Remote closed</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Απομακρυσμένος τερματισμός</translation>
     </message>
     <message>
         <source>%1: Invalid name</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Μη έγκυρο όνομα</translation>
     </message>
     <message>
         <source>%1: Socket access error</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Λάθος πρόσβασης socket</translation>
     </message>
     <message>
         <source>%1: Socket resource error</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Λάθος πόρων socket</translation>
     </message>
     <message>
         <source>%1: Socket operation timed out</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Η λειτουργία socket εξάντλησε το χρονικό περιθώριο</translation>
     </message>
     <message>
         <source>%1: Datagram too large</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Το Datagram είναι πολύ μεγάλο</translation>
     </message>
     <message>
         <source>%1: Connection error</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Λάθος στη σύνδεση</translation>
     </message>
     <message>
         <source>%1: The socket operation is not supported</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Η λειτουργεία socket δεν υποστηρίζεται</translation>
     </message>
     <message>
         <source>%1: Unknown error %2</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Άγνωστο λάθος %2</translation>
     </message>
 </context>
 <context>
     <name>QMYSQLDriver</name>
     <message>
         <source>Unable to open database '</source>
-        <translation type="unfinished">Δεν ήταν δυνατό το άνοιγμα της βάσης δεδομένων'</translation>
+        <translation>Δεν ήταν δυνατό το άνοιγμα της βάσης δεδομένων '</translation>
     </message>
     <message>
         <source>Unable to connect</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η σύνδεση</translation>
+        <translation>Δεν ήταν δυνατή η σύνδεση</translation>
     </message>
     <message>
         <source>Unable to begin transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκκίνηση συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η πραγματοποίηση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to rollback transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
 </context>
 <context>
     <name>QMYSQLResult</name>
     <message>
         <source>Unable to fetch data</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απόκτηση δεδομένων</translation>
+        <translation>Δεν ήταν δυνατή η απόκτηση δεδομένων</translation>
     </message>
     <message>
         <source>Unable to execute query</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση του ερωτήματος</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση του ερωτήματος</translation>
     </message>
     <message>
         <source>Unable to store result</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η αποθήκευση του αποτελέσματος</translation>
+        <translation>Δεν ήταν δυνατή η αποθήκευση του αποτελέσματος</translation>
     </message>
     <message>
         <source>Unable to prepare statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
     </message>
     <message>
         <source>Unable to reset statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η αρχικοποίηση της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η αρχικοποίηση της πρότασης</translation>
     </message>
     <message>
         <source>Unable to bind value</source>
-        <translation type="unfinished">Δεν ήταν δυνατός ο εγκλωβισμός της τιμής</translation>
+        <translation>Δεν ήταν δυνατή η δέσμευση της τιμής</translation>
     </message>
     <message>
         <source>Unable to execute statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
     </message>
     <message>
         <source>Unable to bind outvalues</source>
-        <translation type="unfinished">Δεν ήταν δυνατός ο εγκλωβισμός των εξωτερικών τιμών</translation>
+        <translation>Δεν ήταν δυνατή η δέσμευση των εξωτερικών τιμών</translation>
     </message>
     <message>
         <source>Unable to store statement results</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η αποθήκευση των αποτελεσμάτων της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η αποθήκευση των αποτελεσμάτων της πρότασης</translation>
     </message>
     <message>
         <source>Unable to execute next query</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση του επόμενου ερωτήματος</translation>
     </message>
     <message>
         <source>Unable to store next result</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η αποθήκευση του επόμενου αποτελέσματος</translation>
     </message>
 </context>
 <context>
     <name>QMdiArea</name>
     <message>
         <source>(Untitled)</source>
-        <translation type="unfinished"></translation>
+        <translation>(Χωρίς τίτλο)</translation>
     </message>
 </context>
 <context>
     <name>QMdiSubWindow</name>
     <message>
         <source>%1 - [%2]</source>
-        <translation type="unfinished">%1 - [%2]</translation>
+        <translation>%1 - [%2]</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Minimize</source>
-        <translation type="unfinished">Ελαχιστοποίηση</translation>
+        <translation>Ελαχιστοποίηση</translation>
     </message>
     <message>
         <source>Restore Down</source>
-        <translation type="unfinished">Επαναφορά Κάτω</translation>
+        <translation>Επαναφορά Κάτω</translation>
     </message>
     <message>
         <source>&Restore</source>
-        <translation type="unfinished">&Επαναφορά</translation>
+        <translation>&Επαναφορά</translation>
     </message>
     <message>
         <source>&Move</source>
-        <translation type="unfinished">&Μετακίνηση</translation>
+        <translation>&Μετακίνηση</translation>
     </message>
     <message>
         <source>&Size</source>
-        <translation type="unfinished">&Μέγεθος</translation>
+        <translation>&Μέγεθος</translation>
     </message>
     <message>
         <source>Mi&nimize</source>
-        <translation type="unfinished">Ε&λαχιστοποίηση</translation>
+        <translation>Ε&λαχιστοποίηση</translation>
     </message>
     <message>
         <source>Ma&ximize</source>
-        <translation type="unfinished">Μ&εγιστοποίηση</translation>
+        <translation>Μ&εγιστοποίηση</translation>
     </message>
     <message>
         <source>Stay on &Top</source>
-        <translation type="unfinished">Παραμονή στην &επιφάνεια</translation>
+        <translation>Παραμονή στην &επιφάνεια</translation>
     </message>
     <message>
         <source>&Close</source>
-        <translation type="unfinished">&Κλείσιμο</translation>
+        <translation>&Κλείσιμο</translation>
     </message>
     <message>
         <source>- [%1]</source>
-        <translation type="unfinished"></translation>
+        <translation>- [%1]</translation>
     </message>
     <message>
         <source>Maximize</source>
-        <translation type="unfinished">Μεγιστοποίηση</translation>
+        <translation>Μεγιστοποίηση</translation>
     </message>
     <message>
         <source>Unshade</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποσκίαση</translation>
     </message>
     <message>
         <source>Shade</source>
-        <translation type="unfinished"></translation>
+        <translation>Σκίαση</translation>
     </message>
     <message>
         <source>Restore</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά</translation>
     </message>
     <message>
         <source>Help</source>
-        <translation type="unfinished">Βοήθεια</translation>
+        <translation>Βοήθεια</translation>
     </message>
     <message>
         <source>Menu</source>
-        <translation type="unfinished">Μενού</translation>
+        <translation>Μενού</translation>
     </message>
 </context>
 <context>
     <name>QMenu</name>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Open</source>
-        <translation type="unfinished">Άνοιγμα</translation>
+        <translation>Άνοιγμα</translation>
     </message>
     <message>
         <source>Execute</source>
-        <translation type="unfinished">Εκτέλεση</translation>
+        <translation>Εκτέλεση</translation>
     </message>
 </context>
 <context>
     <name>QMessageBox</name>
     <message>
         <source>Help</source>
-        <translation type="unfinished">Βοήθεια</translation>
+        <translation>Βοήθεια</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished">Ναι</translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>About Qt</source>
-        <translation type="unfinished">πληροφορίες για το Qt</translation>
+        <translation>Πληροφορίες για το Qt</translation>
     </message>
     <message>
         <source><p>This program uses Qt version %1.</p></source>
-        <translation type="unfinished"><p>Αυτό το πρόγραμμα χρησιμοποιεί την έκδοση Qt %1. </p></translation>
+        <translation><p>Αυτό το πρόγραμμα χρησιμοποιεί την έκδοση Qt %1. </p></translation>
     </message>
     <message>
         <source>Show Details...</source>
-        <translation type="unfinished">Εμφάνιση λεπτομερειών...</translation>
+        <translation>Εμφάνιση λεπτομερειών...</translation>
     </message>
     <message>
         <source>Hide Details...</source>
-        <translation type="unfinished">Απόκρυψη πληροφοριών...</translation>
+        <translation>Απόκρυψη πληροφοριών...</translation>
     </message>
     <message>
         <source><p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> for an overview of Qt licensing.</p></source>
-        <translation type="unfinished"><p>Αυτο το πρόγραμμα χρησιμοποιεί την Qt Open Source Edition version %1.</p><p>Το Qt Open Source Edition αποσκοπεί στην ανάπτυξη Open Source εφαρμογών. Για την ανάπτυξη ιδιωτικών (closed source) εφαρμογών απαιτείται η εμπορική άδεια Qt</p><p>Για την επισκόπηση της Qt άδειας χρήσης δείτε <a  href="http://www.trolltech.com/company/model/' www.trolltech.com/company/model</a>.</p></translation>
+        <translation><p>Αυτο το πρόγραμμα χρησιμοποιεί την Qt Open Source Edition version %1.</p><p>Το Qt Open Source Edition αποσκοπεί στην ανάπτυξη Open Source εφαρμογών. Για την ανάπτυξη ιδιωτικών (closed source) εφαρμογών απαιτείται η εμπορική άδεια Qt</p><p>Για την επισκόπηση της Qt άδειας χρήσης δείτε <a  href="http://www.trolltech.com/company/model/' www.trolltech.com/company/model</a>.</p></translation>
     </message>
     <message>
         <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/&l [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>Σχετικά με το Qt</h3>%1<p>Το Qt είναι μια εργαλειοθήκη C++ για ανάπτυξη πολυ-πλατφορμικών εφαρμογών.</p><p>Το Qt προσφέρει μίας-πηγής φορητότητα σε MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, και όλες τις μεγάλες εμπορικές εκδόσεις Unix. Το Qt είναι επίσης διαθέσιμο για ενσωματωμένες συσκευές όπως το Qt for Embedded Linux και το Qt for Windows CE.</p><p>Το Qt είναι ένα προϊόν της Nokia. Για περισότερες πληροφο [...]
     </message>
 </context>
 <context>
     <name>QMultiInputContext</name>
     <message>
         <source>Select IM</source>
-        <translation type="unfinished">Επιλογή ΙΜ</translation>
+        <translation>Επιλογή ΙΜ</translation>
     </message>
 </context>
 <context>
     <name>QMultiInputContextPlugin</name>
     <message>
         <source>Multiple input method switcher</source>
-        <translation type="unfinished">Επιλογέας πολλαπλών μεθόδων εισαγωγής</translation>
+        <translation>Επιλογέας πολλαπλών μεθόδων εισαγωγής</translation>
     </message>
     <message>
         <source>Multiple input method switcher that uses the context menu of the text widgets</source>
-        <translation type="unfinished">Επιλογέας πολλαπλών μεθόδων εισαγωγής που χρησιμοποιεί το μενού των εργαλείων κειμένου</translation>
+        <translation>Επιλογέας πολλαπλών μεθόδων εισαγωγής που χρησιμοποιεί το μενού των εργαλείων κειμένου</translation>
     </message>
 </context>
 <context>
     <name>QNativeSocketEngine</name>
     <message>
         <source>The remote host closed the connection</source>
-        <translation type="unfinished">Ο απομακρυσμένος διακομιστής τερμάτισε τη συνδεση</translation>
+        <translation>Ο απομακρυσμένος διακομιστής τερμάτισε τη σύνδεση</translation>
     </message>
     <message>
         <source>Network operation timed out</source>
-        <translation type="unfinished">Η δικτυακή εργασία έληξε</translation>
+        <translation>Η δικτυακή λειτουργία εξάντλησε το χρονικό περιθώριο</translation>
     </message>
     <message>
         <source>Out of resources</source>
-        <translation type="unfinished">Δεν υπάρχουν πόροι</translation>
+        <translation>Δεν υπάρχουν πόροι</translation>
     </message>
     <message>
         <source>Unsupported socket operation</source>
-        <translation type="unfinished">Μη υποστηριζομενη εργασία socket</translation>
+        <translation>Μη υποστηριζόμενη εργασία socket</translation>
     </message>
     <message>
         <source>Protocol type not supported</source>
-        <translation type="unfinished">Μη υποστηριζόμενος τύπος πρωτοκόλλου</translation>
+        <translation>Μη υποστηριζόμενος τύπος πρωτοκόλλου</translation>
     </message>
     <message>
         <source>Invalid socket descriptor</source>
-        <translation type="unfinished">Μη έγκυρος περιγραφέας socket</translation>
+        <translation>Μη έγκυρη οπεριγραφή socket</translation>
     </message>
     <message>
         <source>Network unreachable</source>
-        <translation type="unfinished">Απροσπέλαστο δικτυο</translation>
+        <translation>Απροσπέλαστο δίκτυο</translation>
     </message>
     <message>
         <source>Permission denied</source>
-        <translation type="unfinished">Άρνηση άδειας</translation>
+        <translation>Άρνηση άδειας</translation>
     </message>
     <message>
         <source>Connection timed out</source>
-        <translation type="unfinished">Η σύνδεση τερματίστηκε λόγω καθυστέρησης</translation>
+        <translation>Η σύνδεση τερματίστηκε λόγω καθυστέρησης</translation>
     </message>
     <message>
         <source>Connection refused</source>
-        <translation type="unfinished">Άρνηση συνδεσης</translation>
+        <translation>Άρνηση σύνδεσης</translation>
     </message>
     <message>
         <source>The bound address is already in use</source>
-        <translation type="unfinished">Η διεύθυνση συνδεσης χρησιμοποιειται ήδη</translation>
+        <translation>Η διεύθυνση σύνδεσης χρησιμοποιείται ήδη</translation>
     </message>
     <message>
         <source>The address is not available</source>
-        <translation type="unfinished">Η διεύθυνση δεν ειναι διαθέσιμη</translation>
+        <translation>Η διεύθυνση δεν είναι διαθέσιμη</translation>
     </message>
     <message>
         <source>The address is protected</source>
-        <translation type="unfinished">Η διεύθυνση είναι προστατευμένη</translation>
+        <translation>Η διεύθυνση είναι προστατευμένη</translation>
     </message>
     <message>
         <source>Unable to send a message</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η αποστολή μηνύματος
-</translation>
+        <translation>Δεν ήταν δυνατή η αποστολή μηνύματος</translation>
     </message>
     <message>
         <source>Unable to receive a message</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η λήψη μηνύματος</translation>
+        <translation>Δεν ήταν δυνατή η λήψη μηνύματος</translation>
     </message>
     <message>
         <source>Unable to write</source>
-        <translation type="unfinished">Αδύνατη η εγγραφή</translation>
+        <translation>Αδύνατη η εγγραφή</translation>
     </message>
     <message>
         <source>Network error</source>
-        <translation type="unfinished">Πρόβλημα με το δίκτυο</translation>
+        <translation>Πρόβλημα δικτύου</translation>
     </message>
     <message>
         <source>Another socket is already listening on the same port</source>
-        <translation type="unfinished">Ένα άλλο socket είναι ήδη σε κατάσταση αναμονής στη συγκεκριμένη πόρτα</translation>
+        <translation>Ένα άλλο socket είναι ήδη σε κατάσταση αναμονής στη συγκεκριμένη πόρτα</translation>
     </message>
     <message>
         <source>Unable to initialize non-blocking socket</source>
-        <translation type="unfinished">Δεν ήταν δυνατή α αρχικοποίηση non-blocking socket</translation>
+        <translation>Δεν ήταν δυνατή η αρχικοποίηση non-blocking socket</translation>
     </message>
     <message>
         <source>Unable to initialize broadcast socket</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η αρχικοποίηση broadcast socket</translation>
+        <translation>Δεν ήταν δυνατή η αρχικοποίηση broadcast socket</translation>
     </message>
     <message>
         <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
-        <translation type="unfinished">Προσπάθεια χρήσης IPv6 socket σε πλατφόρμα που δεν υποστηρίζει IPv6</translation>
+        <translation>Προσπάθεια χρήσης IPv6 socket σε πλατφόρμα που δεν υποστηρίζει IPv6</translation>
     </message>
     <message>
         <source>Host unreachable</source>
-        <translation type="unfinished">Διακομιστής απροσπέλαστος</translation>
+        <translation>Απροσπέλαστος διακομιστής</translation>
     </message>
     <message>
         <source>Datagram was too large to send</source>
-        <translation type="unfinished">Το Datagram ήταν πολύ μεγάλο για να σταλεί</translation>
+        <translation>Το Datagram ήταν πολύ μεγάλο για να σταλεί</translation>
     </message>
     <message>
         <source>Operation on non-socket</source>
-        <translation type="unfinished">Λειτουργια σε non-socket</translation>
+        <translation>Λειτουργία σε non-socket</translation>
     </message>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο πρόβλημα</translation>
+        <translation>Άγνωστο λάθος</translation>
     </message>
     <message>
         <source>The proxy type is invalid for this operation</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο μεσολαβητής δεν είναι έγκυρος για αυτή τη λειτουργία</translation>
     </message>
 </context>
 <context>
     <name>QNetworkAccessFileBackend</name>
     <message>
         <source>Request for opening non-local file %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Αίτημα για άνοιγμα μη-τοπικού αρχείου %1</translation>
     </message>
     <message>
         <source>Error opening %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος στο άνοιγμα %1: %2</translation>
     </message>
     <message>
         <source>Write error writing to %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος εγγραφής γράφοντας το %1: %2</translation>
     </message>
     <message>
         <source>Cannot open %1: Path is a directory</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν μπορεί να ανοίξει %1: Η διαδρομή είναι φάκελος</translation>
     </message>
     <message>
         <source>Read error reading from %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος ανάγνωσης διαβάζοντας το %1: %2</translation>
     </message>
 </context>
 <context>
     <name>QNetworkAccessFtpBackend</name>
     <message>
         <source>Cannot open %1: is a directory</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν μπορεί να ανοίξει το %1: είναι φάκελος</translation>
     </message>
     <message>
         <source>Logging in to %1 failed: authentication required</source>
-        <translation type="unfinished"></translation>
+        <translation>Η σύνδεση στο %1 απέτυχε: απαιτείται αυθεντικοποίηση</translation>
     </message>
     <message>
         <source>Error while downloading %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος στο κατέβασμα %1: %2</translation>
     </message>
     <message>
         <source>Error while uploading %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος στο ανέβασμα %1: %2</translation>
     </message>
 </context>
 <context>
     <name>QNetworkReply</name>
     <message>
         <source>Error downloading %1 - server replied: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος στο κατέβασμα %1 - ο διακομιστής απάντησε %2</translation>
     </message>
     <message>
         <source>Protocol "%1" is unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>Το πρωτόκολλο "%1" είναι άγνωστο</translation>
     </message>
 </context>
 <context>
     <name>QNetworkReplyImpl</name>
     <message>
         <source>Operation canceled</source>
-        <translation type="unfinished"></translation>
+        <translation>Η λειτουργία ακυρώθηκε</translation>
     </message>
 </context>
 <context>
     <name>QOCIDriver</name>
     <message>
         <source>Unable to logon</source>
-        <translation type="unfinished">Αδύνατη η συνδεση</translation>
+        <translation>Αδύνατη η σύνδεση</translation>
     </message>
     <message>
         <source>Unable to initialize</source>
         <comment>QOCIDriver</comment>
-        <translation type="unfinished">Αδύνατη η αρχικοποίηση</translation>
+        <translation>Αδύνατη η αρχικοποίηση</translation>
     </message>
     <message>
         <source>Unable to begin transaction</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
 </context>
 <context>
     <name>QOCIResult</name>
     <message>
         <source>Unable to bind column for batch execute</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η δέσμευση της στήλης για την εκτέλεση της δέσμης</translation>
+        <translation>Δεν ήταν δυνατή η δέσμευση της στήλης για την εκτέλεση της δέσμης</translation>
     </message>
     <message>
         <source>Unable to execute batch statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της προτασης της δέσμης</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης της δέσμης</translation>
     </message>
     <message>
         <source>Unable to goto next</source>
-        <translation type="unfinished">Δεν ήταν δυνατη η συνέχιση στο επόμενο</translation>
+        <translation>Δεν ήταν δυνατή η συνέχιση στο επόμενο</translation>
     </message>
     <message>
         <source>Unable to alloc statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατός ο εντοπισμός της πρότασης</translation>
+        <translation>Δεν ήταν δυνατός ο εντοπισμός της πρότασης</translation>
     </message>
     <message>
         <source>Unable to prepare statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
     </message>
     <message>
         <source>Unable to bind value</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η δέσμευση της τιμής</translation>
+        <translation>Δεν ήταν δυνατή η δέσμευση της τιμής</translation>
     </message>
     <message>
         <source>Unable to execute select statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της πρότασης επιλογής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης επιλογής</translation>
     </message>
     <message>
         <source>Unable to execute statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
     </message>
 </context>
 <context>
     <name>QODBCDriver</name>
     <message>
         <source>Unable to connect</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η σύνδεση</translation>
+        <translation>Δεν ήταν δυνατή η σύνδεση</translation>
     </message>
     <message>
         <source>Unable to connect - Driver doesn't support all needed functionality</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η σύνδεση - Ο οδηγός δεν υποστηρίζει την απαραίτητη λειτουργία</translation>
+        <translation>Δεν ήταν δυνατή η σύνδεση - Ο οδηγός δεν υποστηρίζει την απαραίτητη λειτουργικότητα</translation>
     </message>
     <message>
         <source>Unable to disable autocommit</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απενεργοποίηση του αυτόματου ορισμού</translation>
+        <translation>Δεν ήταν δυνατή η απενεργοποίηση του αυτόματου ορισμού</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η συνδιαλλαγή</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to rollback transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατη η ακύρωση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to enable autocommit</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η ενεργοποίηση του αυτόματου ορισμού</translation>
+        <translation>Δεν ήταν δυνατή η ενεργοποίηση του αυτόματου ορισμού</translation>
     </message>
 </context>
 <context>
     <name>QODBCResult</name>
     <message>
         <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source>
-        <translation type="unfinished">QODBCResult: Δεν ήταν δυνατός ο ορισμός του 'SQL_CURSOS_STATIC' σαν παράμετρο της πρότασης. Ελέγξτε τις ρυθμίσεις του οδηγού ODBC</translation>
+        <translation>QODBCResult: Δεν ήταν δυνατός ο ορισμός του 'SQL_CURSOS_STATIC' σαν παράμετρο της πρότασης. Ελέγξτε τις ρυθμίσεις του οδηγού ODBC</translation>
     </message>
     <message>
         <source>Unable to execute statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
     </message>
     <message>
         <source>Unable to fetch next</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απόκτηση του επόμενου</translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση του επόμενου</translation>
     </message>
     <message>
         <source>Unable to prepare statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προετοιμασια της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
     </message>
     <message>
         <source>Unable to bind variable</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η δέσμευση της τιμής</translation>
+        <translation>Δεν ήταν δυνατή η δέσμευση της τιμής</translation>
     </message>
     <message>
         <source>Unable to fetch last</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση του τελευταίου</translation>
     </message>
     <message>
         <source>Unable to fetch</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση</translation>
     </message>
     <message>
         <source>Unable to fetch first</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η προσκόμιση του πρώτου</translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση του πρώτου</translation>
     </message>
     <message>
         <source>Unable to fetch previous</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση του προηγούμενου</translation>
     </message>
 </context>
 <context>
     <name>QObject</name>
     <message>
         <source>Operation not supported on %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Η λειτουργία δεν υποστηρίζεται στο %1</translation>
     </message>
     <message>
         <source>Invalid URI: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη έγκυρο URI: %1</translation>
     </message>
     <message>
         <source>Write error writing to %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος εγγραφής γράφοντας το %1: %2</translation>
     </message>
     <message>
         <source>Read error reading from %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος ανάγνωσης διαβάζοντας το %1: %2</translation>
     </message>
     <message>
         <source>Socket error on %1: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος socket στο %1: %2</translation>
     </message>
     <message>
         <source>Remote host closed the connection prematurely on %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο απομακρυσμένος διακομιστής τερμάτισε τη σύνδεση πρόωρα στο %1</translation>
     </message>
     <message>
         <source>Protocol error: packet of size 0 received</source>
-        <translation type="unfinished"></translation>
+        <translation>Λάθος πρωτοκόλλου: ελήφθη πακέτο μεγέθους 0</translation>
     </message>
 </context>
 <context>
     <name>QPPDOptionsModel</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Value</source>
-        <translation type="unfinished">Τιμή</translation>
+        <translation>Τιμή</translation>
     </message>
 </context>
 <context>
     <name>QPSQLDriver</name>
     <message>
         <source>Unable to connect</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η σύνδεση</translation>
+        <translation>Δεν ήταν δυνατή η σύνδεση</translation>
     </message>
     <message>
         <source>Could not begin transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Could not commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η ολοκλήρωση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Could not rollback transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η  ακύρωση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to subscribe</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η συνδρομή</translation>
     </message>
     <message>
         <source>Unable to unsubscribe</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η αποσυνδρομή</translation>
     </message>
 </context>
 <context>
     <name>QPSQLResult</name>
     <message>
         <source>Unable to create query</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η δημιουργία του ερωτήματος</translation>
+        <translation>Δεν ήταν δυνατή η δημιουργία του ερωτήματος</translation>
     </message>
     <message>
         <source>Unable to prepare statement</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η προετοιμασία της πρότασης</translation>
     </message>
 </context>
 <context>
     <name>QPageSetupWidget</name>
     <message>
         <source>Centimeters (cm)</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκατοστά (cm)</translation>
     </message>
     <message>
         <source>Millimeters (mm)</source>
-        <translation type="unfinished"></translation>
+        <translation>Χιλιοστά (mm)</translation>
     </message>
     <message>
         <source>Inches (in)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ίντσες (in)</translation>
     </message>
     <message>
         <source>Points (pt)</source>
-        <translation type="unfinished"></translation>
+        <translation>Σημεία (pt)</translation>
     </message>
     <message>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Φόρμα</translation>
     </message>
     <message>
         <source>Paper</source>
-        <translation type="unfinished"></translation>
+        <translation>Χαρτί</translation>
     </message>
     <message>
         <source>Page size:</source>
-        <translation type="unfinished">Μέγεθος σελίδας :</translation>
+        <translation>Μέγεθος σελίδας:</translation>
     </message>
     <message>
         <source>Width:</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλάτος:</translation>
     </message>
     <message>
         <source>Height:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ύψος:</translation>
     </message>
     <message>
         <source>Paper source:</source>
-        <translation type="unfinished">Πηγή χαρτιού :</translation>
+        <translation>Πηγή χαρτιού:</translation>
     </message>
     <message>
         <source>Orientation</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσανατολισμός</translation>
     </message>
     <message>
         <source>Portrait</source>
-        <translation type="unfinished">Οριζόντιος</translation>
+        <translation>Οριζόντιος</translation>
     </message>
     <message>
         <source>Landscape</source>
-        <translation type="unfinished">Κάθετος</translation>
+        <translation>Κάθετος</translation>
     </message>
     <message>
         <source>Reverse landscape</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντίστροφο κάθετο</translation>
     </message>
     <message>
         <source>Reverse portrait</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντίστροφο οριζόντιο</translation>
     </message>
     <message>
         <source>Margins</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιθώρια</translation>
     </message>
     <message>
         <source>top margin</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιθώριο πάνω</translation>
     </message>
     <message>
         <source>left margin</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιθώριο αριστερά</translation>
     </message>
     <message>
         <source>right margin</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιθώριο δεξιά</translation>
     </message>
     <message>
         <source>bottom margin</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιθώριο κάτω</translation>
     </message>
 </context>
 <context>
     <name>QPluginLoader</name>
     <message>
         <source>Unknown error</source>
-        <translation type="unfinished">Άγνωστο πρόβλημα</translation>
+        <translation>Άγνωστο λάθος</translation>
     </message>
     <message>
         <source>The plugin was not loaded.</source>
-        <translation type="unfinished">Το plugin δεν έχει φορτωθεί</translation>
+        <translation>Το plugin δεν έχει φορτωθεί.</translation>
     </message>
 </context>
 <context>
     <name>QPrintDialog</name>
     <message>
         <source>locally connected</source>
-        <translation type="unfinished">Συνδεδεμένος τοπικά</translation>
+        <translation>Συνδεδεμένος τοπικά</translation>
     </message>
     <message>
         <source>Aliases: %1</source>
-        <translation type="unfinished">Αναγνωριστικό : %1</translation>
+        <translation>Αναγνωριστικό : %1</translation>
     </message>
     <message>
         <source>unknown</source>
-        <translation type="unfinished">άγνωστο</translation>
+        <translation>άγνωστο</translation>
     </message>
     <message>
         <source>Print To File ...</source>
-        <translation type="unfinished">Εκτύπωση σε αρχείο ...</translation>
+        <translation>Εκτύπωση σε αρχείο ...</translation>
     </message>
     <message>
         <source>File %1 is not writable.
 Please choose a different file name.</source>
-        <translation type="unfinished">Το αρχείο %1 δεν μπορεί να εγγραφεί.
+        <translation>Το αρχείο %1 δεν μπορεί να εγγραφεί.
 Παρακαλώ διαλέξτε άλλο όνομα αρχείου.</translation>
     </message>
     <message>
         <source>%1 already exists.
 Do you want to overwrite it?</source>
-        <translation type="unfinished">%1 υπάρχει ήδη.
+        <translation>%1 υπάρχει ήδη.
 Θέλετε να επαναγραφτεί ?</translation>
     </message>
     <message>
         <source>%1 is a directory.
 Please choose a different file name.</source>
-        <translation type="unfinished">%1 είναι φάκελος.
+        <translation>%1 είναι φάκελος.
 Παρακαλώ διαλέξτε άλλο όνομα αρχείου.</translation>
     </message>
     <message>
         <source>A0</source>
-        <translation type="unfinished"></translation>
+        <translation>A0</translation>
     </message>
     <message>
         <source>A1</source>
-        <translation type="unfinished"></translation>
+        <translation>A1</translation>
     </message>
     <message>
         <source>A2</source>
-        <translation type="unfinished"></translation>
+        <translation>A2</translation>
     </message>
     <message>
         <source>A3</source>
-        <translation type="unfinished"></translation>
+        <translation>A3</translation>
     </message>
     <message>
         <source>A4</source>
-        <translation type="unfinished"></translation>
+        <translation>A4</translation>
     </message>
     <message>
         <source>A5</source>
-        <translation type="unfinished"></translation>
+        <translation>A5</translation>
     </message>
     <message>
         <source>A6</source>
-        <translation type="unfinished"></translation>
+        <translation>A6</translation>
     </message>
     <message>
         <source>A7</source>
-        <translation type="unfinished"></translation>
+        <translation>A7</translation>
     </message>
     <message>
         <source>A8</source>
-        <translation type="unfinished"></translation>
+        <translation>A8</translation>
     </message>
     <message>
         <source>A9</source>
-        <translation type="unfinished"></translation>
+        <translation>A9</translation>
     </message>
     <message>
         <source>B0</source>
-        <translation type="unfinished"></translation>
+        <translation>B0</translation>
     </message>
     <message>
         <source>B1</source>
-        <translation type="unfinished"></translation>
+        <translation>B1</translation>
     </message>
     <message>
         <source>B2</source>
-        <translation type="unfinished"></translation>
+        <translation>B2</translation>
     </message>
     <message>
         <source>B3</source>
-        <translation type="unfinished"></translation>
+        <translation>B3</translation>
     </message>
     <message>
         <source>B4</source>
-        <translation type="unfinished"></translation>
+        <translation>B4</translation>
     </message>
     <message>
         <source>B5</source>
-        <translation type="unfinished"></translation>
+        <translation>B5</translation>
     </message>
     <message>
         <source>B6</source>
-        <translation type="unfinished"></translation>
+        <translation>B6</translation>
     </message>
     <message>
         <source>B7</source>
-        <translation type="unfinished"></translation>
+        <translation>B7</translation>
     </message>
     <message>
         <source>B8</source>
-        <translation type="unfinished"></translation>
+        <translation>B8</translation>
     </message>
     <message>
         <source>B9</source>
-        <translation type="unfinished"></translation>
+        <translation>B9</translation>
     </message>
     <message>
         <source>B10</source>
-        <translation type="unfinished"></translation>
+        <translation>B10</translation>
     </message>
     <message>
         <source>C5E</source>
-        <translation type="unfinished"></translation>
+        <translation>C5E</translation>
     </message>
     <message>
         <source>DLE</source>
-        <translation type="unfinished"></translation>
+        <translation>DLE</translation>
     </message>
     <message>
         <source>Executive</source>
-        <translation type="unfinished"></translation>
+        <translation>Executive</translation>
     </message>
     <message>
         <source>Folio</source>
-        <translation type="unfinished"></translation>
+        <translation>Folio</translation>
     </message>
     <message>
         <source>Ledger</source>
-        <translation type="unfinished"></translation>
+        <translation>Folio</translation>
     </message>
     <message>
         <source>Legal</source>
-        <translation type="unfinished"></translation>
+        <translation>US Legal</translation>
     </message>
     <message>
         <source>Letter</source>
-        <translation type="unfinished"></translation>
+        <translation>US Letter</translation>
     </message>
     <message>
         <source>Tabloid</source>
-        <translation type="unfinished"></translation>
+        <translation>Ταμπλόιντ</translation>
     </message>
     <message>
         <source>US Common #10 Envelope</source>
-        <translation type="unfinished"></translation>
+        <translation>Φάκελος #10</translation>
     </message>
     <message>
         <source>Custom</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσαρμοσμένο</translation>
     </message>
     <message>
         <source>&Options >></source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογές >></translation>
     </message>
     <message>
         <source>&Print</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκτύπωση</translation>
     </message>
     <message>
         <source>&Options <<</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογές <<</translation>
     </message>
     <message>
         <source>Print to File (PDF)</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκτύπωση σε αρχείο (PDF)</translation>
     </message>
     <message>
         <source>Print to File (Postscript)</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκτύπωση σε αρχείο (Postscript)</translation>
     </message>
     <message>
         <source>Local file</source>
-        <translation type="unfinished"></translation>
+        <translation>Τοπικό αρχείο</translation>
     </message>
     <message>
         <source>Write %1 file</source>
-        <translation type="unfinished"></translation>
+        <translation>Εγγραφή %1 σε αρχείο</translation>
     </message>
 </context>
 <context>
     <name>QPrintPreviewDialog</name>
     <message>
         <source>Page Setup</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαμόρφωση σελίδας</translation>
     </message>
     <message>
         <source>Print Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>Προεπισκόπηση εκτύπωσης</translation>
     </message>
     <message>
         <source>Next page</source>
-        <translation type="unfinished"></translation>
+        <translation>Επόμενη σελίδα</translation>
     </message>
     <message>
         <source>Previous page</source>
-        <translation type="unfinished"></translation>
+        <translation>Προηγούμενη σελίδα</translation>
     </message>
     <message>
         <source>First page</source>
-        <translation type="unfinished"></translation>
+        <translation>Πρώτη σελίδα</translation>
     </message>
     <message>
         <source>Last page</source>
-        <translation type="unfinished"></translation>
+        <translation>Τελευταία σελίδα</translation>
     </message>
     <message>
         <source>Fit width</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσαρμογή πλάτους</translation>
     </message>
     <message>
         <source>Fit page</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσαρμογή σελίδας</translation>
     </message>
     <message>
         <source>Zoom in</source>
-        <translation type="unfinished"></translation>
+        <translation>Μεγένθυση</translation>
     </message>
     <message>
         <source>Zoom out</source>
-        <translation type="unfinished"></translation>
+        <translation>Σμίκρυνση</translation>
     </message>
     <message>
         <source>Portrait</source>
-        <translation type="unfinished">Οριζόντιος</translation>
+        <translation>Οριζόντιος</translation>
     </message>
     <message>
         <source>Landscape</source>
-        <translation type="unfinished">Κάθετος</translation>
+        <translation>Κάθετος</translation>
     </message>
     <message>
         <source>Show single page</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση μίας σελίδας</translation>
     </message>
     <message>
         <source>Show facing pages</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση αντικρυστών σελίδων</translation>
     </message>
     <message>
         <source>Show overview of all pages</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση επισκόπησης όλων των σελίδων</translation>
     </message>
     <message>
         <source>Print</source>
-        <translation type="unfinished">Print</translation>
+        <translation>Εκτύπωση</translation>
     </message>
     <message>
         <source>Page setup</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαμόρφωση σελίδας</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
 </context>
 <context>
     <name>QPrintPropertiesWidget</name>
     <message>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Φόρμα</translation>
     </message>
     <message>
         <source>Page</source>
-        <translation type="unfinished"></translation>
+        <translation>Σελίδα</translation>
     </message>
     <message>
         <source>Advanced</source>
-        <translation type="unfinished"></translation>
+        <translation>Προχωρημένα</translation>
     </message>
 </context>
 <context>
     <name>QPrintSettingsOutput</name>
     <message>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Φόρμα</translation>
     </message>
     <message>
         <source>Copies</source>
-        <translation type="unfinished">Αντίγραφα</translation>
+        <translation>Αντίγραφα</translation>
     </message>
     <message>
         <source>Print range</source>
-        <translation type="unfinished">Περιοχή εκτύπωσης</translation>
+        <translation>Περιοχή εκτύπωσης</translation>
     </message>
     <message>
         <source>Print all</source>
-        <translation type="unfinished">Εκτύπωση όλων</translation>
+        <translation>Εκτύπωση όλων</translation>
     </message>
     <message>
         <source>Pages from</source>
-        <translation type="unfinished">Σελίδες από </translation>
+        <translation>Σελίδες από </translation>
     </message>
     <message>
         <source>to</source>
-        <translation type="unfinished">εώς</translation>
+        <translation>έως</translation>
     </message>
     <message>
         <source>Selection</source>
-        <translation type="unfinished">Επιλογή</translation>
+        <translation>Επιλογή</translation>
     </message>
     <message>
         <source>Output Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Προτιμήσεις εξόδου</translation>
     </message>
     <message>
         <source>Copies:</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντίγραφα:</translation>
     </message>
     <message>
         <source>Collate</source>
-        <translation type="unfinished">Κατάταξη</translation>
+        <translation>Κατάταξη</translation>
     </message>
     <message>
         <source>Reverse</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντίστροφα</translation>
     </message>
     <message>
         <source>Options</source>
-        <translation type="unfinished">Επιλογές</translation>
+        <translation>Επιλογές</translation>
     </message>
     <message>
         <source>Color Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Έγχρωμη</translation>
     </message>
     <message>
         <source>Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Χρώμα</translation>
     </message>
     <message>
         <source>Grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Ασπρόμαυρη</translation>
     </message>
     <message>
         <source>Duplex Printing</source>
-        <translation type="unfinished"></translation>
+        <translation>Διπλοεκτύπωση</translation>
     </message>
     <message>
         <source>None</source>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία</translation>
     </message>
     <message>
         <source>Long side</source>
@@ -3071,246 +3076,246 @@ Please choose a different file name.</source>
     <name>QPrintWidget</name>
     <message>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Φόρμα</translation>
     </message>
     <message>
         <source>Printer</source>
-        <translation type="unfinished">Εκτυπωτής</translation>
+        <translation>Εκτυπωτής</translation>
     </message>
     <message>
         <source>&Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Όνομα:</translation>
     </message>
     <message>
         <source>P&roperties</source>
-        <translation type="unfinished"></translation>
+        <translation>Ιδιότητες</translation>
     </message>
     <message>
         <source>Location:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τοποθεσία:</translation>
     </message>
     <message>
         <source>Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>Προεπισκόπηση</translation>
     </message>
     <message>
         <source>Type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος:</translation>
     </message>
     <message>
         <source>Output &file:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα αρχείου:</translation>
     </message>
     <message>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
 </context>
 <context>
     <name>QProgressDialog</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Άκυρο</translation>
+        <translation>Άκυρο</translation>
     </message>
 </context>
 <context>
     <name>QPushButton</name>
     <message>
         <source>Open</source>
-        <translation type="unfinished">Άνοιγμα</translation>
+        <translation>Άνοιγμα</translation>
     </message>
 </context>
 <context>
     <name>QRadioButton</name>
     <message>
         <source>Check</source>
-        <translation type="unfinished">Έλεγχος</translation>
+        <translation>Έλεγχος</translation>
     </message>
 </context>
 <context>
     <name>QRegExp</name>
     <message>
         <source>no error occurred</source>
-        <translation type="unfinished">δεν δημιουργήθηκαν προβλήματα</translation>
+        <translation>δεν δημιουργήθηκαν προβλήματα</translation>
     </message>
     <message>
         <source>disabled feature used</source>
-        <translation type="unfinished">χρησιμοποιήθηκε απενεργοποιημένο χαρακτηριστικό</translation>
+        <translation>χρησιμοποιήθηκε απενεργοποιημένο χαρακτηριστικό</translation>
     </message>
     <message>
         <source>bad char class syntax</source>
-        <translation type="unfinished">λανθασμένη σύνταξη char class</translation>
+        <translation>λανθασμένη σύνταξη char class</translation>
     </message>
     <message>
         <source>bad lookahead syntax</source>
-        <translation type="unfinished">λανθασμένη σύνταξη lookahead</translation>
+        <translation>λανθασμένη σύνταξη lookahead</translation>
     </message>
     <message>
         <source>bad repetition syntax</source>
-        <translation type="unfinished">λανθασμένη σύνταξη repetition</translation>
+        <translation>λανθασμένη σύνταξη repetition</translation>
     </message>
     <message>
         <source>invalid octal value</source>
-        <translation type="unfinished">με έγκυρη τιμή octal</translation>
+        <translation>μη έγκυρη τιμή octal</translation>
     </message>
     <message>
         <source>missing left delim</source>
-        <translation type="unfinished">απουσία αριστερού delim</translation>
+        <translation>απουσία αριστερού delim</translation>
     </message>
     <message>
         <source>unexpected end</source>
-        <translation type="unfinished">απροσδόκητο τέλος</translation>
+        <translation>απροσδόκητο τέλος</translation>
     </message>
     <message>
         <source>met internal limit</source>
-        <translation type="unfinished">συνάντηση εσωτερικού οριου</translation>
+        <translation>συνάντηση εσωτερικού ορίου</translation>
     </message>
 </context>
 <context>
     <name>QSQLite2Driver</name>
     <message>
         <source>Error to open database</source>
-        <translation type="unfinished">Δεν ήταν δυνατό το άνοιγμα της βιβλιοθήκης</translation>
+        <translation>Λάθος στο άνοιγμα της βάσης δεδομένων</translation>
     </message>
     <message>
         <source>Unable to begin transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η πραγματοποιήση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to rollback Transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η αναίρεση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
 </context>
 <context>
     <name>QSQLite2Result</name>
     <message>
         <source>Unable to fetch results</source>
-        <translation type="unfinished">Δεν ήταν δυνατή α απόκτηση των αποτελεσμάτων</translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση των αποτελεσμάτων</translation>
     </message>
     <message>
         <source>Unable to execute statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
     </message>
 </context>
 <context>
     <name>QSQLiteDriver</name>
     <message>
         <source>Error opening database</source>
-        <translation type="unfinished">Πρόβλημα στο άνοιγμα της βάσης δεδομένων</translation>
+        <translation>Λάθος στο άνοιγμα της βάσης δεδομένων</translation>
     </message>
     <message>
         <source>Error closing database</source>
-        <translation type="unfinished">Προβλημα στο κλείσιμο της βάσης δεδομένων</translation>
+        <translation>Λάθος στο κλείσιμο της βάσης δεδομένων</translation>
     </message>
     <message>
         <source>Unable to begin transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκκίνηση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to commit transaction</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η πραγματοποίηση της συνδιαλλαγής</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της συνδιαλλαγής</translation>
     </message>
     <message>
         <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν ήταν δυνατή η ακύρωση της συνδιαλλαγής</translation>
     </message>
 </context>
 <context>
     <name>QSQLiteResult</name>
     <message>
         <source>Unable to fetch row</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η απόκτηση της σειράς</translation>
+        <translation>Δεν ήταν δυνατή η προσκόμιση της σειράς</translation>
     </message>
     <message>
         <source>Unable to execute statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εκτέλεση του ερωτήματος</translation>
+        <translation>Δεν ήταν δυνατή η εκτέλεση της πρότασης</translation>
     </message>
     <message>
         <source>Unable to reset statement</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η αρχικοποίηση της πρότασης</translation>
+        <translation>Δεν ήταν δυνατή η αρχικοποίηση της πρότασης</translation>
     </message>
     <message>
         <source>Unable to bind parameters</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η σύνδεση των παραμέτρων</translation>
+        <translation>Δεν ήταν δυνατή η δέσμευση των παραμέτρων</translation>
     </message>
     <message>
         <source>Parameter count mismatch</source>
-        <translation type="unfinished">Λανθασμένος αριθμός παραμέτρων</translation>
+        <translation>Λανθασμένος αριθμός παραμέτρων</translation>
     </message>
     <message>
         <source>No query</source>
-        <translation type="unfinished"></translation>
+        <translation>Χωρίς ερώτημα</translation>
     </message>
 </context>
 <context>
     <name>QScrollBar</name>
     <message>
         <source>Scroll here</source>
-        <translation type="unfinished">Κύλισε εδώ</translation>
+        <translation>Κύλισε εδώ</translation>
     </message>
     <message>
         <source>Left edge</source>
-        <translation type="unfinished">Αριστερό άκρο</translation>
+        <translation>Αριστερό άκρο</translation>
     </message>
     <message>
         <source>Top</source>
-        <translation type="unfinished">Πάνω</translation>
+        <translation>Πάνω</translation>
     </message>
     <message>
         <source>Right edge</source>
-        <translation type="unfinished">Δεξιό άκρο</translation>
+        <translation>Δεξιό άκρο</translation>
     </message>
     <message>
         <source>Bottom</source>
-        <translation type="unfinished">Κάτω</translation>
+        <translation>Κάτω</translation>
     </message>
     <message>
         <source>Page left</source>
-        <translation type="unfinished">Σελίδα αριστερά</translation>
+        <translation>Σελίδα αριστερά</translation>
     </message>
     <message>
         <source>Page up</source>
-        <translation type="unfinished">Σελίδα πάνω</translation>
+        <translation>Σελίδα πάνω</translation>
     </message>
     <message>
         <source>Page right</source>
-        <translation type="unfinished">Σελίδα δεξιά</translation>
+        <translation>Σελίδα δεξιά</translation>
     </message>
     <message>
         <source>Page down</source>
-        <translation type="unfinished">Σελίδα κάτω</translation>
+        <translation>Σελίδα κάτω</translation>
     </message>
     <message>
         <source>Scroll left</source>
-        <translation type="unfinished">Κύλισε αριστερά</translation>
+        <translation>Κύλισε αριστερά</translation>
     </message>
     <message>
         <source>Scroll up</source>
-        <translation type="unfinished">Κύλισε πάνω</translation>
+        <translation>Κύλισε πάνω</translation>
     </message>
     <message>
         <source>Scroll right</source>
-        <translation type="unfinished">Κύλισε δεξιά</translation>
+        <translation>Κύλισε δεξιά</translation>
     </message>
     <message>
         <source>Scroll down</source>
-        <translation type="unfinished">Κύλισε κάτω</translation>
+        <translation>Κύλισε κάτω</translation>
     </message>
     <message>
         <source>Line up</source>
-        <translation type="unfinished">Γραμμή Πάνω</translation>
+        <translation>Γραμμή πάνω</translation>
     </message>
     <message>
         <source>Position</source>
-        <translation type="unfinished">θέση</translation>
+        <translation>Θέση</translation>
     </message>
     <message>
         <source>Line down</source>
-        <translation type="unfinished">Γραμμή Κάτω</translation>
+        <translation>Γραμμή κάτω</translation>
     </message>
 </context>
 <context>
@@ -3325,35 +3330,35 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>%1: unable to lock</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: αδύνατο το κλείδωμα</translation>
     </message>
     <message>
         <source>%1: unable to unlock</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: αδύνατο το ξεκλείδωμα</translation>
     </message>
     <message>
         <source>%1: permission denied</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: άρνηση άδειας</translation>
     </message>
     <message>
         <source>%1: already exists</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: υπάρχει ήδη</translation>
     </message>
     <message>
         <source>%1: doesn't exists</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: υπάρχει ήδη</translation>
     </message>
     <message>
         <source>%1: out of resources</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: έλλειψη πόρων</translation>
     </message>
     <message>
         <source>%1: unknown error %2</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: άγνωστο λάθος %2</translation>
     </message>
     <message>
         <source>%1: key is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: το κλειδί είναι άδειο</translation>
     </message>
     <message>
         <source>%1: unix key file doesn't exists</source>
@@ -3365,562 +3370,562 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>%1: unable to make key</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: αδύνατη η δημιουργία κλειδιού</translation>
     </message>
     <message>
         <source>%1: system-imposed size restrictions</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: περιορισμοί μεγέθους συστήματος</translation>
     </message>
     <message>
         <source>%1: not attached</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
 </context>
 <context>
     <name>QShortcut</name>
     <message>
         <source>Space</source>
-        <translation type="unfinished">Space</translation>
+        <translation>Space</translation>
     </message>
     <message>
         <source>Esc</source>
-        <translation type="unfinished">Esc</translation>
+        <translation>Esc</translation>
     </message>
     <message>
         <source>Tab</source>
-        <translation type="unfinished">Tab</translation>
+        <translation>Tab</translation>
     </message>
     <message>
         <source>Backtab</source>
-        <translation type="unfinished">Backtab</translation>
+        <translation>Backtab</translation>
     </message>
     <message>
         <source>Backspace</source>
-        <translation type="unfinished">Backspace</translation>
+        <translation>Backspace</translation>
     </message>
     <message>
         <source>Return</source>
-        <translation type="unfinished">Return</translation>
+        <translation>Return</translation>
     </message>
     <message>
         <source>Enter</source>
-        <translation type="unfinished">Enter</translation>
+        <translation>Enter</translation>
     </message>
     <message>
         <source>Ins</source>
-        <translation type="unfinished">Ins</translation>
+        <translation>Ins</translation>
     </message>
     <message>
         <source>Del</source>
-        <translation type="unfinished">Del</translation>
+        <translation>Del</translation>
     </message>
     <message>
         <source>Pause</source>
-        <translation type="unfinished">Pause</translation>
+        <translation>Pause</translation>
     </message>
     <message>
         <source>Print</source>
-        <translation type="unfinished">Print</translation>
+        <translation>Print</translation>
     </message>
     <message>
         <source>SysReq</source>
-        <translation type="unfinished">SysReq</translation>
+        <translation>SysReq</translation>
     </message>
     <message>
         <source>Home</source>
-        <translation type="unfinished">Home</translation>
+        <translation>Home</translation>
     </message>
     <message>
         <source>End</source>
-        <translation type="unfinished">End</translation>
+        <translation>End</translation>
     </message>
     <message>
         <source>Left</source>
-        <translation type="unfinished">Left</translation>
+        <translation>Left</translation>
     </message>
     <message>
         <source>Up</source>
-        <translation type="unfinished">Up</translation>
+        <translation>Up</translation>
     </message>
     <message>
         <source>Right</source>
-        <translation type="unfinished">Right</translation>
+        <translation>Right</translation>
     </message>
     <message>
         <source>Down</source>
-        <translation type="unfinished">Down</translation>
+        <translation>Down</translation>
     </message>
     <message>
         <source>PgUp</source>
-        <translation type="unfinished">PgUp</translation>
+        <translation>PgUp</translation>
     </message>
     <message>
         <source>PgDown</source>
-        <translation type="unfinished">PgDown</translation>
+        <translation>PgDown</translation>
     </message>
     <message>
         <source>CapsLock</source>
-        <translation type="unfinished">CapsLock</translation>
+        <translation>CapsLock</translation>
     </message>
     <message>
         <source>NumLock</source>
-        <translation type="unfinished">numLock</translation>
+        <translation>numLock</translation>
     </message>
     <message>
         <source>ScrollLock</source>
-        <translation type="unfinished">ScrollLock</translation>
+        <translation>ScrollLock</translation>
     </message>
     <message>
         <source>Menu</source>
-        <translation type="unfinished">Μενού</translation>
+        <translation>Μενού</translation>
     </message>
     <message>
         <source>Help</source>
-        <translation type="unfinished">Βοήθεια</translation>
+        <translation>Βοήθεια</translation>
     </message>
     <message>
         <source>Back</source>
-        <translation type="unfinished">Προηγούμενο</translation>
+        <translation>Προηγούμενο</translation>
     </message>
     <message>
         <source>Forward</source>
-        <translation type="unfinished">Επόμενο</translation>
+        <translation>Επόμενο</translation>
     </message>
     <message>
         <source>Stop</source>
-        <translation type="unfinished">Τερματισμός</translation>
+        <translation>Τερματισμός</translation>
     </message>
     <message>
         <source>Refresh</source>
-        <translation type="unfinished">Ανανέωση</translation>
+        <translation>Ανανέωση</translation>
     </message>
     <message>
         <source>Volume Down</source>
-        <translation type="unfinished">Μείωση έντασης ήχου</translation>
+        <translation>Μείωση έντασης ήχου</translation>
     </message>
     <message>
         <source>Volume Mute</source>
-        <translation type="unfinished">Αποκοπή ήχου</translation>
+        <translation>Αποκοπή ήχου</translation>
     </message>
     <message>
         <source>Volume Up</source>
-        <translation type="unfinished">Αύξηση έντασης ήχου</translation>
+        <translation>Αύξηση έντασης ήχου</translation>
     </message>
     <message>
         <source>Bass Boost</source>
-        <translation type="unfinished">Ενίσχυση μπάσων</translation>
+        <translation>Ενίσχυση μπάσων</translation>
     </message>
     <message>
         <source>Bass Up</source>
-        <translation type="unfinished">Αύξηση μπάσων</translation>
+        <translation>Αύξηση μπάσων</translation>
     </message>
     <message>
         <source>Bass Down</source>
-        <translation type="unfinished">Μείωση μπάσων</translation>
+        <translation>Μείωση μπάσων</translation>
     </message>
     <message>
         <source>Treble Up</source>
-        <translation type="unfinished">Αύξηση τρέμουλου</translation>
+        <translation>Αύξηση τρέμουλου</translation>
     </message>
     <message>
         <source>Treble Down</source>
-        <translation type="unfinished">Μείωση τρέμουλου</translation>
+        <translation>Μείωση τρέμουλου</translation>
     </message>
     <message>
         <source>Media Play</source>
-        <translation type="unfinished">Αναπαραγωγή πολυμέσου</translation>
+        <translation>Αναπαραγωγή πολυμέσου</translation>
     </message>
     <message>
         <source>Media Stop</source>
-        <translation type="unfinished">Τερματισμός πολυμέσου</translation>
+        <translation>Τερματισμός πολυμέσου</translation>
     </message>
     <message>
         <source>Media Previous</source>
-        <translation type="unfinished">Προηγούμενο πολυμέσο</translation>
+        <translation>Προηγούμενο πολυμέσο</translation>
     </message>
     <message>
         <source>Media Next</source>
-        <translation type="unfinished">Επόμενο πολυμέσο</translation>
+        <translation>Επόμενο πολυμέσο</translation>
     </message>
     <message>
         <source>Media Record</source>
-        <translation type="unfinished">Εγγραφή πολυμέσου</translation>
+        <translation>Εγγραφή πολυμέσου</translation>
     </message>
     <message>
         <source>Favorites</source>
-        <translation type="unfinished">Αγαπημένα</translation>
+        <translation>Αγαπημένα</translation>
     </message>
     <message>
         <source>Search</source>
-        <translation type="unfinished">Εύρεση</translation>
+        <translation>Εύρεση</translation>
     </message>
     <message>
         <source>Standby</source>
-        <translation type="unfinished">Αναμονή</translation>
+        <translation>Αναμονή</translation>
     </message>
     <message>
         <source>Open URL</source>
-        <translation type="unfinished">Άνοιγμα URL</translation>
+        <translation>Άνοιγμα URL</translation>
     </message>
     <message>
         <source>Launch Mail</source>
-        <translation type="unfinished">Εκκίνηση ταχυδρομείου</translation>
+        <translation>Εκκίνηση ταχυδρομείου</translation>
     </message>
     <message>
         <source>Launch Media</source>
-        <translation type="unfinished">Εκκίνηση πολυμέσων</translation>
+        <translation>Εκκίνηση πολυμέσων</translation>
     </message>
     <message>
         <source>Launch (0)</source>
-        <translation type="unfinished">Εκκίνηση (0)</translation>
+        <translation>Εκκίνηση (0)</translation>
     </message>
     <message>
         <source>Launch (1)</source>
-        <translation type="unfinished">Εκκίνηση (1)</translation>
+        <translation>Εκκίνηση (1)</translation>
     </message>
     <message>
         <source>Launch (2)</source>
-        <translation type="unfinished">Εκκίνηση (2)</translation>
+        <translation>Εκκίνηση (2)</translation>
     </message>
     <message>
         <source>Launch (3)</source>
-        <translation type="unfinished">Εκκίνηση (3)</translation>
+        <translation>Εκκίνηση (3)</translation>
     </message>
     <message>
         <source>Launch (4)</source>
-        <translation type="unfinished">Εκκίνηση (4)</translation>
+        <translation>Εκκίνηση (4)</translation>
     </message>
     <message>
         <source>Launch (5)</source>
-        <translation type="unfinished">Εκκίνηση (5)</translation>
+        <translation>Εκκίνηση (5)</translation>
     </message>
     <message>
         <source>Launch (6)</source>
-        <translation type="unfinished">Εκκίνηση (6)</translation>
+        <translation>Εκκίνηση (6)</translation>
     </message>
     <message>
         <source>Launch (7)</source>
-        <translation type="unfinished">Εκκίνηση (7)</translation>
+        <translation>Εκκίνηση (7)</translation>
     </message>
     <message>
         <source>Launch (8)</source>
-        <translation type="unfinished">Εκκίνηση (8)</translation>
+        <translation>Εκκίνηση (8)</translation>
     </message>
     <message>
         <source>Launch (9)</source>
-        <translation type="unfinished">Εκκίνηση (9)</translation>
+        <translation>Εκκίνηση (9)</translation>
     </message>
     <message>
         <source>Launch (A)</source>
-        <translation type="unfinished">Εκκίνηση (A)</translation>
+        <translation>Εκκίνηση (A)</translation>
     </message>
     <message>
         <source>Launch (B)</source>
-        <translation type="unfinished">Εκκίνηση B()</translation>
+        <translation>Εκκίνηση B()</translation>
     </message>
     <message>
         <source>Launch (C)</source>
-        <translation type="unfinished">Εκκίνηση (C)</translation>
+        <translation>Εκκίνηση (C)</translation>
     </message>
     <message>
         <source>Launch (D)</source>
-        <translation type="unfinished">Εκκίνηση (D)</translation>
+        <translation>Εκκίνηση (D)</translation>
     </message>
     <message>
         <source>Launch (E)</source>
-        <translation type="unfinished">Εκκίνηση (E)</translation>
+        <translation>Εκκίνηση (E)</translation>
     </message>
     <message>
         <source>Launch (F)</source>
-        <translation type="unfinished">Εκκίνηση (F)</translation>
+        <translation>Εκκίνηση (F)</translation>
     </message>
     <message>
         <source>Print Screen</source>
-        <translation type="unfinished">Εκτύπωση οθόνης</translation>
+        <translation>Εκτύπωση οθόνης</translation>
     </message>
     <message>
         <source>Page Up</source>
-        <translation type="unfinished">Page Up</translation>
+        <translation>Page Up</translation>
     </message>
     <message>
         <source>Page Down</source>
-        <translation type="unfinished">Page Down</translation>
+        <translation>Page Down</translation>
     </message>
     <message>
         <source>Caps Lock</source>
-        <translation type="unfinished">Caps Lock</translation>
+        <translation>Caps Lock</translation>
     </message>
     <message>
         <source>Num Lock</source>
-        <translation type="unfinished">Num Lock</translation>
+        <translation>Num Lock</translation>
     </message>
     <message>
         <source>Number Lock</source>
-        <translation type="unfinished">Number Lock</translation>
+        <translation>Number Lock</translation>
     </message>
     <message>
         <source>Scroll Lock</source>
-        <translation type="unfinished">Scroll Lock</translation>
+        <translation>Scroll Lock</translation>
     </message>
     <message>
         <source>Insert</source>
-        <translation type="unfinished">Insert</translation>
+        <translation>Insert</translation>
     </message>
     <message>
         <source>Delete</source>
-        <translation type="unfinished">Delete</translation>
+        <translation>Delete</translation>
     </message>
     <message>
         <source>Escape</source>
-        <translation type="unfinished">Escape</translation>
+        <translation>Escape</translation>
     </message>
     <message>
         <source>System Request</source>
-        <translation type="unfinished">Αίτηση συστήματος</translation>
+        <translation>Αίτηση συστήματος</translation>
     </message>
     <message>
         <source>Select</source>
-        <translation type="unfinished">Επιλογή</translation>
+        <translation>Επιλογή</translation>
     </message>
     <message>
         <source>Yes</source>
-        <translation type="unfinished">Ναι</translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>No</source>
-        <translation type="unfinished">Όχι</translation>
+        <translation>Όχι</translation>
     </message>
     <message>
         <source>Context1</source>
-        <translation type="unfinished">Περιεχόμενο1</translation>
+        <translation>Περιεχόμενο1</translation>
     </message>
     <message>
         <source>Context2</source>
-        <translation type="unfinished">Περιεχόμενο2</translation>
+        <translation>Περιεχόμενο2</translation>
     </message>
     <message>
         <source>Context3</source>
-        <translation type="unfinished">Περιεχόμενο3</translation>
+        <translation>Περιεχόμενο3</translation>
     </message>
     <message>
         <source>Context4</source>
-        <translation type="unfinished">Περιεχόμενο4</translation>
+        <translation>Περιεχόμενο4</translation>
     </message>
     <message>
         <source>Call</source>
-        <translation type="unfinished">Κλήση</translation>
+        <translation>Κλήση</translation>
     </message>
     <message>
         <source>Hangup</source>
-        <translation type="unfinished">Κλέισιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Flip</source>
-        <translation type="unfinished">Αντιστροφή</translation>
+        <translation>Αντιστροφή</translation>
     </message>
     <message>
         <source>Ctrl</source>
-        <translation type="unfinished">Ctrl</translation>
+        <translation>Ctrl</translation>
     </message>
     <message>
         <source>Shift</source>
-        <translation type="unfinished">Shift</translation>
+        <translation>Shift</translation>
     </message>
     <message>
         <source>Alt</source>
-        <translation type="unfinished">Alt</translation>
+        <translation>Alt</translation>
     </message>
     <message>
         <source>Meta</source>
-        <translation type="unfinished">Meta</translation>
+        <translation>Meta</translation>
     </message>
     <message>
         <source>+</source>
-        <translation type="unfinished">+</translation>
+        <translation>+</translation>
     </message>
     <message>
         <source>F%1</source>
-        <translation type="unfinished">F%1</translation>
+        <translation>F%1</translation>
     </message>
     <message>
         <source>Home Page</source>
-        <translation type="unfinished">Αρχική Σελίδα</translation>
+        <translation>Αρχική Σελίδα</translation>
     </message>
 </context>
 <context>
     <name>QSlider</name>
     <message>
         <source>Page left</source>
-        <translation type="unfinished">Page Left</translation>
+        <translation>Σελίδα αριστερά</translation>
     </message>
     <message>
         <source>Page up</source>
-        <translation type="unfinished">Page Up</translation>
+        <translation>Σελίδα πάνω</translation>
     </message>
     <message>
         <source>Position</source>
-        <translation type="unfinished">θέση</translation>
+        <translation>Θέση</translation>
     </message>
     <message>
         <source>Page right</source>
-        <translation type="unfinished">Page Right</translation>
+        <translation>Σελίδα δεξιά</translation>
     </message>
     <message>
         <source>Page down</source>
-        <translation type="unfinished">Page Down</translation>
+        <translation>Σελίδα κάτω</translation>
     </message>
 </context>
 <context>
     <name>QSocks5SocketEngine</name>
     <message>
         <source>Socks5 timeout error connecting to socks server</source>
-        <translation type="unfinished">Socks5 πρόβλημα στη σύνδεση με τον socks server λόγω καθυστέρησης</translation>
+        <translation>Socks5 πρόβλημα στη σύνδεση με τον socks server λόγω καθυστέρησης</translation>
     </message>
     <message>
         <source>Network operation timed out</source>
-        <translation type="unfinished">Η δικτυακή εργασία έληξε</translation>
+        <translation>Η δικτυακή λειτουργία εξάντλησε το χρονικό περιθώριο</translation>
     </message>
 </context>
 <context>
     <name>QSpinBox</name>
     <message>
         <source>More</source>
-        <translation type="unfinished">Περισσότερο</translation>
+        <translation>Περισσότερα</translation>
     </message>
     <message>
         <source>Less</source>
-        <translation type="unfinished">Λιγότερο</translation>
+        <translation>Λιγότερα</translation>
     </message>
 </context>
 <context>
     <name>QSql</name>
     <message>
         <source>Delete</source>
-        <translation type="unfinished">Διαγραφή</translation>
+        <translation>Διαγραφή</translation>
     </message>
     <message>
         <source>Delete this record?</source>
-        <translation type="unfinished">Θέλετε να διαγράψετε αυτή την εγγραφή ?</translation>
+        <translation>Θέλετε να διαγράψετε αυτή την εγγραφή ?</translation>
     </message>
     <message>
         <source>Yes</source>
-        <translation type="unfinished">Ναι</translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>No</source>
-        <translation type="unfinished">Όχι</translation>
+        <translation>Όχι</translation>
     </message>
     <message>
         <source>Insert</source>
-        <translation type="unfinished">Εισαγωγή</translation>
+        <translation>Εισαγωγή</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished">Ενημέρωση</translation>
+        <translation>Ενημέρωση</translation>
     </message>
     <message>
         <source>Save edits?</source>
-        <translation type="unfinished">Αποθήκευση αλλαγών ?</translation>
+        <translation>Αποθήκευση αλλαγών ?</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Άκυρο</translation>
+        <translation>Άκυρο</translation>
     </message>
     <message>
         <source>Confirm</source>
-        <translation type="unfinished">Επιβεβαίωση</translation>
+        <translation>Επιβεβαίωση</translation>
     </message>
     <message>
         <source>Cancel your edits?</source>
-        <translation type="unfinished">Ακύρωση αλλαγών ?</translation>
+        <translation>Ακύρωση αλλαγών;</translation>
     </message>
 </context>
 <context>
     <name>QSslSocket</name>
     <message>
         <source>Unable to write data: %1</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η εγγραφή των δεδομένων : %1</translation>
+        <translation>Δεν ήταν δυνατή η εγγραφή των δεδομένων : %1</translation>
     </message>
     <message>
         <source>Error while reading: %1</source>
-        <translation type="unfinished">Πρόβλημα στην ανάγνωση : %1</translation>
+        <translation>Πρόβλημα στην ανάγνωση : %1</translation>
     </message>
     <message>
         <source>Error during SSL handshake: %1</source>
-        <translation type="unfinished">Πρόβλημα κατά την διαδικασία χειραψίας SSL : %1</translation>
+        <translation>Πρόβλημα κατά την διαδικασία χειραψίας SSL : %1</translation>
     </message>
     <message>
         <source>Error creating SSL context (%1)</source>
-        <translation type="unfinished">Πρόβλημα στη δημιουργια SSL περιεχομένου (%1)</translation>
+        <translation>Πρόβλημα στη δημιουργία SSL περιεχομένου (%1)</translation>
     </message>
     <message>
         <source>Invalid or empty cipher list (%1)</source>
-        <translation type="unfinished">Μη έγκυρη ή άδεια λίστα κρυπτογράφησης (%1)</translation>
+        <translation>Μη έγκυρη ή άδεια λίστα κρυπτογράφησης (%1)</translation>
     </message>
     <message>
         <source>Error creating SSL session, %1</source>
-        <translation type="unfinished">Πρόβλημα στη δημιουργία SSL συνεδρίας, %1</translation>
+        <translation>Πρόβλημα στη δημιουργία SSL συνεδρίας, %1</translation>
     </message>
     <message>
         <source>Error creating SSL session: %1</source>
-        <translation type="unfinished">Πρόβλημα στη δημιουργία SSL συνεδρίας: %1</translation>
+        <translation>Πρόβλημα στη δημιουργία SSL συνεδρίας: %1</translation>
     </message>
     <message>
         <source>Cannot provide a certificate with no key, %1</source>
-        <translation type="unfinished">Δεν είναι δυνατή η παροχή πιστοποιητικού χωρίς κλειδί, %1</translation>
+        <translation>Δεν είναι δυνατή η παροχή πιστοποιητικού χωρίς κλειδί, %1</translation>
     </message>
     <message>
         <source>Error loading local certificate, %1</source>
-        <translation type="unfinished">Πρόβλημα κατά το φόρτωμα του πιστοποιητικού,%1</translation>
+        <translation>Πρόβλημα κατά το φόρτωμα του πιστοποιητικού,%1</translation>
     </message>
     <message>
         <source>Error loading private key, %1</source>
-        <translation type="unfinished">Πρόβλημα κατά το φορτωμα του ιδιωτικού κλειδιού,%1</translation>
+        <translation>Πρόβλημα κατά το φόρτωμα του ιδιωτικού κλειδιού,%1</translation>
     </message>
     <message>
         <source>Private key does not certificate public key, %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Το ιδιωτικό κλειδί δεν πιστοποιεί το δημόσιο κλειδί, %1</translation>
     </message>
 </context>
 <context>
     <name>QTDSDriver</name>
     <message>
         <source>Unable to open connection</source>
-        <translation type="unfinished">Δεν ήταν δυνατό το άνοιγμα της σύνδεσης</translation>
+        <translation>Δεν ήταν δυνατό το άνοιγμα της σύνδεσης</translation>
     </message>
     <message>
         <source>Unable to use database</source>
-        <translation type="unfinished">Δεν ήταν δυνατή η χρήση της βάσης δεδομένων</translation>
+        <translation>Δεν ήταν δυνατή η χρήση της βάσης δεδομένων</translation>
     </message>
 </context>
 <context>
     <name>QTabBar</name>
     <message>
         <source>Scroll Left</source>
-        <translation type="unfinished">Κύλιση αριστερά</translation>
+        <translation>Κύλιση αριστερά</translation>
     </message>
     <message>
         <source>Scroll Right</source>
-        <translation type="unfinished">Κύλιση δεξιά</translation>
+        <translation>Κύλιση δεξιά</translation>
     </message>
 </context>
 <context>
     <name>QTextControl</name>
     <message>
         <source>&Undo</source>
-        <translation type="unfinished">&Αναίρεση</translation>
+        <translation>&Αναίρεση</translation>
     </message>
     <message>
         <source>&Redo</source>
-        <translation type="unfinished">&Ακύρωση Αναίρεσης</translation>
+        <translation>&Ακύρωση Αναίρεσης</translation>
     </message>
     <message>
         <source>Cu&t</source>
-        <translation type="unfinished">Αποκοπ&ή</translation>
+        <translation>Αποκοπ&ή</translation>
     </message>
     <message>
         <source>&Copy</source>
-        <translation type="unfinished">&Αντιγραφή</translation>
+        <translation>&Αντιγραφή</translation>
     </message>
     <message>
         <source>Copy &Link Location</source>
@@ -3928,62 +3933,62 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>&Paste</source>
-        <translation type="unfinished">&Επικόλληση</translation>
+        <translation>&Επικόλληση</translation>
     </message>
     <message>
         <source>Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαγραφή</translation>
     </message>
     <message>
         <source>Select All</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή Όλων</translation>
     </message>
 </context>
 <context>
     <name>QToolButton</name>
     <message>
         <source>Press</source>
-        <translation type="unfinished"></translation>
+        <translation>Πιέστε</translation>
     </message>
     <message>
         <source>Open</source>
-        <translation type="unfinished">Άνοιγμα</translation>
+        <translation>Άνοιγμα</translation>
     </message>
 </context>
 <context>
     <name>QUdpSocket</name>
     <message>
         <source>This platform does not support IPv6</source>
-        <translation type="unfinished"></translation>
+        <translation>Η πλατφόρμα δεν υποστηρίζει το IPv6</translation>
     </message>
 </context>
 <context>
     <name>QUndoGroup</name>
     <message>
         <source>Undo</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναίρεση</translation>
     </message>
     <message>
         <source>Redo</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση Αναίρεσης</translation>
     </message>
 </context>
 <context>
     <name>QUndoModel</name>
     <message>
         <source><empty></source>
-        <translation type="unfinished"></translation>
+        <translation><κενό></translation>
     </message>
 </context>
 <context>
     <name>QUndoStack</name>
     <message>
         <source>Undo</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναίρεση</translation>
     </message>
     <message>
         <source>Redo</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση Αναίρεσης</translation>
     </message>
 </context>
 <context>
@@ -4037,15 +4042,15 @@ Please choose a different file name.</source>
     <name>QWebFrame</name>
     <message>
         <source>Request cancelled</source>
-        <translation type="unfinished"></translation>
+        <translation>Το αίτημα ακυρώθηκε</translation>
     </message>
     <message>
         <source>Request blocked</source>
-        <translation type="unfinished"></translation>
+        <translation>Το αίτημα εμποδίστηκε</translation>
     </message>
     <message>
         <source>Cannot show URL</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν μπορεί να εμφανιστεί το URL</translation>
     </message>
     <message>
         <source>Frame load interruped by policy change</source>
@@ -4053,33 +4058,33 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>Cannot show mimetype</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν μπορεί να εμφανιστεί ο τύπος MIME</translation>
     </message>
     <message>
         <source>File does not exist</source>
-        <translation type="unfinished"></translation>
+        <translation>Το αρχείο δεν υπάρχει</translation>
     </message>
 </context>
 <context>
     <name>QWebPage</name>
     <message>
         <source>Bad HTTP request</source>
-        <translation type="unfinished"></translation>
+        <translation>Κακό αίτημα HTTP</translation>
     </message>
     <message>
         <source>Submit</source>
         <comment>default label for Submit buttons in forms on web pages</comment>
-        <translation type="unfinished"></translation>
+        <translation>Υποβολή</translation>
     </message>
     <message>
         <source>Submit</source>
         <comment>Submit (input element) alt text for <input> elements with no alt, title, or value</comment>
-        <translation type="unfinished"></translation>
+        <translation>Υποβολή</translation>
     </message>
     <message>
         <source>Reset</source>
         <comment>default label for Reset buttons in forms on web pages</comment>
-        <translation type="unfinished">Επανέναρξη</translation>
+        <translation>Επανέναρξη</translation>
     </message>
     <message>
         <source>This is a searchable index. Enter search keywords: </source>
@@ -4089,42 +4094,42 @@ Please choose a different file name.</source>
     <message>
         <source>Choose File</source>
         <comment>title for file button used in HTML forms</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή αρχείου</translation>
     </message>
     <message>
         <source>No file selected</source>
         <comment>text to display in file button used in HTML forms when no file is selected</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δεν επιλέχτηκε αρχείο</translation>
     </message>
     <message>
         <source>Open in New Window</source>
         <comment>Open in New Window context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άνοιγμα σε Νέο Παράθυρο</translation>
     </message>
     <message>
         <source>Save Link...</source>
         <comment>Download Linked File context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αποθήκευση Δεσμού...</translation>
     </message>
     <message>
         <source>Copy Link</source>
         <comment>Copy Link context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή Δεσμού</translation>
     </message>
     <message>
         <source>Open Image</source>
         <comment>Open Image in New Window context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άνοιγμα Εικόνας</translation>
     </message>
     <message>
         <source>Save Image</source>
         <comment>Download Image context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αποθήκευση Εικόνας</translation>
     </message>
     <message>
         <source>Copy Image</source>
         <comment>Copy Link context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή Εικόνας</translation>
     </message>
     <message>
         <source>Open Frame</source>
@@ -4134,7 +4139,7 @@ Please choose a different file name.</source>
     <message>
         <source>Copy</source>
         <comment>Copy context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή</translation>
     </message>
     <message>
         <source>Go Back</source>
@@ -4149,22 +4154,22 @@ Please choose a different file name.</source>
     <message>
         <source>Stop</source>
         <comment>Stop context menu item</comment>
-        <translation type="unfinished">Τερματισμός</translation>
+        <translation>Τερματισμός</translation>
     </message>
     <message>
         <source>Reload</source>
         <comment>Reload context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφόρτωση</translation>
     </message>
     <message>
         <source>Cut</source>
         <comment>Cut context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αποκοπή</translation>
     </message>
     <message>
         <source>Paste</source>
         <comment>Paste context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επικόλληση</translation>
     </message>
     <message>
         <source>No Guesses Found</source>
@@ -4174,107 +4179,107 @@ Please choose a different file name.</source>
     <message>
         <source>Ignore</source>
         <comment>Ignore Spelling context menu item</comment>
-        <translation type="unfinished">Αγνόησε</translation>
+        <translation>Αγνόησε</translation>
     </message>
     <message>
         <source>Add To Dictionary</source>
         <comment>Learn Spelling context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη στο Λεξικό</translation>
     </message>
     <message>
         <source>Search The Web</source>
         <comment>Search The Web context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αναζήτηση στον Ιστό</translation>
     </message>
     <message>
         <source>Look Up In Dictionary</source>
         <comment>Look Up in Dictionary context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αναζήτηση στο Λεξικό</translation>
     </message>
     <message>
         <source>Open Link</source>
         <comment>Open Link context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άνοιγμα Δεσμού</translation>
     </message>
     <message>
         <source>Ignore</source>
         <comment>Ignore Grammar context menu item</comment>
-        <translation type="unfinished">Αγνόησε</translation>
+        <translation>Αγνόησε</translation>
     </message>
     <message>
         <source>Spelling</source>
         <comment>Spelling and Grammar context sub-menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ορθογραφία</translation>
     </message>
     <message>
         <source>Show Spelling and Grammar</source>
         <comment>menu item title</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση Ορθογραφίας και Γραμματικής</translation>
     </message>
     <message>
         <source>Hide Spelling and Grammar</source>
         <comment>menu item title</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απόκρυψη Ορθογραφίας και Γραμματικής</translation>
     </message>
     <message>
         <source>Check Spelling</source>
         <comment>Check spelling context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος Ορθογραφίας</translation>
     </message>
     <message>
         <source>Check Spelling While Typing</source>
         <comment>Check spelling while typing context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος Ορθογραφίας ενώ Πληκτρολογείτε</translation>
     </message>
     <message>
         <source>Check Grammar With Spelling</source>
         <comment>Check grammar with spelling context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος Γραμματικής και Ορθογραφίας</translation>
     </message>
     <message>
         <source>Fonts</source>
         <comment>Font context sub-menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γραμματοσειρά</translation>
     </message>
     <message>
         <source>Bold</source>
         <comment>Bold context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Έντονα</translation>
     </message>
     <message>
         <source>Italic</source>
         <comment>Italic context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πλάγια</translation>
     </message>
     <message>
         <source>Underline</source>
         <comment>Underline context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Υπογράμμιση</translation>
     </message>
     <message>
         <source>Outline</source>
         <comment>Outline context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Περιγράμμιση</translation>
     </message>
     <message>
         <source>Direction</source>
         <comment>Writing direction context sub-menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κατεύθυνση</translation>
     </message>
     <message>
         <source>Default</source>
         <comment>Default writing direction context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αρχικό</translation>
     </message>
     <message>
         <source>LTR</source>
         <comment>Left to Right context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>ΑΠΔ</translation>
     </message>
     <message>
         <source>RTL</source>
         <comment>Right to Left context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>ΔΠΑ</translation>
     </message>
     <message>
         <source>Inspect</source>
@@ -4299,7 +4304,7 @@ Please choose a different file name.</source>
     <message>
         <source>Unknown</source>
         <comment>Unknown filesize FTP directory listing item</comment>
-        <translation type="unfinished">Άγνωστο</translation>
+        <translation>Άγνωστο</translation>
     </message>
     <message>
         <source>%1 (%2x%3 pixels)</source>
@@ -4315,14 +4320,14 @@ Please choose a different file name.</source>
     <name>QWhatsThisAction</name>
     <message>
         <source>What's This?</source>
-        <translation type="unfinished">Τι είναι αυτό ?</translation>
+        <translation>Τι είναι αυτό ?</translation>
     </message>
 </context>
 <context>
     <name>QWidget</name>
     <message>
         <source>*</source>
-        <translation type="unfinished"></translation>
+        <translation>*</translation>
     </message>
 </context>
 <context>
@@ -4341,101 +4346,101 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>Done</source>
-        <translation type="unfinished"></translation>
+        <translation>Εντάξει</translation>
     </message>
     <message>
         <source>Quit</source>
-        <translation type="unfinished">Έξοδος</translation>
+        <translation>Έξοδος</translation>
     </message>
     <message>
         <source>Help</source>
-        <translation type="unfinished">Βοήθεια</translation>
+        <translation>Βοήθεια</translation>
     </message>
     <message>
         <source>< &Back</source>
-        <translation type="unfinished"><&Πίσω</translation>
+        <translation>< &Πίσω</translation>
     </message>
     <message>
         <source>&Finish</source>
-        <translation type="unfinished">&Τέλος</translation>
+        <translation>&Τέλος</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Άκυρο</translation>
     </message>
     <message>
         <source>&Help</source>
-        <translation type="unfinished">&Βοήθεια</translation>
+        <translation>&Βοήθεια</translation>
     </message>
     <message>
         <source>&Next</source>
-        <translation type="unfinished"></translation>
+        <translation>&Επόμενο</translation>
     </message>
     <message>
         <source>&Next ></source>
-        <translation type="unfinished">&Επόμενο></translation>
+        <translation>&Επόμενο ></translation>
     </message>
 </context>
 <context>
     <name>QWorkspace</name>
     <message>
         <source>&Restore</source>
-        <translation type="unfinished">&Επαναφορά</translation>
+        <translation>&Επαναφορά</translation>
     </message>
     <message>
         <source>&Move</source>
-        <translation type="unfinished">&Μετακίνηση</translation>
+        <translation>&Μετακίνηση</translation>
     </message>
     <message>
         <source>&Size</source>
-        <translation type="unfinished">&Μέγεθος</translation>
+        <translation>&Μέγεθος</translation>
     </message>
     <message>
         <source>Mi&nimize</source>
-        <translation type="unfinished">Ε&λαχιστοποίηση</translation>
+        <translation>Ε&λαχιστοποίηση</translation>
     </message>
     <message>
         <source>Ma&ximize</source>
-        <translation type="unfinished">Μ&εγιστοποίηση</translation>
+        <translation>Μ&εγιστοποίηση</translation>
     </message>
     <message>
         <source>&Close</source>
-        <translation type="unfinished">&Κλείσιμο</translation>
+        <translation>&Κλείσιμο</translation>
     </message>
     <message>
         <source>Stay on &Top</source>
-        <translation type="unfinished">Παραμονή στην &επιφάνεια</translation>
+        <translation>Παραμονή στην &επιφάνεια</translation>
     </message>
     <message>
         <source>Sh&ade</source>
-        <translation type="unfinished"></translation>
+        <translation>Σκίαση</translation>
     </message>
     <message>
         <source>%1 - [%2]</source>
-        <translation type="unfinished">%1 - [%2]</translation>
+        <translation>%1 - [%2]</translation>
     </message>
     <message>
         <source>Minimize</source>
-        <translation type="unfinished">Ελαχιστοποίηση</translation>
+        <translation>Ελαχιστοποίηση</translation>
     </message>
     <message>
         <source>Restore Down</source>
-        <translation type="unfinished">Επαναφορά Κάτω</translation>
+        <translation>Επαναφορά Κάτω</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Κλείσιμο</translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>&Unshade</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποσκίαση</translation>
     </message>
 </context>
 <context>
     <name>QXml</name>
     <message>
         <source>no error occurred</source>
-        <translation type="unfinished">δεν δημιουργήθηκαν προβλήματα</translation>
+        <translation>δεν δημιουργήθηκαν προβλήματα</translation>
     </message>
     <message>
         <source>error triggered by consumer</source>
@@ -4907,14 +4912,12 @@ Please choose a different file name.</source>
         <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
-            <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
-            <numerusform></numerusform>
         </translation>
     </message>
     <message>
@@ -5269,55 +5272,55 @@ Please choose a different file name.</source>
     <name>WebCore::PlatformScrollbar</name>
     <message>
         <source>Scroll here</source>
-        <translation type="unfinished">Κύλισε εδώ</translation>
+        <translation>Κύλισε εδώ</translation>
     </message>
     <message>
         <source>Left edge</source>
-        <translation type="unfinished">Αριστερό άκρο</translation>
+        <translation>Αριστερό άκρο</translation>
     </message>
     <message>
         <source>Top</source>
-        <translation type="unfinished">Πάνω</translation>
+        <translation>Πάνω</translation>
     </message>
     <message>
         <source>Right edge</source>
-        <translation type="unfinished">Δεξιό άκρο</translation>
+        <translation>Δεξιό άκρο</translation>
     </message>
     <message>
         <source>Bottom</source>
-        <translation type="unfinished">Κάτω</translation>
+        <translation>Κάτω</translation>
     </message>
     <message>
         <source>Page left</source>
-        <translation type="unfinished"></translation>
+        <translation>Σελίδα αριστερά</translation>
     </message>
     <message>
         <source>Page up</source>
-        <translation type="unfinished"></translation>
+        <translation>Σελίδα πάνω</translation>
     </message>
     <message>
         <source>Page right</source>
-        <translation type="unfinished"></translation>
+        <translation>Σελίδα δεξιά</translation>
     </message>
     <message>
         <source>Page down</source>
-        <translation type="unfinished"></translation>
+        <translation>Σελίδα κάτω</translation>
     </message>
     <message>
         <source>Scroll left</source>
-        <translation type="unfinished">Κύλισε αριστερά</translation>
+        <translation>Κύλισε αριστερά</translation>
     </message>
     <message>
         <source>Scroll up</source>
-        <translation type="unfinished">Κύλισε πάνω</translation>
+        <translation>Κύλισε πάνω</translation>
     </message>
     <message>
         <source>Scroll right</source>
-        <translation type="unfinished">Κύλισε δεξιά</translation>
+        <translation>Κύλισε δεξιά</translation>
     </message>
     <message>
         <source>Scroll down</source>
-        <translation type="unfinished">Κύλισε κάτω</translation>
+        <translation>Κύλισε κάτω</translation>
     </message>
 </context>
 </TS>
diff --git a/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.cpp b/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.cpp
index 3c967be..d1c83e7 100644
--- a/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.cpp
@@ -126,7 +126,7 @@ void UIVMInfoDialog::retranslateUi()
     /* Storage statistics: */
     CSystemProperties sp = vboxGlobal().virtualBox().GetSystemProperties();
     CStorageControllerVector controllers = m_session.GetMachine().GetStorageControllers();
-    int iIDECount = 0, iSATACount = 0, iSCSICount = 0;
+    int iIDECount = 0, iSATACount = 0, iSCSICount = 0, iUSBCount = 0, iSASCount = 0;
     foreach (const CStorageController &controller, controllers)
     {
         switch (controller.GetBus())
@@ -222,6 +222,56 @@ void UIVMInfoDialog::retranslateUi()
                 ++iSCSICount;
                 break;
             }
+            case KStorageBus_USB:
+            {
+                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_USB); ++i)
+                {
+                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_USB); ++j)
+                    {
+                        /* Names: */
+                        m_names[QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)]
+                            = tr("Data Read");
+                        m_names[QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i)]
+                            = tr("Data Written");
+
+                        /* Units: */
+                        m_units[QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)] = "B";
+                        m_units[QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i)] = "B";
+
+                        /* Belongs to: */
+                        m_links[QString("/Devices/USB%1/%2").arg(iUSBCount).arg(i)] = QStringList()
+                            << QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)
+                            << QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i);
+                    }
+                }
+                ++iUSBCount;
+                break;
+            }
+            case KStorageBus_SAS:
+            {
+                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_SAS); ++i)
+                {
+                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_SAS); ++j)
+                    {
+                        /* Names: */
+                        m_names[QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)]
+                            = tr("Data Read");
+                        m_names[QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i)]
+                            = tr("Data Written");
+
+                        /* Units: */
+                        m_units[QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)] = "B";
+                        m_units[QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i)] = "B";
+
+                        /* Belongs to: */
+                        m_links[QString("/Devices/SAS%1/%2").arg(iSASCount).arg(i)] = QStringList()
+                            << QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)
+                            << QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i);
+                    }
+                }
+                ++iSASCount;
+                break;
+            }
             default:
                 break;
         }
@@ -691,7 +741,7 @@ void UIVMInfoDialog::refreshStatistics()
 
         /* Enumerate storage-controllers: */
         CStorageControllerVector controllers = m.GetStorageControllers();
-        int iIDECount = 0, iSATACount = 0, iSCSICount = 0;
+        int iIDECount = 0, iSATACount = 0, iSCSICount = 0, iUSBCount = 0, iSASCount = 0;
         foreach (const CStorageController &controller, controllers)
         {
             /* Get controller attributes: */
@@ -740,6 +790,22 @@ void UIVMInfoDialog::refreshStatistics()
                             ++iSCSIIndex;
                             break;
                         }
+                        case KStorageBus_USB:
+                        {
+                            /* Append storage-statistics with USB controller statistics: */
+                            strStorageStat += formatStorageElement(strName, iPort, iDevice,
+                                                                   QString("/Devices/USB%1/%2")
+                                                                          .arg(iUSBCount).arg(iPort));
+                            break;
+                        }
+                        case KStorageBus_SAS:
+                        {
+                            /* Append storage-statistics with USB controller statistics: */
+                            strStorageStat += formatStorageElement(strName, iPort, iDevice,
+                                                                   QString("/Devices/SAS%1/%2")
+                                                                          .arg(iSASCount).arg(iPort));
+                            break;
+                        }
                         default:
                             break;
                     }
@@ -752,6 +818,8 @@ void UIVMInfoDialog::refreshStatistics()
                 case KStorageBus_IDE:  ++iIDECount; break;
                 case KStorageBus_SATA: ++iSATACount; break;
                 case KStorageBus_SCSI: ++iSCSICount; break;
+                case KStorageBus_USB:  ++iUSBCount; break;
+                case KStorageBus_SAS:  ++iSASCount; break;
                 default: break;
             }
         }
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
index d083793..6e4e4d4 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
@@ -681,7 +681,10 @@ void UIExtraDataManagerWindow::sltExtraDataChange(QString strID, QString strKey,
             m_pModelSourceOfData->removeRow(iPosition);
         /* If 'changed value' is NOT empty => UPDATE item: */
         else
+        {
+            m_pModelSourceOfData->itemFromIndex(dataKeyIndex(iPosition))->setData(strKey, Qt::UserRole);
             m_pModelSourceOfData->itemFromIndex(dataValueIndex(iPosition))->setText(strValue);
+        }
     }
     /* Else if 'changed value' is NOT empty: */
     else if (!strValue.isEmpty())
@@ -757,19 +760,74 @@ void UIExtraDataManagerWindow::sltDataHandleSelectionChanged(const QItemSelectio
 
 void UIExtraDataManagerWindow::sltDataHandleItemChanged(QStandardItem *pItem)
 {
-    /* Value-data index: */
-    const QModelIndex valueIndex = m_pModelSourceOfData->indexFromItem(pItem);
-    const int iRow = valueIndex.row();
-    const int iColumn = valueIndex.column();
-    AssertMsgReturnVoid(iColumn == 1, ("Only 2nd column can be changed!\n"));
+    /* Make sure passed item is valid: */
+    AssertPtrReturnVoid(pItem);
+
+    /* Item-data index: */
+    const QModelIndex itemIndex = m_pModelSourceOfData->indexFromItem(pItem);
+    const int iRow = itemIndex.row();
+    const int iColumn = itemIndex.column();
 
-    /* Key-data index: */
-    const QModelIndex keyIndex = dataKeyIndex(iRow);
+    /* Key-data is changed: */
+    if (iColumn == 0)
+    {
+        /* Should we replace changed key? */
+        bool fReplace = true;
+
+        /* List of 'known keys': */
+        QStringList knownKeys;
+        for (int iKeyRow = 0; iKeyRow < m_pModelSourceOfData->rowCount(); ++iKeyRow)
+        {
+            /* Do not consider the row we are changing as Qt's model is not yet updated: */
+            if (iKeyRow != iRow)
+                knownKeys << dataKey(iKeyRow);
+        }
+
+        /* If changed key exists: */
+        if (knownKeys.contains(itemIndex.data().toString()))
+        {
+            /* Show warning and ask for overwriting approval: */
+            if (!msgCenter().questionBinary(this, MessageType_Question,
+                                            QString("Overwriting already existing key, Continue?"),
+                                            0 /* auto-confirm id */,
+                                            QString("Overwrite") /* ok button text */,
+                                            QString() /* cancel button text */,
+                                            false /* ok button by default? */))
+            {
+                /* Cancel the operation, restore the original extra-data key: */
+                pItem->setData(itemIndex.data(Qt::UserRole).toString(), Qt::DisplayRole);
+                fReplace = false;
+            }
+            else
+            {
+                /* Delete previous extra-data key: */
+                gEDataManager->setExtraDataString(itemIndex.data().toString(),
+                                                  QString(),
+                                                  currentChooserID());
+            }
+        }
 
-    /* Update extra-data: */
-    gEDataManager->setExtraDataString(keyIndex.data().toString(),
-                                      valueIndex.data().toString(),
-                                      currentChooserID());
+        /* Replace changed extra-data key if necessary: */
+        if (fReplace)
+        {
+            gEDataManager->setExtraDataString(itemIndex.data(Qt::UserRole).toString(),
+                                              QString(),
+                                              currentChooserID());
+            gEDataManager->setExtraDataString(itemIndex.data().toString(),
+                                              dataValue(iRow),
+                                              currentChooserID());
+        }
+    }
+    /* Value-data is changed: */
+    else
+    {
+        /* Key-data index: */
+        const QModelIndex keyIndex = dataKeyIndex(iRow);
+        /* Update extra-data: */
+        gEDataManager->setExtraDataString(keyIndex.data().toString(),
+                                          itemIndex.data().toString(),
+                                          currentChooserID());
+    }
 }
 
 void UIExtraDataManagerWindow::sltDataHandleCustomContextMenuRequested(const QPoint &pos)
@@ -907,9 +965,35 @@ void UIExtraDataManagerWindow::sltAdd()
     /* Execute input-dialog: */
     if (pInputDialog->exec() == QDialog::Accepted)
     {
-        gEDataManager->setExtraDataString(pInputDialog->property("Key").toString(),
-                                          pInputDialog->property("Value").toString(),
-                                          currentChooserID());
+        /* Should we add new key? */
+        bool fAdd = true;
+
+        /* List of 'known keys': */
+        QStringList knownKeys;
+        for (int iKeyRow = 0; iKeyRow < m_pModelSourceOfData->rowCount(); ++iKeyRow)
+            knownKeys << dataKey(iKeyRow);
+
+        /* If new key exists: */
+        if (knownKeys.contains(pInputDialog->property("Key").toString()))
+        {
+            /* Show warning and ask for overwriting approval: */
+            if (!msgCenter().questionBinary(this, MessageType_Question,
+                                            QString("Overwriting already existing key, Continue?"),
+                                            0 /* auto-confirm id */,
+                                            QString("Overwrite") /* ok button text */,
+                                            QString() /* cancel button text */,
+                                            false /* ok button by default? */))
+            {
+                /* Cancel the operation: */
+                fAdd = false;
+            }
+        }
+
+        /* Add new extra-data key if necessary: */
+        if (fAdd)
+            gEDataManager->setExtraDataString(pInputDialog->property("Key").toString(),
+                                              pInputDialog->property("Value").toString(),
+                                              currentChooserID());
     }
 
     /* Destroy input-dialog: */
@@ -1702,7 +1786,7 @@ void UIExtraDataManagerWindow::addDataItem(const QString &strKey,
     QList<QStandardItem*> items;
     /* Create key item: */
     items << new QStandardItem(strKey);
-    items.last()->setEditable(false);
+    items.last()->setData(strKey, Qt::UserRole);
     AssertPtrReturnVoid(items.last());
     /* Create value item: */
     items << new QStandardItem(strValue);
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
index f36e4a0..26300a8 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
@@ -2099,6 +2099,13 @@ void VBoxGlobal::updateMachineStorage(const CMachine &constMachine, const UIMedi
                                                     fMount, false /* retry? */);
             }
         }
+        /* Mounting successful: */
+        else
+        {
+            /* Disable First RUN Wizard: */
+            if (gEDataManager->machineFirstTimeStarted(machine.GetId()))
+                gEDataManager->setMachineFirstTimeStarted(false, machine.GetId());
+        }
     }
 
     /* Save settings: */
diff --git a/src/VBox/Frontends/VirtualBox/src/main.cpp b/src/VBox/Frontends/VirtualBox/src/main.cpp
index 66a1200..1d8f738 100644
--- a/src/VBox/Frontends/VirtualBox/src/main.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/main.cpp
@@ -102,7 +102,7 @@ QString g_QStrHintLinuxNoDriver = QApplication::tr(
     "The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or "
     "there is a permission problem with /dev/vboxdrv. Please reinstall the kernel "
     "module by executing<br/><br/>"
-    "  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>"
+    "  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>"
     "as root. If it is available in your distribution, you should install the "
     "DKMS package first. This package keeps track of Linux kernel changes and "
     "recompiles the vboxdrv kernel module if necessary."
@@ -119,7 +119,7 @@ QString g_QStrHintLinuxWrongDriverVersion = QApplication::tr(
     "The VirtualBox kernel modules do not match this version of "
     "VirtualBox. The installation of VirtualBox was apparently not "
     "successful. Executing<br/><br/>"
-    "  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>"
+    "  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>"
     "may correct this. Make sure that you do not mix the "
     "OSE version and the PUEL version of VirtualBox."
     );
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
index 9cc0497..00ba393 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
@@ -949,6 +949,7 @@ QString UINetworkReplyPrivate::errorString() const
     {
         case UINetworkReply::NoError:                     break;
         case UINetworkReply::RemoteHostClosedError:       return m_strErrorTemplate.arg(m_pThread->context(), tr("Unable to initialize HTTP library"));
+        case UINetworkReply::UrlNotFoundError:            return m_strErrorTemplate.arg(m_pThread->context(), tr("Url not found on the server"));
         case UINetworkReply::HostNotFoundError:           return m_strErrorTemplate.arg(m_pThread->context(), tr("Host not found"));
         case UINetworkReply::ContentAccessDenied:         return m_strErrorTemplate.arg(m_pThread->context(), tr("Content access denied"));
         case UINetworkReply::ProtocolFailure:             return m_strErrorTemplate.arg(m_pThread->context(), tr("Protocol failure"));
@@ -970,7 +971,8 @@ void UINetworkReplyPrivate::sltFinished()
     {
         case VINF_SUCCESS:                         m_error = UINetworkReply::NoError; break;
         case VERR_HTTP_INIT_FAILED:                m_error = UINetworkReply::RemoteHostClosedError; break;
-        case VERR_HTTP_NOT_FOUND:                  m_error = UINetworkReply::HostNotFoundError; break;
+        case VERR_HTTP_NOT_FOUND:                  m_error = UINetworkReply::UrlNotFoundError; break;
+        case VERR_HTTP_HOST_NOT_FOUND:             m_error = UINetworkReply::HostNotFoundError; break;
         case VERR_HTTP_ACCESS_DENIED:              m_error = UINetworkReply::ContentAccessDenied; break;
         case VERR_HTTP_BAD_REQUEST:                m_error = UINetworkReply::ProtocolFailure; break;
         case VERR_HTTP_COULDNT_CONNECT:            m_error = UINetworkReply::ConnectionRefusedError; break;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
index ddfabc2..a306aa1 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
@@ -54,6 +54,7 @@ public:
         NoError,
         ConnectionRefusedError,
         RemoteHostClosedError,
+        UrlNotFoundError,
         HostNotFoundError,
         OperationCanceledError,
         SslHandshakeFailedError,
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
index 10aa0a1..c36eaec 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
@@ -1431,11 +1431,13 @@ void UIMachineLogic::sltTypeCABS()
 
 void UIMachineLogic::sltTypeCtrlBreak()
 {
-    static QVector<LONG> sequence(4);
+    static QVector<LONG> sequence(6);
     sequence[0] = 0x1d;        /* Ctrl down */
-    sequence[1] = 0x46;        /* Break down */
-    sequence[2] = 0x46 | 0x80; /* Break up */
-    sequence[3] = 0x1d | 0x80; /* Ctrl up */
+    sequence[1] = 0xe0;        /* Extended flag */
+    sequence[2] = 0x46;        /* Break down */
+    sequence[3] = 0xe0;        /* Extended flag */
+    sequence[4] = 0x46 | 0x80; /* Break up */
+    sequence[5] = 0x1d | 0x80; /* Ctrl up */
     keyboard().PutScancodes(sequence);
     AssertWrapperOk(keyboard());
 }
@@ -2172,18 +2174,23 @@ void UIMachineLogic::sltSwitchKeyboardLedsToPreviousLeds()
         return;
 
     /* Here we have to restore host LED lock states. */
-    if (m_pHostLedsState)
+    void *pvLedState = m_pHostLedsState;
+    if (pvLedState)
     {
+        /* bird: I've observed recursive calls here when setting m_pHostLedsState to NULL after calling
+                 WinHidDevicesApplyAndReleaseLedsState.  The result is a double free(), which the CRT
+                 usually detects and I could see this->m_pHostLedsState == NULL.  The windows function
+                 does dispatch loop fun, that's probably the reason for it.  Hopefully not an issue on OS X. */
+        m_pHostLedsState = NULL;
 #if defined(Q_WS_MAC)
-        DarwinHidDevicesApplyAndReleaseLedsState(m_pHostLedsState);
+        DarwinHidDevicesApplyAndReleaseLedsState(pvLedState);
 #elif defined(Q_WS_WIN)
         keyboardHandler()->winSkipKeyboardEvents(true);
-        WinHidDevicesApplyAndReleaseLedsState(m_pHostLedsState);
+        WinHidDevicesApplyAndReleaseLedsState(pvLedState);
         keyboardHandler()->winSkipKeyboardEvents(false);
 #else
         LogRelFlow(("UIMachineLogic::sltSwitchKeyboardLedsToPreviousLeds: restore host LED lock states does not supported on this platform\n"));
 #endif
-        m_pHostLedsState = NULL;
     }
 }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
index 1c3d8ff..91f2aae 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
@@ -249,9 +249,29 @@ void UIMachineView::sltPerformGuestResize(const QSize &toSize)
     LogRel(("GUI: UIMachineView::sltPerformGuestResize: "
             "Sending guest size-hint to screen %d as %dx%d\n",
             (int)screenId(), size.width(), size.height()));
-    display().SetVideoModeHint(screenId(),
-                               uisession()->isScreenVisible(screenId()),
-                               false, 0, 0, size.width(), size.height(), 0);
+
+    /* If auto-mount of guest-screens (auto-pilot) enabled: */
+    if (gEDataManager->autoMountGuestScreensEnabled(vboxGlobal().managedVMUuid()))
+    {
+        /* If host and guest have same opinion about guest-screen visibility: */
+        if (uisession()->isScreenVisible(screenId()) == uisession()->isScreenVisibleHostDesires(screenId()))
+            display().SetVideoModeHint(screenId(),
+                                       uisession()->isScreenVisible(screenId()),
+                                       false, 0, 0, size.width(), size.height(), 0);
+        /* If host desires to have guest-screen disabled and guest-screen is enabled, retrying: */
+        else if (!uisession()->isScreenVisibleHostDesires(screenId()))
+            display().SetVideoModeHint(screenId(), false, false, 0, 0, 0, 0, 0);
+        /* If host desires to have guest-screen enabled and guest-screen is disabled, retrying: */
+        else if (uisession()->isScreenVisibleHostDesires(screenId()))
+            display().SetVideoModeHint(screenId(), true, false, 0, 0, size.width(), size.height(), 0);
+    }
+    /* If auto-mount of guest-screens (auto-pilot) disabled: */
+    else
+    {
+        display().SetVideoModeHint(screenId(),
+                                   uisession()->isScreenVisible(screenId()),
+                                   false, 0, 0, size.width(), size.height(), 0);
+    }
 }
 
 void UIMachineView::sltHandleNotifyChange(int iWidth, int iHeight)
@@ -265,6 +285,9 @@ void UIMachineView::sltHandleNotifyChange(int iWidth, int iHeight)
     if (uisession()->isGuestResizeIgnored())
         return;
 
+    if (uisession()->isGuestScreenUnDrawable())
+        return;
+
     /* If machine-window is visible: */
     if (uisession()->isScreenVisible(m_uScreenId))
     {
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
index 0ee5852..5dd72e4 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
@@ -129,6 +129,7 @@ void UIMultiScreenLayout::update()
             /* Then we have to disable excessive guest-screen: */
             LogRel(("GUI: UIMultiScreenLayout::update: Disabling excessive guest-screen %d\n", iGuestScreen));
             display.SetVideoModeHint(iGuestScreen, false, false, 0, 0, 0, 0, 0);
+            m_pMachineLogic->uisession()->setScreenVisibleHostDesires(iGuestScreen, false);
         }
     }
 
@@ -162,6 +163,7 @@ void UIMultiScreenLayout::update()
             LogRel(("GUI: UIMultiScreenLayout::update: Enabling guest-screen %d with following resolution: %dx%d\n",
                     iGuestScreen, uWidth, uHeight));
             display.SetVideoModeHint(iGuestScreen, true, false, 0, 0, uWidth, uHeight, 32);
+            m_pMachineLogic->uisession()->setScreenVisibleHostDesires(iGuestScreen, true);
         }
     }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
index 51c8b73..c16d77a 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
@@ -1214,6 +1214,13 @@ void UISession::prepareScreens()
         if (countOfVisibleWindows() < 1)
             m_monitorVisibilityVector[0] = true;
     }
+
+    /* Prepare initial screen visibility status of host-desires.
+     * This is mostly dummy initialization as host-desires should get updated later in multi-screen layout.
+     * By default making host-desires same as facts. */
+    m_monitorVisibilityVectorHostDesires.resize(machine().GetMonitorCount());
+    for (int iScreenIndex = 0; iScreenIndex < m_monitorVisibilityVector.size(); ++iScreenIndex)
+        m_monitorVisibilityVectorHostDesires[iScreenIndex] = m_monitorVisibilityVector[iScreenIndex];
 }
 
 void UISession::prepareFramebuffers()
@@ -1447,6 +1454,103 @@ WId UISession::winId() const
     return mainMachineWindow()->winId();
 }
 
+/** Generate a BGRA bitmap which approximates a XOR/AND mouse pointer.
+ *
+ * Pixels which has 1 in the AND mask and not 0 in the XOR mask are replaced by
+ * the inverted pixel and 8 surrounding pixels with the original color.
+ * Fort example a white pixel (W) is replaced with a black (B) pixel:
+ *         WWW
+ *  W   -> WBW
+ *         WWW
+ * The surrounding pixels are written only if the corresponding source pixel
+ * does not affect the screen, i.e. AND bit is 1 and XOR value is 0.
+ */
+static void renderCursorPixels(const uint32_t *pu32XOR, const uint8_t *pu8AND,
+                               uint32_t u32Width, uint32_t u32Height,
+                               uint32_t *pu32Pixels, uint32_t cbPixels)
+{
+    /* Output pixels set to 0 which allow to not write transparent pixels anymore. */
+    memset(pu32Pixels, 0, cbPixels);
+
+    const uint32_t *pu32XORSrc = pu32XOR;  /* Iterator for source XOR pixels. */
+    const uint8_t *pu8ANDSrcLine = pu8AND; /* The current AND mask scanline. */
+    uint32_t *pu32Dst = pu32Pixels;        /* Iterator for all destination BGRA pixels. */
+
+    /* Some useful constants. */
+    const int cbANDLine = ((int)u32Width + 7) / 8;
+
+    int y;
+    for (y = 0; y < (int)u32Height; ++y)
+    {
+        int x;
+        for (x = 0; x < (int)u32Width; ++x)
+        {
+            const uint32_t u32Pixel = *pu32XORSrc; /* Current pixel at (x,y) */
+            const uint8_t *pu8ANDSrc = pu8ANDSrcLine + x / 8; /* Byte which containt current AND bit. */
+
+            if ((*pu8ANDSrc << (x % 8)) & 0x80)
+            {
+                if (u32Pixel)
+                {
+                    const uint32_t u32PixelInverted = ~u32Pixel;
+
+                    /* Scan neighbor pixels and assign them if they are transparent. */
+                    int dy;
+                    for (dy = -1; dy <= 1; ++dy)
+                    {
+                        const int yn = y + dy;
+                        if (yn < 0 || yn >= (int)u32Height)
+                            continue; /* Do not cross the bounds. */
+
+                        int dx;
+                        for (dx = -1; dx <= 1; ++dx)
+                        {
+                            const int xn = x + dx;
+                            if (xn < 0 || xn >= (int)u32Width)
+                                continue;  /* Do not cross the bounds. */
+
+                            if (dx != 0 || dy != 0)
+                            {
+                                /* Check if the neighbor pixel is transparent. */
+                                const uint32_t *pu32XORNeighborSrc = &pu32XORSrc[dy * (int)u32Width + dx];
+                                const uint8_t *pu8ANDNeighborSrc = pu8ANDSrcLine + dy * cbANDLine + xn / 8;
+                                if (   *pu32XORNeighborSrc == 0
+                                    && ((*pu8ANDNeighborSrc << (xn % 8)) & 0x80) != 0)
+                                {
+                                    /* Transparent neighbor pixels are replaced with the source pixel value. */
+                                    uint32_t *pu32PixelNeighborDst = &pu32Dst[dy * (int)u32Width + dx];
+                                    *pu32PixelNeighborDst = u32Pixel | 0xFF000000;
+                                }
+                            }
+                            else
+                            {
+                                /* The pixel itself is replaced with inverted value. */
+                                *pu32Dst = u32PixelInverted | 0xFF000000;
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    /* The pixel does not affect the screen.
+                     * Do nothing. Do not touch destination which can already contain generated pixels.
+                     */
+                }
+            }
+            else
+            {
+                /* AND bit is 0, the pixel will be just drawn. */
+                *pu32Dst = u32Pixel | 0xFF000000;
+            }
+
+            ++pu32XORSrc; /* Next source pixel. */
+            ++pu32Dst;    /* Next destination pixel. */
+        }
+
+        /* Next AND scanline. */
+        pu8ANDSrcLine += cbANDLine;
+    }
+}
 void UISession::setPointerShape(const uchar *pShapeData, bool fHasAlpha,
                                 uint uXHot, uint uYHot, uint uWidth, uint uHeight)
 {
@@ -1595,39 +1699,15 @@ void UISession::setPointerShape(const uchar *pShapeData, bool fHasAlpha,
 
         XcursorPixel *dstShapePtr = img->pixels;
 
-        for (uint y = 0; y < uHeight; y ++)
+        if (fHasAlpha)
         {
-            memcpy (dstShapePtr, srcShapePtr, srcShapePtrScan);
-
-            if (!fHasAlpha)
-            {
-                /* Convert AND mask to the alpha channel: */
-                uchar byte = 0;
-                for (uint x = 0; x < uWidth; x ++)
-                {
-                    if (!(x % 8))
-                        byte = *(srcAndMaskPtr ++);
-                    else
-                        byte <<= 1;
-
-                    if (byte & 0x80)
-                    {
-                        /* Linux doesn't support inverted pixels (XOR ops,
-                         * to be exact) in cursor shapes, so we detect such
-                         * pixels and always replace them with black ones to
-                         * make them visible at least over light colors */
-                        if (dstShapePtr [x] & 0x00FFFFFF)
-                            dstShapePtr [x] = 0xFF000000;
-                        else
-                            dstShapePtr [x] = 0x00000000;
-                    }
-                    else
-                        dstShapePtr [x] |= 0xFF000000;
-                }
-            }
-
-            srcShapePtr += srcShapePtrScan;
-            dstShapePtr += uWidth;
+            memcpy(dstShapePtr, srcShapePtr, uHeight * srcShapePtrScan);
+        }
+        else
+        {
+            renderCursorPixels((uint32_t *)srcShapePtr, srcAndMaskPtr,
+                               uWidth, uHeight,
+                               dstShapePtr, uHeight * srcShapePtrScan);
         }
 
         /* Set the new cursor: */
@@ -1641,33 +1721,16 @@ void UISession::setPointerShape(const uchar *pShapeData, bool fHasAlpha,
 
     /* Create a ARGB image out of the shape data. */
     QImage image  (uWidth, uHeight, QImage::Format_ARGB32);
-    const uint8_t* pbSrcMask = static_cast<const uint8_t*> (srcAndMaskPtr);
-    unsigned cbSrcMaskLine = RT_ALIGN (uWidth, 8) / 8;
-    for (unsigned int y = 0; y < uHeight; ++y)
+
+    if (fHasAlpha)
     {
-        for (unsigned int x = 0; x < uWidth; ++x)
-        {
-           unsigned int color = ((unsigned int*)srcShapePtr)[y*uWidth+x];
-           /* If the alpha channel isn't in the shape data, we have to
-            * create them from the and-mask. This is a bit field where 1
-            * represent transparency & 0 opaque respectively. */
-           if (!fHasAlpha)
-           {
-               if (!(pbSrcMask[x / 8] & (1 << (7 - (x % 8)))))
-                   color  |= 0xff000000;
-               else
-               {
-                   /* This isn't quite right, but it's the best we can do I think... */
-                   if (color & 0x00ffffff)
-                       color = 0xff000000;
-                   else
-                       color = 0x00000000;
-               }
-           }
-           image.setPixel (x, y, color);
-        }
-        /* Move one scanline forward. */
-        pbSrcMask += cbSrcMaskLine;
+        memcpy(image.bits(), srcShapePtr, uHeight * uWidth * 4);
+    }
+    else
+    {
+        renderCursorPixels((uint32_t *)srcShapePtr, srcAndMaskPtr,
+                           uWidth, uHeight,
+                           (uint32_t *)image.bits(), uHeight * uWidth * 4);
     }
 
     /* Set the new cursor: */
@@ -1842,6 +1905,24 @@ bool UISession::postprocessInitialization()
     return true;
 }
 
+bool UISession::isScreenVisibleHostDesires(ulong uScreenId) const
+{
+    /* Make sure index feats the bounds: */
+    AssertReturn(uScreenId < (ulong)m_monitorVisibilityVectorHostDesires.size(), false);
+
+    /* Return 'actual' (host-desire) visibility status: */
+    return m_monitorVisibilityVectorHostDesires.value((int)uScreenId);
+}
+
+void UISession::setScreenVisibleHostDesires(ulong uScreenId, bool fIsMonitorVisible)
+{
+    /* Make sure index feats the bounds: */
+    AssertReturnVoid(uScreenId < (ulong)m_monitorVisibilityVectorHostDesires.size());
+
+    /* Remember 'actual' (host-desire) visibility status: */
+    m_monitorVisibilityVectorHostDesires[(int)uScreenId] = fIsMonitorVisible;
+}
+
 bool UISession::isScreenVisible(ulong uScreenId) const
 {
     /* Make sure index feats the bounds: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
index 0b6f7d1..07c7dae 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
@@ -222,6 +222,10 @@ public:
     void setMouseCaptured(bool fIsMouseCaptured) { m_fIsMouseCaptured = fIsMouseCaptured; }
     void setMouseIntegrated(bool fIsMouseIntegrated) { m_fIsMouseIntegrated = fIsMouseIntegrated; }
 
+    /* Screen visibility status for host-desires: */
+    bool isScreenVisibleHostDesires(ulong uScreenId) const;
+    void setScreenVisibleHostDesires(ulong uScreenId, bool fIsMonitorVisible);
+
     /* Screen visibility status: */
     bool isScreenVisible(ulong uScreenId) const;
     void setScreenVisible(ulong uScreenId, bool fIsMonitorVisible);
@@ -230,6 +234,11 @@ public:
     QSize lastFullScreenSize(ulong uScreenId) const;
     void setLastFullScreenSize(ulong uScreenId, QSize size);
 
+    /** Returns whether guest-screen is undrawable.
+     *  @todo: extend this method to all the states when guest-screen is undrawable. */
+    bool isGuestScreenUnDrawable() const { return machineState() == KMachineState_Stopping ||
+                                                  machineState() == KMachineState_Saving; }
+
     /* Returns existing framebuffer for the given screen-number;
      * Returns 0 (asserts) if screen-number attribute is out of bounds: */
     UIFrameBuffer* frameBuffer(ulong uScreenId) const;
@@ -417,6 +426,9 @@ private:
     /* Screen visibility vector: */
     QVector<bool> m_monitorVisibilityVector;
 
+    /* Screen visibility vector for host-desires: */
+    QVector<bool> m_monitorVisibilityVectorHostDesires;
+
     /* Screen last full-screen size vector: */
     QVector<QSize> m_monitorLastFullScreenSizeVector;
 
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp
index 23e2dab..efc767b 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp
@@ -455,6 +455,16 @@ void UIMachineLogicFullscreen::sltHostScreenAvailableAreaChange()
     LogRel(("GUI: UIMachineLogicFullscreen: Host-screen available-area change ignored\n"));
 }
 
+void UIMachineLogicFullscreen::sltAdditionsStateChanged()
+{
+    /* Call to base-class: */
+    UIMachineLogic::sltAdditionsStateChanged();
+
+    LogRel(("GUI: UIMachineLogicFullscreen: Additions-state actual-change event, rebuild multi-screen layout\n"));
+    /* Rebuild multi-screen layout: */
+    m_pScreenLayout->rebuild();
+}
+
 void UIMachineLogicFullscreen::prepareActionGroups()
 {
     /* Call to base-class: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h
index d09560f..dd56048 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h
@@ -109,6 +109,8 @@ private slots:
     virtual void sltHostScreenCountChange();
     /** Handles host-screen available-area change. */
     virtual void sltHostScreenAvailableAreaChange();
+    /** Handles additions-state change. */
+    virtual void sltAdditionsStateChanged();
 
 private:
 
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
index da44278..b30ccaa 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
@@ -227,7 +227,10 @@ void UIMachineLogicNormal::sltHandleActionTriggerViewScreenToggle(int iIndex, bo
     KGuestMonitorStatus monitorStatus = KGuestMonitorStatus_Enabled;
     display().GetScreenResolution(iIndex, uWidth, uHeight, uBitsPerPixel, uOriginX, uOriginY, monitorStatus);
     if (!fEnabled)
+    {
         display().SetVideoModeHint(iIndex, false, false, 0, 0, 0, 0, 0);
+        uisession()->setScreenVisibleHostDesires(iIndex, false);
+    }
     else
     {
         /* Defaults: */
@@ -236,6 +239,7 @@ void UIMachineLogicNormal::sltHandleActionTriggerViewScreenToggle(int iIndex, bo
         if (!uHeight)
             uHeight = 600;
         display().SetVideoModeHint(iIndex, true, false, 0, 0, uWidth, uHeight, 32);
+        uisession()->setScreenVisibleHostDesires(iIndex, true);
     }
 }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp
index 14841e7..45acbd4 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp
@@ -155,6 +155,7 @@ void UIMachineViewNormal::resendSizeHint()
     display().SetVideoModeHint(screenId(),
                                guestScreenVisibilityStatus(),
                                false, 0, 0, sizeHint.width(), sizeHint.height(), 0);
+    uisession()->setScreenVisibleHostDesires(screenId(), guestScreenVisibilityStatus());
 }
 
 void UIMachineViewNormal::adjustGuestScreenSize()
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
index c88c5ef..9436782 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
@@ -536,27 +536,31 @@ void UIMachineWindowNormal::updateAppearanceOf(int iElement)
     /* Call to base-class: */
     UIMachineWindow::updateAppearanceOf(iElement);
 
-    /* Update machine window content: */
+    /* Set status-bar indicator-pool auto update timer: */
     if (iElement & UIVisualElement_IndicatorPoolStuff)
         m_pIndicatorsPool->setAutoUpdateIndicatorStates(statusBar()->isVisible() && uisession()->isRunning());
-    if (iElement & UIVisualElement_HDStuff)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_HardDisks);
-    if (iElement & UIVisualElement_CDStuff)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_OpticalDisks);
-    if (iElement & UIVisualElement_FDStuff)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_FloppyDisks);
-    if (iElement & UIVisualElement_NetworkStuff)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_Network);
-    if (iElement & UIVisualElement_USBStuff)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_USB);
-    if (iElement & UIVisualElement_SharedFolderStuff)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_SharedFolders);
-    if (iElement & UIVisualElement_Display)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_Display);
-    if (iElement & UIVisualElement_VideoCapture)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_VideoCapture);
-    if (iElement & UIVisualElement_FeaturesStuff)
-        m_pIndicatorsPool->updateAppearance(IndicatorType_Features);
+    /* Update status-bar indicator-pool appearance only when status-bar is visible and VM is running: */
+    if (statusBar()->isVisible() && uisession()->isRunning())
+    {
+        if (iElement & UIVisualElement_HDStuff)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_HardDisks);
+        if (iElement & UIVisualElement_CDStuff)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_OpticalDisks);
+        if (iElement & UIVisualElement_FDStuff)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_FloppyDisks);
+        if (iElement & UIVisualElement_NetworkStuff)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_Network);
+        if (iElement & UIVisualElement_USBStuff)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_USB);
+        if (iElement & UIVisualElement_SharedFolderStuff)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_SharedFolders);
+        if (iElement & UIVisualElement_Display)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_Display);
+        if (iElement & UIVisualElement_VideoCapture)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_VideoCapture);
+        if (iElement & UIVisualElement_FeaturesStuff)
+            m_pIndicatorsPool->updateAppearance(IndicatorType_Features);
+    }
 }
 
 #ifndef Q_WS_MAC
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
index bf83a01..6b91f3b 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
@@ -163,6 +163,7 @@ void UIMachineViewScale::resendSizeHint()
     display().SetVideoModeHint(screenId(),
                                guestScreenVisibilityStatus(),
                                false, 0, 0, sizeHint.width(), sizeHint.height(), 0);
+    uisession()->setScreenVisibleHostDesires(screenId(), guestScreenVisibilityStatus());
 }
 
 QSize UIMachineViewScale::sizeHint() const
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
index b7cd846..ef7c44d 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
@@ -206,6 +206,16 @@ void UIMachineLogicSeamless::sltHostScreenCountChange()
     UIMachineLogic::sltHostScreenCountChange();
 }
 
+void UIMachineLogicSeamless::sltAdditionsStateChanged()
+{
+    /* Call to base-class: */
+    UIMachineLogic::sltAdditionsStateChanged();
+
+    LogRel(("GUI: UIMachineLogicSeamless: Additions-state actual-change event, rebuild multi-screen layout\n"));
+    /* Rebuild multi-screen layout: */
+    m_pScreenLayout->rebuild();
+}
+
 void UIMachineLogicSeamless::prepareActionGroups()
 {
     /* Call to base-class: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h
index fee9979..749bca5 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h
@@ -66,6 +66,8 @@ private slots:
     virtual void sltGuestMonitorChange(KGuestMonitorChangedEventType changeType, ulong uScreenId, QRect screenGeo);
     /** Handles host-screen count change. */
     virtual void sltHostScreenCountChange();
+    /** Handles additions-state change. */
+    virtual void sltAdditionsStateChanged();
 
 #ifndef RT_OS_DARWIN
     /** Invokes popup-menu. */
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp
index f58788a..a7064fe 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2013 Oracle Corporation
+ * Copyright (C) 2012-2015 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1099,9 +1099,10 @@ void UIGChooserModel::sltStartScrolling()
     QGraphicsView *pView = scene()->views()[0];
     QScrollBar *pVerticalScrollBar = pView->verticalScrollBar();
 
-    /* Request still valid? */
+    /* Convert mouse position to view co-ordinates: */
     QPoint mousePos = pView->mapFromGlobal(QCursor::pos());
-    if (mousePos.y() < m_iScrollingTokenSize)
+    /* Mouse position is at the top of view? */
+    if (mousePos.y() < m_iScrollingTokenSize && mousePos.y() > 0)
     {
         int iValue = mousePos.y();
         if (!iValue) iValue = 1;
@@ -1114,7 +1115,8 @@ void UIGChooserModel::sltStartScrolling()
             QTimer::singleShot(10, this, SLOT(sltStartScrolling()));
         }
     }
-    else if (mousePos.y() > pView->height() - m_iScrollingTokenSize)
+    /* Mouse position is at the bottom of view? */
+    else if (mousePos.y() > pView->height() - m_iScrollingTokenSize && mousePos.y() < pView->height())
     {
         int iValue = pView->height() - mousePos.y();
         if (!iValue) iValue = 1;
@@ -1379,9 +1381,12 @@ bool UIGChooserModel::eventFilter(QObject *pWatched, QEvent *pEvent)
         /* Context-menu handler: */
         case QEvent::GraphicsSceneContextMenu:
             return processContextMenuEvent(static_cast<QGraphicsSceneContextMenuEvent*>(pEvent));
-        /* Drag&drop scroll-event handler: */
+        /* Drag&drop scroll-event (drag-move) handler: */
         case QEvent::GraphicsSceneDragMove:
             return processDragMoveEvent(static_cast<QGraphicsSceneDragDropEvent*>(pEvent));
+        /* Drag&drop scroll-event (drag-leave) handler: */
+        case QEvent::GraphicsSceneDragLeave:
+            return processDragLeaveEvent(static_cast<QGraphicsSceneDragDropEvent*>(pEvent));
     }
 
     /* Call to base-class: */
@@ -1684,6 +1689,19 @@ bool UIGChooserModel::processDragMoveEvent(QGraphicsSceneDragDropEvent *pEvent)
     return false;
 }
 
+bool UIGChooserModel::processDragLeaveEvent(QGraphicsSceneDragDropEvent *pEvent)
+{
+    /* Event object is not required here: */
+    Q_UNUSED(pEvent);
+
+    /* Make sure to stop scrolling as drag-leave event happened: */
+    if (m_fIsScrollingInProgress)
+        m_fIsScrollingInProgress = false;
+
+    /* Pass event: */
+    return false;
+}
+
 void UIGChooserModel::loadGroupTree()
 {
     /* Add all the approved machines we have into the group-tree: */
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.h
index e82e0a6..f9bc6f0 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012 Oracle Corporation
+ * Copyright (C) 2012-2015 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -260,6 +260,7 @@ private:
 
     /* Handler: Drag&drop event: */
     bool processDragMoveEvent(QGraphicsSceneDragDropEvent *pEvent);
+    bool processDragLeaveEvent(QGraphicsSceneDragDropEvent *pEvent);
 
     /* Helpers: Loading stuff: */
     void loadGroupTree();
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
index 5ce2ba3..76a22b7 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
@@ -722,17 +722,21 @@ bool UIPortForwardingTable::validate() const
         const IpData hostIp = m_pModel->data(m_pModel->index(i, UIPortForwardingModel::UIPortForwardingDataType_HostIp), Qt::EditRole).value<IpData>();
         const IpData guestIp = m_pModel->data(m_pModel->index(i, UIPortForwardingModel::UIPortForwardingDataType_GuestIp), Qt::EditRole).value<IpData>();
 
-        /* If at aleast one port is 'zero': */
+        /* If at least one port is 'zero': */
         if (hostPort.value() == 0 || guestPort.value() == 0)
             return msgCenter().warnAboutIncorrectPort(window());
-        /* If at aleast one address is incorrect: */
+        /* If at least one address is incorrect: */
         if (!hostIp.trimmed().isEmpty() &&
-            (   !RTNetIsIPv4AddrStr(hostIp.toAscii().constData())
-             || RTNetStrIsIPv4AddrAny(hostIp.toAscii().constData())))
+            (   (   !RTNetIsIPv4AddrStr(hostIp.toAscii().constData())
+                 && !RTNetIsIPv6AddrStr(hostIp.toAscii().constData()))
+             || RTNetStrIsIPv4AddrAny(hostIp.toAscii().constData())
+             || RTNetStrIsIPv6AddrAny(hostIp.toAscii().constData())))
             return msgCenter().warnAboutIncorrectAddress(window());
         if (!guestIp.trimmed().isEmpty() &&
-            (   !RTNetIsIPv4AddrStr(guestIp.toAscii().constData())
-             || RTNetStrIsIPv4AddrAny(guestIp.toAscii().constData())))
+            (   (   !RTNetIsIPv4AddrStr(guestIp.toAscii().constData())
+                 && !RTNetIsIPv6AddrStr(guestIp.toAscii().constData()))
+             || RTNetStrIsIPv4AddrAny(guestIp.toAscii().constData())
+             || RTNetStrIsIPv6AddrAny(guestIp.toAscii().constData())))
             return msgCenter().warnAboutIncorrectAddress(window());
         /* If empty guest address is not allowed: */
         if (   !m_fAllowEmptyGuestIPs
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
index cb5ca01..94fad68 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
@@ -115,8 +115,10 @@ static const osTypePattern gs_OSTypePattern[] =
     { QRegExp("((Mac)|(Tig)|(Leop)|(Yose)|(os[ ]*x)).*32",                                      Qt::CaseInsensitive), "MacOS" },
 
     /* Code names for Linux distributions: */
-    { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)|(quantal)|(raring)|(saucy)|(trusty)|(utopic)|(vivid)).*64",    Qt::CaseInsensitive), "Ubuntu_64" },
-    { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)|(quantal)|(raring)|(saucy)|(trusty)|(utopic)|(vivid)).*32",    Qt::CaseInsensitive), "Ubuntu" },
+    { QRegExp("((bianca)|(cassandra)|(celena)|(daryna)|(elyssa)|(felicia)|(gloria)|(helena)|(isadora)|(julia)|(katya)|(lisa)|(maya)|(nadia)|(olivia)|(petra)|(qiana)|(rebecca)|(rafaela)|(rosa)).*64",    Qt::CaseInsensitive), "Ubuntu_64" },
+    { QRegExp("((bianca)|(cassandra)|(celena)|(daryna)|(elyssa)|(felicia)|(gloria)|(helena)|(isadora)|(julia)|(katya)|(lisa)|(maya)|(nadia)|(olivia)|(petra)|(qiana)|(rebecca)|(rafaela)|(rosa)).*32",    Qt::CaseInsensitive), "Ubuntu" },
+    { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)|(quantal)|(raring)|(saucy)|(trusty)|(utopic)|(vivid)|(wily)|(xenial)).*64",    Qt::CaseInsensitive), "Ubuntu_64" },
+    { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)|(quantal)|(raring)|(saucy)|(trusty)|(utopic)|(vivid)|(wily)|(xenial)).*32",    Qt::CaseInsensitive), "Ubuntu" },
     { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(jessie)|(sid)).*64",                                                                          Qt::CaseInsensitive), "Debian_64" },
     { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(jessie)|(sid)).*32",                                                                          Qt::CaseInsensitive), "Debian" },
     { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)|(beefy)|(spherical)).*64", Qt::CaseInsensitive), "Fedora_64" },
@@ -139,8 +141,8 @@ static const osTypePattern gs_OSTypePattern[] =
     { QRegExp("((Red)|(rhel)|(cen)).*32",          Qt::CaseInsensitive), "RedHat" },
     { QRegExp("Tur.*64",                           Qt::CaseInsensitive), "Turbolinux_64" },
     { QRegExp("Tur.*32",                           Qt::CaseInsensitive), "Turbolinux" },
-    { QRegExp("Ub.*64",                            Qt::CaseInsensitive), "Ubuntu_64" },
-    { QRegExp("Ub.*32",                            Qt::CaseInsensitive), "Ubuntu" },
+    { QRegExp("(Ub)|(Min).*64",                    Qt::CaseInsensitive), "Ubuntu_64" },
+    { QRegExp("(Ub)|(Min).*32",                    Qt::CaseInsensitive), "Ubuntu" },
     { QRegExp("Xa.*64",                            Qt::CaseInsensitive), "Xandros_64" },
     { QRegExp("Xa.*32",                            Qt::CaseInsensitive), "Xandros" },
     { QRegExp("((Or)|(oel)|(ol)).*64",             Qt::CaseInsensitive), "Oracle_64" },
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
index 0326551..cf27ac8 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
@@ -497,6 +497,7 @@ unsigned int crLog2Floor(unsigned int x)
 
 static GLuint crStateFramebufferGet(CRFramebufferObjectState *fbo, GLenum target, CRFramebufferObject **apFBOs)
 {
+    /** @todo Since this function returns not more than one FBO, callers can be cleaned up. */
     GLuint cPBOs = 0;
     switch (target)
     {
@@ -504,23 +505,14 @@ static GLuint crStateFramebufferGet(CRFramebufferObjectState *fbo, GLenum target
             cPBOs = 1;
             apFBOs[0] = fbo->readFB;
             break;
+        /* OpenGL glFramebufferTexture, glFramebufferRenderbuffer, glFramebufferRenderbuffer specs:
+         * "GL_FRAMEBUFFER is equivalent to GL_DRAW_FRAMEBUFFER."
+         */
+        case GL_FRAMEBUFFER:
         case GL_DRAW_FRAMEBUFFER:
             cPBOs = 1;
             apFBOs[0] = fbo->drawFB;
             break;
-        case GL_FRAMEBUFFER:
-            if (fbo->readFB == fbo->drawFB)
-            {
-                cPBOs = 1;
-                apFBOs[0] = fbo->readFB;
-            }
-            else
-            {
-                cPBOs = 2;
-                apFBOs[0] = fbo->readFB;
-                apFBOs[1] = fbo->drawFB;
-            }
-            break;
         default:
             crWarning("unexpected target value: 0x%x", target);
             cPBOs = 0;
diff --git a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c
index d23dff9..031dec0 100644
--- a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c
+++ b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c
@@ -1455,6 +1455,13 @@ static int crVBoxHGCMDoConnect( CRConnection *conn )
                 rc = VINF_SUCCESS;
             }
 
+            if (g_crvboxhgcm.u32HostCaps & CR_VBOX_CAP_HOST_CAPS_NOT_SUFFICIENT)
+            {
+                crDebug("HGCM connect: insufficient host capabilities\n");
+                g_crvboxhgcm.u32HostCaps = 0;
+                return FALSE;
+            }
+
             VBOXCRHGSMIPROFILE_FUNC_EPILOGUE();
             return RT_SUCCESS(rc);
         }
diff --git a/src/VBox/HostDrivers/Support/SUPDrv.cpp b/src/VBox/HostDrivers/Support/SUPDrv.cpp
index cee36ca..8321ec9 100644
--- a/src/VBox/HostDrivers/Support/SUPDrv.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrv.cpp
@@ -329,6 +329,9 @@ static SUPFUNC g_aFunctions[] =
 #if defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS)
     { "RTR0DbgKrnlInfoOpen",                    (void *)RTR0DbgKrnlInfoOpen },          /* only-darwin, only-solaris */
     { "RTR0DbgKrnlInfoQueryMember",             (void *)RTR0DbgKrnlInfoQueryMember },   /* only-darwin, only-solaris */
+# if defined(RT_OS_SOLARIS)
+    { "RTR0DbgKrnlInfoQuerySize",               (void *)RTR0DbgKrnlInfoQuerySize },     /* only-solaris */
+# endif
     { "RTR0DbgKrnlInfoQuerySymbol",             (void *)RTR0DbgKrnlInfoQuerySymbol },   /* only-darwin, only-solaris */
     { "RTR0DbgKrnlInfoRelease",                 (void *)RTR0DbgKrnlInfoRelease },       /* only-darwin, only-solaris */
     { "RTR0DbgKrnlInfoRetain",                  (void *)RTR0DbgKrnlInfoRetain },        /* only-darwin, only-solaris */
diff --git a/src/VBox/HostDrivers/Support/SUPDrvGip.cpp b/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
index d9706e3..76d1630 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
@@ -4092,7 +4092,7 @@ static int supdrvTscDeltaThreadButchered(PSUPDRVDEVEXT pDevExt, bool fSpinlockHe
 
     pDevExt->enmTscDeltaThreadState = kTscDeltaThreadState_Butchered;
     RTSpinlockRelease(pDevExt->hTscDeltaSpinlock);
-    OSDBGPRINT(("supdrvTscDeltaThreadButchered: %s. rc=%Rrc\n", rcFailed));
+    OSDBGPRINT(("supdrvTscDeltaThreadButchered: %s. rc=%Rrc\n", pszFailed, rcFailed));
     return rcFailed;
 }
 
@@ -4137,12 +4137,12 @@ static DECLCALLBACK(int) supdrvTscDeltaThread(RTTHREAD hThread, void *pvUser)
                  * regular, interruptible sleep here and ignore wake ups due to signals.
                  * See task_contributes_to_load() in include/linux/sched.h in the Linux sources.
                  */
-                rc = RTThreadUserWaitNoResume(pDevExt->hTscDeltaThread, pDevExt->cMsTscDeltaTimeout);
+                rc = RTThreadUserWaitNoResume(hThread, pDevExt->cMsTscDeltaTimeout);
                 if (   RT_FAILURE(rc)
                     && rc != VERR_TIMEOUT
                     && rc != VERR_INTERRUPTED)
                     return supdrvTscDeltaThreadButchered(pDevExt, false /* fSpinlockHeld */, "RTThreadUserWait", rc);
-                RTThreadUserReset(pDevExt->hTscDeltaThread);
+                RTThreadUserReset(hThread);
                 break;
             }
 
@@ -4248,18 +4248,21 @@ static DECLCALLBACK(int) supdrvTscDeltaThread(RTTHREAD hThread, void *pvUser)
 static int supdrvTscDeltaThreadWait(PSUPDRVDEVEXT pDevExt, SUPDRVTSCDELTATHREADSTATE enmCurState,
                                     SUPDRVTSCDELTATHREADSTATE enmNewState)
 {
+    SUPDRVTSCDELTATHREADSTATE enmActualState;
+    int rc;
+
     /*
      * Wait a short while for the expected state transition.
      */
-    int rc;
     RTSemEventWait(pDevExt->hTscDeltaEvent, RT_MS_1SEC);
     RTSpinlockAcquire(pDevExt->hTscDeltaSpinlock);
-    if (pDevExt->enmTscDeltaThreadState == enmNewState)
+    enmActualState = pDevExt->enmTscDeltaThreadState;
+    if (enmActualState == enmNewState)
     {
         RTSpinlockRelease(pDevExt->hTscDeltaSpinlock);
         rc = VINF_SUCCESS;
     }
-    else if (pDevExt->enmTscDeltaThreadState == enmCurState)
+    else if (enmActualState == enmCurState)
     {
         /*
          * Wait longer if the state has not yet transitioned to the one we want.
@@ -4272,23 +4275,22 @@ static int supdrvTscDeltaThreadWait(PSUPDRVDEVEXT pDevExt, SUPDRVTSCDELTATHREADS
             /*
              * Check the state whether we've succeeded.
              */
-            SUPDRVTSCDELTATHREADSTATE enmState;
             RTSpinlockAcquire(pDevExt->hTscDeltaSpinlock);
-            enmState = pDevExt->enmTscDeltaThreadState;
+            enmActualState = pDevExt->enmTscDeltaThreadState;
             RTSpinlockRelease(pDevExt->hTscDeltaSpinlock);
-            if (enmState == enmNewState)
+            if (enmActualState == enmNewState)
                 rc = VINF_SUCCESS;
-            else if (enmState == enmCurState)
+            else if (enmActualState == enmCurState)
             {
                 rc = VERR_TIMEOUT;
-                OSDBGPRINT(("supdrvTscDeltaThreadWait: timed out state transition. enmState=%d enmNewState=%d\n", enmState,
-                            enmNewState));
+                OSDBGPRINT(("supdrvTscDeltaThreadWait: timed out state transition. enmActualState=%d enmNewState=%d\n",
+                            enmActualState, enmNewState));
             }
             else
             {
                 rc = VERR_INTERNAL_ERROR;
                 OSDBGPRINT(("supdrvTscDeltaThreadWait: invalid state transition from %d to %d, expected %d\n", enmCurState,
-                            enmState, enmNewState));
+                            enmActualState, enmNewState));
             }
         }
         else
@@ -4297,7 +4299,8 @@ static int supdrvTscDeltaThreadWait(PSUPDRVDEVEXT pDevExt, SUPDRVTSCDELTATHREADS
     else
     {
         RTSpinlockRelease(pDevExt->hTscDeltaSpinlock);
-        OSDBGPRINT(("supdrvTscDeltaThreadWait: invalid state transition from %d to %d\n", enmCurState, enmNewState));
+        OSDBGPRINT(("supdrvTscDeltaThreadWait: invalid state %d when transitioning from %d to %d\n",
+                    enmActualState, enmCurState, enmNewState));
         rc = VERR_INTERNAL_ERROR;
     }
 
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
index 3e1be81..ef1069d 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
@@ -2275,8 +2275,24 @@ static int supR3HardNtViCallWinVerifyTrust(HANDLE hFile, PCRTUTF16 pwszName, uin
             case TRUST_E_NOSIGNATURE:             pszErrConst = "TRUST_E_NOSIGNATURE";          break;
             case TRUST_E_FAIL:                    pszErrConst = "TRUST_E_FAIL";                 break;
             case TRUST_E_EXPLICIT_DISTRUST:       pszErrConst = "TRUST_E_EXPLICIT_DISTRUST";    break;
+            case CERT_E_EXPIRED:                  pszErrConst = "CERT_E_EXPIRED";               break;
+            case CERT_E_VALIDITYPERIODNESTING:    pszErrConst = "CERT_E_VALIDITYPERIODNESTING"; break;
+            case CERT_E_ROLE:                     pszErrConst = "CERT_E_ROLE";                  break;
+            case CERT_E_PATHLENCONST:             pszErrConst = "CERT_E_PATHLENCONST";          break;
+            case CERT_E_CRITICAL:                 pszErrConst = "CERT_E_CRITICAL";              break;
+            case CERT_E_PURPOSE:                  pszErrConst = "CERT_E_PURPOSE";               break;
+            case CERT_E_ISSUERCHAINING:           pszErrConst = "CERT_E_ISSUERCHAINING";        break;
+            case CERT_E_MALFORMED:                pszErrConst = "CERT_E_MALFORMED";             break;
+            case CERT_E_UNTRUSTEDROOT:            pszErrConst = "CERT_E_UNTRUSTEDROOT";         break;
             case CERT_E_CHAINING:                 pszErrConst = "CERT_E_CHAINING";              break;
+            case CERT_E_REVOKED:                  pszErrConst = "CERT_E_REVOKED";               break;
+            case CERT_E_UNTRUSTEDTESTROOT:        pszErrConst = "CERT_E_UNTRUSTEDTESTROOT";     break;
             case CERT_E_REVOCATION_FAILURE:       pszErrConst = "CERT_E_REVOCATION_FAILURE";    break;
+            case CERT_E_CN_NO_MATCH:              pszErrConst = "CERT_E_CN_NO_MATCH";           break;
+            case CERT_E_WRONG_USAGE:              pszErrConst = "CERT_E_WRONG_USAGE";           break;
+            case CERT_E_UNTRUSTEDCA:              pszErrConst = "CERT_E_UNTRUSTEDCA";           break;
+            case CERT_E_INVALID_POLICY:           pszErrConst = "CERT_E_INVALID_POLICY";        break;
+            case CERT_E_INVALID_NAME:             pszErrConst = "CERT_E_INVALID_NAME";          break;
             case CRYPT_E_FILE_ERROR:              pszErrConst = "CRYPT_E_FILE_ERROR";           break;
             case CRYPT_E_REVOKED:                 pszErrConst = "CRYPT_E_REVOKED";              break;
         }
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
index 7302ca8..9ebd45e 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
@@ -1154,6 +1154,28 @@ static void supR3HardenedWinVerifyCacheProcessWvtTodos(void)
 
 
 /**
+ * Translates VBox status code (from supHardenedWinVerifyImageTrust) to an NT
+ * status.
+ *
+ * @returns NT status.
+ * @param   rc                      VBox status code.
+ */
+static NTSTATUS supR3HardenedScreenImageCalcStatus(int rc)
+{
+    /* This seems to be what LdrLoadDll returns when loading a 32-bit DLL into
+       a 64-bit process.  At least here on windows 10 (2015-11-xx).
+
+       NtCreateSection probably returns something different, possibly a warning,
+       we currently don't distinguish between the too, so we stick with the
+       LdrLoadDll one as it's definitely an error.*/
+    if (rc == VERR_LDR_ARCH_MISMATCH)
+        return STATUS_INVALID_IMAGE_FORMAT;
+
+    return STATUS_TRUST_FAILURE;
+}
+
+
+/**
  * Screens an image file or file mapped with execute access.
  *
  * @returns NT status code.
@@ -1263,7 +1285,7 @@ static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, bool fIgnore
             supR3HardenedError(VINF_SUCCESS, false,
                                "supR3HardenedScreenImage/%s: cached rc=%Rrc fImage=%d fProtect=%#x fAccess=%#x cHits=%u %ls\n",
                                pszCaller, pCacheHit->rc, fImage, *pfProtect, *pfAccess, cHits, uBuf.UniStr.Buffer);
-        return STATUS_TRUST_FAILURE;
+        return supR3HardenedScreenImageCalcStatus(pCacheHit->rc);
     }
 
     /*
@@ -1449,7 +1471,7 @@ static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, bool fIgnore
                            pszCaller, rc, fImage, *pfAccess, *pfProtect, uBuf.UniStr.Buffer, ErrInfo.pszMsg);
         if (hMyFile != hFile)
             supR3HardenedWinVerifyCacheInsert(&uBuf.UniStr, hMyFile, rc, fWinVerifyTrust, fFlags);
-        return STATUS_TRUST_FAILURE;
+        return supR3HardenedScreenImageCalcStatus(rc);
     }
 
     /*
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
index 11193c5..997765b 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
@@ -67,12 +67,6 @@ typedef struct VBOXNETFLTNOTIFIER {
 typedef struct VBOXNETFLTNOTIFIER *PVBOXNETFLTNOTIFIER;
 
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
-# define vlan_tx_tag_get(skb)       skb_vlan_tag_get(skb)
-# define vlan_tx_tag_present(skb)   skb_vlan_tag_present(skb)
-#endif
-
-
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
@@ -128,6 +122,21 @@ typedef struct VBOXNETFLTNOTIFIER *PVBOXNETFLTNOTIFIER;
 # endif
 #endif
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
+# define VBOX_HAVE_SKB_VLAN
+#else
+# ifdef RHEL_RELEASE_CODE
+#  if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 2)
+#   define VBOX_HAVE_SKB_VLAN
+#  endif
+# endif
+#endif
+
+#ifdef VBOX_HAVE_SKB_VLAN
+# define vlan_tx_tag_get(skb)       skb_vlan_tag_get(skb)
+# define vlan_tx_tag_present(skb)   skb_vlan_tag_present(skb)
+#endif
+
 #ifndef NET_IP_ALIGN
 # define NET_IP_ALIGN 2
 #endif
@@ -139,6 +148,7 @@ typedef struct VBOXNETFLTNOTIFIER *PVBOXNETFLTNOTIFIER;
 #endif
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18)
+
 /** Indicates that the linux kernel may send us GSO frames. */
 # define VBOXNETFLT_WITH_GSO                1
 
@@ -156,12 +166,13 @@ typedef struct VBOXNETFLTNOTIFIER *PVBOXNETFLTNOTIFIER;
  *  to the internal network.  */
 # define VBOXNETFLT_WITH_GSO_RECV           1
 
-#endif
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) */
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
 /** This enables or disables handling of GSO frames coming from the wire (GRO). */
 # define VBOXNETFLT_WITH_GRO                1
 #endif
+
 /*
  * GRO support was backported to RHEL 5.4
  */
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
index 542d508..f6eaa6b 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
@@ -34,6 +34,7 @@
 
 #include <Wbemidl.h>
 #include <comdef.h>
+#include <Ws2tcpip.h>
 
 
 #ifndef Assert   /** @todo r=bird: where would this be defined? */
@@ -447,6 +448,7 @@ static BOOL vboxNetCfgWinRemoveAllNetDevicesOfIdCallback(HDEVINFO hDevInfo, PSP_
     {
         if (SetupDiSetSelectedDevice(hDevInfo, pDev))
         {
+#ifndef VBOXNETCFG_DELAYEDRENAME
             /* Figure out NetCfgInstanceId. */
             HKEY hKey = SetupDiOpenDevRegKey(hDevInfo,
                                              pDev,
@@ -507,6 +509,7 @@ static BOOL vboxNetCfgWinRemoveAllNetDevicesOfIdCallback(HDEVINFO hDevInfo, PSP_
 
                 RegCloseKey(hKey);
             }
+#endif /* VBOXNETCFG_DELAYEDRENAME */
 
             if (SetupDiCallClassInstaller(DIF_REMOVE, hDevInfo, pDev))
             {
@@ -700,7 +703,7 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinEnumNetDevices(LPCWSTR pwszPnPId,
 
             if (cCurId >= cPnPId)
             {
-                NonStandardLogFlow(("!wcsnicmp(pCurId = (%S), pwszPnPId = (%S), cPnPId = (%d))", pCurId, pwszPnPId, cPnPId));
+                NonStandardLogFlow(("!wcsnicmp(pCurId = (%S), pwszPnPId = (%S), cPnPId = (%d))\n", pCurId, pwszPnPId, cPnPId));
 
                 pCurId += cCurId - cPnPId;
                 if (!wcsnicmp(pCurId, pwszPnPId, cPnPId))
@@ -741,7 +744,7 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinPropChangeAllNetDevicesOfId(IN LPCWSTR
     VBOXNECTFGWINPROPCHANGE Pc;
     Pc.enmPcType = enmPcType;
     Pc.hr = S_OK;
-    NonStandardLogFlow(("Calling VBoxNetCfgWinEnumNetDevices with lpszPnPId =(%S) and vboxNetCfgWinPropChangeAllNetDevicesOfIdCallback", lpszPnPId));
+    NonStandardLogFlow(("Calling VBoxNetCfgWinEnumNetDevices with lpszPnPId =(%S) and vboxNetCfgWinPropChangeAllNetDevicesOfIdCallback\n", lpszPnPId));
 
     HRESULT hr = VBoxNetCfgWinEnumNetDevices(lpszPnPId, vboxNetCfgWinPropChangeAllNetDevicesOfIdCallback, &Pc);
     if (!SUCCEEDED(hr))
@@ -1704,7 +1707,7 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinIsDhcpEnabled(const GUID * pGuid, BOOL
 
 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinEnableStaticIpConfig(IN const GUID *pGuid, IN ULONG ip, IN ULONG mask)
 {
-    NonStandardLogFlow(("VBoxNetCfgWinEnableStaticIpConfig: ip=0x%x mask=0x%x", ip, mask));
+    NonStandardLogFlow(("VBoxNetCfgWinEnableStaticIpConfig: ip=0x%x mask=0x%x\n", ip, mask));
     ComPtr<IWbemServices> pSvc;
     HRESULT hr = netIfWinCreateIWbemServices(pSvc.asOutParam());
     if (SUCCEEDED(hr))
@@ -1751,7 +1754,7 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinEnableStaticIpConfig(IN const GUID *pGu
         }
     }
 
-    NonStandardLogFlow(("VBoxNetCfgWinEnableStaticIpConfig: returns 0x%x", hr));
+    NonStandardLogFlow(("VBoxNetCfgWinEnableStaticIpConfig: returns 0x%x\n", hr));
     return hr;
 }
 
@@ -1886,6 +1889,35 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinDhcpRediscover(IN const GUID *pGuid)
     return hr;
 }
 
+static const char *vboxNetCfgWinAddrToStr(char *pszBuf, LPSOCKADDR pAddr)
+{
+    switch (pAddr->sa_family)
+    {
+        case AF_INET:
+            sprintf(pszBuf, "%d.%d.%d.%d",
+                    ((PSOCKADDR_IN)pAddr)->sin_addr.S_un.S_un_b.s_b1,
+                    ((PSOCKADDR_IN)pAddr)->sin_addr.S_un.S_un_b.s_b2,
+                    ((PSOCKADDR_IN)pAddr)->sin_addr.S_un.S_un_b.s_b3,
+                    ((PSOCKADDR_IN)pAddr)->sin_addr.S_un.S_un_b.s_b4);
+            break;
+        case AF_INET6:
+            sprintf(pszBuf, "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[0], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[1],
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[2], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[3],
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[4], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[5],
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[6], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[7],
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[8], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[9],
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[10], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[11],
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[12], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[13],
+                 ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[14], ((PSOCKADDR_IN6)pAddr)->sin6_addr.s6_addr[15]);
+            break;
+        default:
+            strcpy(pszBuf, "unknown");
+            break;
+    }
+    return pszBuf;
+}
+
 typedef bool (*PFNVBOXNETCFG_IPSETTINGS_CALLBACK) (ULONG ip, ULONG mask, PVOID pContext);
 
 static void vboxNetCfgWinEnumIpConfig(PIP_ADAPTER_ADDRESSES pAddresses, PFNVBOXNETCFG_IPSETTINGS_CALLBACK pfnCallback, PVOID pContext)
@@ -1893,53 +1925,40 @@ static void vboxNetCfgWinEnumIpConfig(PIP_ADAPTER_ADDRESSES pAddresses, PFNVBOXN
     PIP_ADAPTER_ADDRESSES pAdapter;
     for (pAdapter = pAddresses; pAdapter; pAdapter = pAdapter->Next)
     {
-        PIP_ADAPTER_UNICAST_ADDRESS pAddr = pAdapter->FirstUnicastAddress;
-        PIP_ADAPTER_PREFIX pPrefix = pAdapter->FirstPrefix;
+        char szBuf[80];
 
-        if (pAddr && pPrefix)
+        NonStandardLogFlow(("+- Enumerating adapter '%ls' %s\n", pAdapter->FriendlyName, pAdapter->AdapterName));
+        for (PIP_ADAPTER_PREFIX pPrefix = pAdapter->FirstPrefix; pPrefix; pPrefix = pPrefix->Next)
         {
-            do
+            const char *pcszAddress = vboxNetCfgWinAddrToStr(szBuf, pPrefix->Address.lpSockaddr);
+            /* We are concerned with IPv4 only, ignore the rest. */
+            if (pPrefix->Address.lpSockaddr->sa_family != AF_INET)
             {
-                bool fIPFound, fMaskFound;
-                fIPFound = fMaskFound = false;
-                ULONG ip, mask;
-                for (; pAddr && !fIPFound; pAddr = pAddr->Next)
-                {
-                    switch (pAddr->Address.lpSockaddr->sa_family)
-                    {
-                        case AF_INET:
-                            fIPFound = true;
-                            memcpy(&ip,
-                                    &((struct sockaddr_in *)pAddr->Address.lpSockaddr)->sin_addr.s_addr,
-                                    sizeof(ip));
-                            break;
-//                            case AF_INET6:
-//                                break;
-                    }
-                }
-
-                for (; pPrefix && !fMaskFound; pPrefix = pPrefix->Next)
-                {
-                    switch (pPrefix->Address.lpSockaddr->sa_family)
-                    {
-                        case AF_INET:
-                            if (!pPrefix->PrefixLength || pPrefix->PrefixLength > 31) /* in case the ip helper API is queried while NetCfg write lock is held */
-                                break;                                               /* the address values can contain illegal values */
-                            fMaskFound = true;
-                            mask = (~(((ULONG)~0) >> pPrefix->PrefixLength));
-                            mask = htonl(mask);
-                            break;
-//                            case AF_INET6:
-//                                break;
-                    }
-                }
-
-                if (!fIPFound || !fMaskFound)
-                    break;
-
-                if (!pfnCallback(ip, mask, pContext))
-                    return;
-            } while (true);
+                NonStandardLogFlow(("| +- %s %d: not IPv4, ignoring\n", pcszAddress, pPrefix->PrefixLength));
+                continue;
+            }
+            /* Ignore invalid prefixes as well as host addresses. */
+            if (pPrefix->PrefixLength < 1 || pPrefix->PrefixLength > 31)
+            {
+                NonStandardLogFlow(("| +- %s %d: host or broadcast, ignoring\n", pcszAddress, pPrefix->PrefixLength));
+                continue;
+            }
+            /* Ignore multicast and beyond. */
+            ULONG ip = ((struct sockaddr_in *)pPrefix->Address.lpSockaddr)->sin_addr.s_addr;
+            if ((ip & 0xF0) > 224)
+            {
+                NonStandardLogFlow(("| +- %s %d: multicast, ignoring\n", pcszAddress, pPrefix->PrefixLength));
+                continue;
+            }
+            ULONG mask = htonl((~(((ULONG)~0) >> pPrefix->PrefixLength)));
+            bool fContinue = pfnCallback(ip, mask, pContext);
+            if (!fContinue)
+            {
+                NonStandardLogFlow(("| +- %s %d: CONFLICT!\n", pcszAddress, pPrefix->PrefixLength));
+                return;
+            }
+            else
+                NonStandardLogFlow(("| +- %s %d: no conflict, moving on\n", pcszAddress, pPrefix->PrefixLength));
         }
     }
 }
@@ -1975,10 +1994,9 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinGenHostOnlyNetworkNetworkIp(OUT PULONG
     DWORD dwRc;
     HRESULT hr = S_OK;
     /*
-     * Most of the hosts probably have less than 10 adapters,
-     * so we'll mostly succeed from the first attempt.
+     * MSDN recommends to pre-allocate a 15KB buffer.
      */
-    ULONG uBufLen = sizeof(IP_ADAPTER_ADDRESSES) * 10;
+    ULONG uBufLen = 15 * 1024;
     PIP_ADAPTER_ADDRESSES pAddresses = (PIP_ADAPTER_ADDRESSES)malloc(uBufLen);
     if (!pAddresses)
         return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
@@ -2005,10 +2023,13 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinGenHostOnlyNetworkNetworkIp(OUT PULONG
         {
             ULONG ipProbe = rand()*255/RAND_MAX;
             ipProbe = ip192168 | (ipProbe << 16);
+            unsigned char *a = (unsigned char *)&ipProbe;
+            NonStandardLogFlow(("probing %d.%d.%d.%d\n", a[0], a[1], a[2], a[3]));
             IPPROBE_INIT(&Context, ipProbe);
             vboxNetCfgWinEnumIpConfig(pAddresses, vboxNetCfgWinIpProbeCallback, &Context);
             if (!Context.bConflict)
             {
+                NonStandardLogFlow(("found unused net %d.%d.%d.%d\n", a[0], a[1], a[2], a[3]));
                 *pNetIp = ipProbe;
                 *pNetMask = inet_addr("255.255.255.0");
                 break;
@@ -2282,6 +2303,25 @@ static BOOL vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority(IN INetCfg *pNc,
                                             if (FAILED(hr))
                                                 NonStandardLogFlow(("Unable to move interface, hr (0x%x)\n", hr));
                                             bFoundIface = true;
+                                            /*
+                                             * Enable binding paths for host-only adapters bound to bridged filter
+                                             * (see @bugref{8140}).
+                                             */
+                                            HRESULT hr2;
+                                            LPWSTR pwszHwId = NULL;
+                                            if ((hr2 = pNcc->GetId(&pwszHwId)) != S_OK)
+                                                NonStandardLogFlow(("Failed to get HW ID, hr (0x%x)\n", hr2));
+                                            else if (_wcsnicmp(pwszHwId, VBOXNETCFGWIN_NETLWF_ID,
+                                                               sizeof(VBOXNETCFGWIN_NETLWF_ID)/2))
+                                                NonStandardLogFlow(("Ignoring component %ls\n", pwszHwId));
+                                            else if ((hr2 = pNetCfgBindPath->IsEnabled()) != S_FALSE)
+                                                NonStandardLogFlow(("Already enabled binding path, hr (0x%x)\n", hr2));
+                                            else if ((hr2 = pNetCfgBindPath->Enable(TRUE)) != S_OK)
+                                                NonStandardLogFlow(("Failed to enable binding path, hr (0x%x)\n", hr2));
+                                            else
+                                                NonStandardLogFlow(("Enabled binding path\n"));
+                                            if (pwszHwId)
+                                                CoTaskMemFree(pwszHwId);
                                         }
                                     }
                                     pNetCfgCompo->Release();
@@ -2695,8 +2735,46 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinUpdateHostOnlyNetworkInterface(LPCWSTR
     return VBoxDrvCfgDrvUpdate(pcsxwId, pcsxwInf, pbRebootRequired);
 }
 
-VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWSTR pInfPath, IN bool bIsInfPathFile,
-                                                                        OUT GUID *pGuid, OUT BSTR *lppszName, OUT BSTR *pErrMsg)
+static const char *vboxNetCfgWinGetStateText(DWORD dwState)
+{
+    switch (dwState)
+    {
+        case SERVICE_STOPPED: return "is not running";
+        case SERVICE_STOP_PENDING: return "is stopping";
+        case SERVICE_CONTINUE_PENDING: return "continue is pending";
+        case SERVICE_PAUSE_PENDING: return "pause is pending";
+        case SERVICE_PAUSED: return "is paused";
+        case SERVICE_RUNNING: return "is running";
+        case SERVICE_START_PENDING: return "is starting";
+    }
+    return "state is invalid";
+}
+
+static DWORD vboxNetCfgWinGetNetSetupState(SC_HANDLE hService)
+{
+    SERVICE_STATUS status;
+    status.dwCurrentState = SERVICE_RUNNING;
+    if (hService) {
+        if (QueryServiceStatus(hService, &status))
+            NonStandardLogFlow(("NetSetupSvc %s\n", vboxNetCfgWinGetStateText(status.dwCurrentState)));
+        else
+            NonStandardLogFlow(("QueryServiceStatus failed (0x%x)\n", GetLastError()));
+    }
+    return status.dwCurrentState;
+}
+
+DECLINLINE(bool) vboxNetCfgWinIsNetSetupRunning(SC_HANDLE hService)
+{
+    return vboxNetCfgWinGetNetSetupState(hService) == SERVICE_RUNNING;
+}
+
+DECLINLINE(bool) vboxNetCfgWinIsNetSetupStopped(SC_HANDLE hService)
+{
+    return vboxNetCfgWinGetNetSetupState(hService) == SERVICE_STOPPED;
+}
+
+static HRESULT vboxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWSTR pInfPath, IN bool bIsInfPathFile,
+                                                           OUT GUID *pGuid, OUT BSTR *lppszName, OUT BSTR *pErrMsg)
 {
     HRESULT hrc = S_OK;
 
@@ -2704,7 +2782,6 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
     SP_DEVINFO_DATA DeviceInfoData;
     PVOID pQueueCallbackContext = NULL;
     DWORD ret = 0;
-    BOOL found = FALSE;
     BOOL registered = FALSE;
     BOOL destroyList = FALSE;
     WCHAR pWCfgGuidString [50];
@@ -2714,6 +2791,7 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
 
     do
     {
+        BOOL found = FALSE;
         GUID netGuid;
         SP_DRVINFO_DATA DriverInfoData;
         SP_DEVINSTALL_PARAMS DeviceInstallParams;
@@ -2994,25 +3072,34 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
         if (hkey == INVALID_HANDLE_VALUE)
             SetErrBreak(("SetupDiOpenDevRegKey failed (0x%08X)", GetLastError()));
 
-
         /* Query the instance ID; on Windows 10, the registry key may take a short
-         * while to appear. Microsoft recommends waiting for up to 5 seconds.
+         * while to appear. Microsoft recommends waiting for up to 5 seconds, but
+         * we want to be on the safe side, so let's wait for 20 seconds. Waiting
+         * longer is harmful as network setup service will shut down after a period
+         * of inactivity.
          */
-        for (int retries = 0; retries < 5 * 5; ++retries)
+        for (int retries = 0; retries < 2 * 20; ++retries)
         {
             cbSize = sizeof(pWCfgGuidString);
             ret = RegQueryValueExW (hkey, L"NetCfgInstanceId", NULL,
                                    &dwValueType, (LPBYTE) pWCfgGuidString, &cbSize);
             /* As long as the return code is FILE_NOT_FOUND, sleep and retry. */
             if (ret == ERROR_FILE_NOT_FOUND)
-                Sleep(200); /* 1/5 of a second. */
+                Sleep(500); /* half second */
             else
                 break;
         }
 
+        if (ret == ERROR_FILE_NOT_FOUND)
+        {
+            hrc = E_ABORT;
+            break;
+        }
+
         if (ret != ERROR_SUCCESS)
-            SetErrBreak(("Querying NetCfgInstanceId failed (0x%08X)", GetLastError()));
+            SetErrBreak(("Querying NetCfgInstanceId failed (0x%08X)", ret));
 
+#ifndef VBOXNETCFG_DELAYEDRENAME
         /*
          * We need to query the device name after we have succeeded in querying its
          * instance ID to avoid similar waiting-and-retrying loop (see @bugref{7973}).
@@ -3044,6 +3131,12 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
                                               err));
             }
         }
+#else /* !VBOXNETCFG_DELAYEDRENAME */
+        /* Re-use DevName for device instance id retrieval. */
+        if (!SetupDiGetDeviceInstanceId(hDeviceInfo, &DeviceInfoData, DevName, RT_ELEMENTS(DevName), &cbSize))
+            SetErrBreak (("SetupDiGetDeviceInstanceId failed (0x%08X)",
+                          GetLastError()));
+#endif /* !VBOXNETCFG_DELAYEDRENAME */
     }
     while (0);
 
@@ -3062,7 +3155,7 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
         if (ret != 0 && registered)
             SetupDiCallClassInstaller(DIF_REMOVE, hDeviceInfo, &DeviceInfoData);
 
-        found = SetupDiDeleteDeviceInfo(hDeviceInfo, &DeviceInfoData);
+        SetupDiDeleteDeviceInfo(hDeviceInfo, &DeviceInfoData);
 
         /* destroy the driver info list */
         if (destroyList)
@@ -3075,13 +3168,17 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
     /* return the network connection GUID on success */
     if (SUCCEEDED(hrc))
     {
+        HRESULT hr;
+        INetCfg *pNetCfg = NULL;
+        LPWSTR lpszApp = NULL;
+#ifndef VBOXNETCFG_DELAYEDRENAME
         WCHAR ConnectionName[128];
         ULONG cbName = sizeof(ConnectionName);
 
-        HRESULT hr = VBoxNetCfgWinGenHostonlyConnectionName(DevName, ConnectionName, &cbName);
+        hr = VBoxNetCfgWinGenHostonlyConnectionName(DevName, ConnectionName, &cbName);
         if (SUCCEEDED(hr))
             hr = VBoxNetCfgWinRenameConnection(pWCfgGuidString, ConnectionName);
-
+#endif
         if (lppszName)
         {
             *lppszName = SysAllocString((const OLECHAR *) DevName);
@@ -3099,8 +3196,6 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
                 NonStandardLogFlow(("CLSIDFromString failed, hrc (0x%x)\n", hrc));
         }
 
-        INetCfg *pNetCfg = NULL;
-        LPWSTR lpszApp = NULL;
         hr = VBoxNetCfgWinQueryINetCfg(&pNetCfg, TRUE, L"VirtualBox Host-Only Creation",
                                        30 * 1000, /* on Vista we often get 6to4svc.dll holding the lock, wait for 30 sec.  */
                                        /* TODO: special handling for 6to4svc.dll ???, i.e. several retrieves */
@@ -3147,5 +3242,147 @@ VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWS
     return hrc;
 }
 
+VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWSTR pInfPath, IN bool bIsInfPathFile,
+                                                                        OUT GUID *pGuid, OUT BSTR *lppszName, OUT BSTR *pErrMsg)
+{
+    HRESULT hrc = vboxNetCfgWinCreateHostOnlyNetworkInterface(pInfPath, bIsInfPathFile, pGuid, lppszName, pErrMsg);
+    if (hrc == E_ABORT)
+    {
+        NonStandardLogFlow(("Timed out while waiting for NetCfgInstanceId, try again immediately...\n"));
+        /*
+         * This is the first time we fail to obtain NetCfgInstanceId, let us
+         * retry it once. It is needed to handle the situation when network
+         * setup fails to recognize the arrival of our device node while it
+         * is busy removing another host-only interface, and it gets stuck
+         * with no matching network interface created for our device node.
+         * See @bugref{7973} for details.
+         */
+        hrc = vboxNetCfgWinCreateHostOnlyNetworkInterface(pInfPath, bIsInfPathFile, pGuid, lppszName, pErrMsg);
+        if (hrc == E_ABORT)
+        {
+            NonStandardLogFlow(("Timed out again while waiting for NetCfgInstanceId, try again after a while...\n"));
+            /*
+             * This is the second time we fail to obtain NetCfgInstanceId, let us
+             * retry it once more. This time we wait to network setup service
+             * to go down before retrying. Hopefully it will resolve all error
+             * conditions. See @bugref{7973} for details.
+             */
+
+            SC_HANDLE hSCM = NULL;
+            SC_HANDLE hService = NULL;
+
+            hSCM = OpenSCManager(NULL, NULL, GENERIC_READ);
+            if (hSCM)
+            {
+                hService = OpenService(hSCM, _T("NetSetupSvc"), GENERIC_READ);
+                if (hService)
+                {
+                    for (int retries = 0; retries < 60 && !vboxNetCfgWinIsNetSetupStopped(hService); ++retries)
+                        Sleep(1000);
+                    CloseServiceHandle(hService);
+                    hrc = vboxNetCfgWinCreateHostOnlyNetworkInterface(pInfPath, bIsInfPathFile, pGuid, lppszName, pErrMsg);
+                }
+                else
+                    NonStandardLogFlow(("OpenService failed (0x%x)\n", GetLastError()));
+                CloseServiceHandle(hSCM);
+            }
+            else
+                NonStandardLogFlow(("OpenSCManager failed (0x%x)", GetLastError()));
+            /* Give up and report the error. */
+            if (hrc == E_ABORT)
+            {
+                bstr_t bstrError = bstr_printf("Querying NetCfgInstanceId failed (0x%08X)", ERROR_FILE_NOT_FOUND);
+                *pErrMsg = bstrError.Detach();
+                hrc = E_FAIL;
+            }
+        }
+    }
+    return hrc;
+}
+
+#ifdef VBOXNETCFG_DELAYEDRENAME
+VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRenameHostOnlyConnection(IN const GUID *pGuid, IN LPCWSTR pwszId, OUT BSTR *pDevName)
+{
+    HRESULT hr = S_OK;
+    WCHAR wszDevName[256];
+    WCHAR wszConnectionNewName[128];
+    ULONG cbName = sizeof(wszConnectionNewName);
+
+    HDEVINFO hDevInfo = SetupDiCreateDeviceInfoList(&GUID_DEVCLASS_NET, NULL);
+    if (hDevInfo != INVALID_HANDLE_VALUE)
+    {
+        SP_DEVINFO_DATA DevInfoData;
+                
+        DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+        if (SetupDiOpenDeviceInfo(hDevInfo, pwszId, NULL, 0, &DevInfoData))
+        {
+            DWORD err = ERROR_SUCCESS;
+            if (!SetupDiGetDeviceRegistryPropertyW(hDevInfo, &DevInfoData,
+                                                   SPDRP_FRIENDLYNAME, NULL,
+                                                   (PBYTE)wszDevName, RT_ELEMENTS(wszDevName), NULL))
+            {
+                err = GetLastError();
+                if (err == ERROR_INVALID_DATA)
+                {
+                    err = SetupDiGetDeviceRegistryPropertyW(hDevInfo, &DevInfoData,
+                                                            SPDRP_DEVICEDESC, NULL,
+                                                            (PBYTE)wszDevName, RT_ELEMENTS(wszDevName), NULL)
+                        ? ERROR_SUCCESS
+                        : GetLastError();
+                }
+            }
+            if (err == ERROR_SUCCESS)
+            {
+                hr = VBoxNetCfgWinGenHostonlyConnectionName(wszDevName, wszConnectionNewName, &cbName);
+                if (SUCCEEDED(hr))
+                {
+                    WCHAR wszGuid[50];
+                    int cbWGuid = StringFromGUID2(*pGuid, wszGuid, RT_ELEMENTS(wszGuid));
+                    if (cbWGuid)
+                    {
+                        hr = VBoxNetCfgWinRenameConnection(wszGuid, wszConnectionNewName);
+                        if (FAILED(hr))
+                            NonStandardLogFlow(("VBoxNetCfgWinRenameHostOnlyConnection: VBoxNetCfgWinRenameConnection failed (0x%x)\n", hr));
+                    }
+                    else
+                    {
+                        err = GetLastError();
+                        hr = HRESULT_FROM_WIN32(err);
+                        if (SUCCEEDED(hr))
+                            hr = E_FAIL;
+                        NonStandardLogFlow(("StringFromGUID2 failed err=%u, hr=0x%x\n", err, hr));
+                    }
+                }
+                else
+                    NonStandardLogFlow(("VBoxNetCfgWinRenameHostOnlyConnection: VBoxNetCfgWinGenHostonlyConnectionName failed (0x%x)\n", hr));
+                if (SUCCEEDED(hr) && pDevName)
+                {
+                    *pDevName = SysAllocString((const OLECHAR *)wszDevName);
+                    if (!*pDevName)
+                    {
+                        NonStandardLogFlow(("SysAllocString failed\n"));
+                        hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
+                    }
+                }
+            }
+            else
+            {
+                hr = HRESULT_FROM_WIN32(err);
+                NonStandardLogFlow(("VBoxNetCfgWinRenameHostOnlyConnection: SetupDiGetDeviceRegistryPropertyW failed (0x%x)\n", err));
+            }
+        }
+        else
+        {
+            DWORD err = GetLastError();
+            hr = HRESULT_FROM_WIN32(err);
+            NonStandardLogFlow(("VBoxNetCfgWinRenameHostOnlyConnection: SetupDiOpenDeviceInfo failed (0x%x)\n", err));
+        }
+        SetupDiDestroyDeviceInfoList(hDevInfo);
+    }
+
+    return hr;
+}
+#endif /* VBOXNETCFG_DELAYEDRENAME */
+
 #undef SetErrBreak
 
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
index f4f71a8..04e88e3 100644
--- a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
+++ b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
@@ -207,91 +207,100 @@ static void __exit VBoxPciLinuxUnload(void)
     Log(("VBoxPciLinuxUnload - done\n"));
 }
 
-int vboxPciOsDevRegisterWithIommu(PVBOXRAWPCIINS pIns)
+static int vboxPciLinuxDevRegisterWithIommu(PVBOXRAWPCIINS pIns)
 {
 #ifdef VBOX_WITH_IOMMU
-    int rc;
-    int status;
+    int rc = VINF_SUCCESS;
     struct pci_dev *pPciDev = pIns->pPciDev;
     PVBOXRAWPCIDRVVM pData = VBOX_DRV_VMDATA(pIns);
+    IPRT_LINUX_SAVE_EFL_AC();
 
-    if (!pData)
-    {
-        vbpci_printk(KERN_DEBUG, pPciDev,
-                     "cannot attach to IOMMU, no VM data\n");
-        return VERR_INVALID_PARAMETER;
-    }
-
-    if (!pData->pIommuDomain)
-    {
-        vbpci_printk(KERN_DEBUG, pIns->pPciDev,
-                     "cannot attach to IOMMU, no domain\n");
-        return VERR_NOT_FOUND;
-    }
-
-    status = iommu_attach_device(pData->pIommuDomain, &pPciDev->dev);
-    if (status == 0)
+    if (RT_LIKELY(pData))
     {
-        vbpci_printk(KERN_DEBUG, pPciDev, "attached to IOMMU\n");
-        pIns->fIommuUsed = true;
-        rc = VINF_SUCCESS;
+        if (RT_LIKELY(pData->pIommuDomain))
+        {
+            /** @todo: KVM checks IOMMU_CAP_CACHE_COHERENCY and sets
+             *  flag IOMMU_CACHE later used when mapping physical
+             *  addresses, which could improve performance.
+             */
+            int rcLnx = iommu_attach_device(pData->pIommuDomain, &pPciDev->dev);
+            if (!rcLnx)
+            {
+                vbpci_printk(KERN_DEBUG, pPciDev, "attached to IOMMU\n");
+                pIns->fIommuUsed = true;
+                rc = VINF_SUCCESS;
+            }
+            else
+            {
+                vbpci_printk(KERN_DEBUG, pPciDev, "failed to attach to IOMMU, error %d\n", rcLnx);
+                rc = VERR_INTERNAL_ERROR;
+            }
+        }
+        else
+        {
+           vbpci_printk(KERN_DEBUG, pIns->pPciDev, "cannot attach to IOMMU, no domain\n");
+            rc = VERR_NOT_FOUND;
+        }
     }
     else
     {
-        vbpci_printk(KERN_DEBUG, pPciDev,
-                     "failed to attach to IOMMU, error %d\n", status);
-        rc = VERR_INTERNAL_ERROR;
+        vbpci_printk(KERN_DEBUG, pPciDev, "cannot attach to IOMMU, no VM data\n");
+        rc = VERR_INVALID_PARAMETER;
     }
 
-    /* @todo: KVM checks IOMMU_CAP_CACHE_COHERENCY and sets
-       flag IOMMU_CACHE later used when mapping physical
-       addresses, which could improve performance. */
-
+    IPRT_LINUX_RESTORE_EFL_AC();
     return rc;
 #else
     return VERR_NOT_SUPPORTED;
 #endif
 }
 
-int vboxPciOsDevUnregisterWithIommu(PVBOXRAWPCIINS pIns)
+static int vboxPciLinuxDevUnregisterWithIommu(PVBOXRAWPCIINS pIns)
 {
 #ifdef VBOX_WITH_IOMMU
     int rc = VINF_SUCCESS;
     struct pci_dev *pPciDev = pIns->pPciDev;
     PVBOXRAWPCIDRVVM pData = VBOX_DRV_VMDATA(pIns);
+    IPRT_LINUX_SAVE_EFL_AC();
 
-    if (!pData)
+    if (RT_LIKELY(pData))
     {
-        vbpci_printk(KERN_DEBUG, pPciDev,
-                     "cannot detach from IOMMU, no VM data\n");
-        return VERR_INVALID_PARAMETER;
+        if (RT_LIKELY(pData->pIommuDomain))
+        {
+            if (pIns->fIommuUsed)
+            {
+                iommu_detach_device(pData->pIommuDomain, &pIns->pPciDev->dev);
+                vbpci_printk(KERN_DEBUG, pPciDev, "detached from IOMMU\n");
+                pIns->fIommuUsed = false;
+            }
+        }
+        else
+        {
+            vbpci_printk(KERN_DEBUG, pPciDev,
+                         "cannot detach from IOMMU, no domain\n");
+            rc = VERR_NOT_FOUND;
+        }
     }
-
-    if (!pData->pIommuDomain)
+    else
     {
         vbpci_printk(KERN_DEBUG, pPciDev,
-                     "cannot detach from IOMMU, no domain\n");
-        return VERR_NOT_FOUND;
-    }
-
-    if (pIns->fIommuUsed)
-    {
-        iommu_detach_device(pData->pIommuDomain, &pIns->pPciDev->dev);
-        vbpci_printk(KERN_DEBUG, pPciDev, "detached from IOMMU\n");
-        pIns->fIommuUsed = false;
+                     "cannot detach from IOMMU, no VM data\n");
+        rc = VERR_INVALID_PARAMETER;
     }
 
+    IPRT_LINUX_RESTORE_EFL_AC();
     return rc;
 #else
     return VERR_NOT_SUPPORTED;
 #endif
 }
 
-int vboxPciOsDevReset(PVBOXRAWPCIINS pIns)
+static int vboxPciLinuxDevReset(PVBOXRAWPCIINS pIns)
 {
     int rc = VINF_SUCCESS;
+    IPRT_LINUX_SAVE_EFL_AC();
 
-    if (pIns->pPciDev)
+    if (RT_LIKELY(pIns->pPciDev))
     {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
         if (pci_reset_function(pIns->pPciDev))
@@ -304,7 +313,10 @@ int vboxPciOsDevReset(PVBOXRAWPCIINS pIns)
         rc = VERR_NOT_SUPPORTED;
 #endif
     }
+    else
+        rc = VERR_INVALID_PARAMETER;
 
+    IPRT_LINUX_RESTORE_EFL_AC();
     return rc;
 }
 
@@ -352,22 +364,7 @@ static int vboxPciFileWrite(struct file* file, unsigned long long offset, unsign
     return ret;
 }
 
-#if 0
-static int vboxPciFileRead(struct file* file, unsigned long long offset, unsigned char* data, unsigned int size)
-{
-    int ret;
-    mm_segment_t fs_save;
-
-    fs_save = get_fs();
-    set_fs(get_ds());
-    ret = vfs_read(file, data, size, &offset);
-    set_fs(fs_save);
-
-    return ret;
-}
-#endif
-
-int vboxPciOsDevDetachHostDriver(PVBOXRAWPCIINS pIns)
+static int vboxPciLinuxDevDetachHostDriver(PVBOXRAWPCIINS pIns)
 {
     struct pci_dev *pPciDev = NULL;
     uint8_t uBus =   (pIns->HostPciAddress) >> 8;
@@ -524,7 +521,7 @@ int vboxPciOsDevDetachHostDriver(PVBOXRAWPCIINS pIns)
     return 0;
 }
 
-int vboxPciOsDevReattachHostDriver(PVBOXRAWPCIINS pIns)
+static int vboxPciLinuxDevReattachHostDriver(PVBOXRAWPCIINS pIns)
 {
     struct pci_dev *pPciDev = pIns->pPciDev;
 
@@ -616,57 +613,69 @@ int vboxPciOsDevReattachHostDriver(PVBOXRAWPCIINS pIns)
     return VINF_SUCCESS;
 }
 
-int  vboxPciOsDevInit(PVBOXRAWPCIINS pIns, uint32_t fFlags)
+DECLHIDDEN(int) vboxPciOsDevInit(PVBOXRAWPCIINS pIns, uint32_t fFlags)
 {
     struct pci_dev *pPciDev = NULL;
-    int rc;
+    int rc = VINF_SUCCESS;
+    IPRT_LINUX_SAVE_EFL_AC();
 
     if (fFlags & PCIRAWDRIVERRFLAG_DETACH_HOST_DRIVER)
     {
-        rc = vboxPciOsDevDetachHostDriver(pIns);
+        rc = vboxPciLinuxDevDetachHostDriver(pIns);
         if (RT_FAILURE(rc))
         {
             printk(KERN_DEBUG "Cannot detach host driver for device %x: %d\n",
                    pIns->HostPciAddress, rc);
-            return VERR_ACCESS_DENIED;
         }
     }
 
+    if (RT_SUCCESS(rc))
+    {
+        pPciDev = PCI_DEV_GET_SLOT((pIns->HostPciAddress) >> 8,
+                                   (pIns->HostPciAddress) & 0xff);
 
-    pPciDev = PCI_DEV_GET_SLOT((pIns->HostPciAddress) >> 8,
-                               (pIns->HostPciAddress) & 0xff);
-
-    if (!pPciDev)
-        return 0;
-
-    pIns->pPciDev = pPciDev;
-    vbpci_printk(KERN_DEBUG, pPciDev, "%s\n", __func__);
+        if (RT_LIKELY(pPciDev))
+        {
+            int rcLnx = pci_enable_device(pPciDev);
 
-    rc = pci_enable_device(pPciDev);
+            if (!rcLnx)
+            {
+                pIns->pPciDev = pPciDev;
+                vbpci_printk(KERN_DEBUG, pPciDev, "%s\n", __func__);
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 1)
-    if (pci_enable_msi(pPciDev) == 0)
-    {
-        pIns->fMsiUsed = true;
-    }
+                if (pci_enable_msi(pPciDev) == 0)
+                    pIns->fMsiUsed = true;
 #endif
 
-    // pci_enable_msix(pPciDev, entries, nvec)
-
-    /* In fact, if device uses interrupts, and cannot be forced to use MSI or MSI-X
-       we have to refuse using it, as we cannot work with shared PCI interrupts (unless we're lucky
-       to grab unshared PCI interrupt). */
+                /** @todo
+                 * pci_enable_msix(pPciDev, entries, nvec)
+                 *
+                 * In fact, if device uses interrupts, and cannot be forced to use MSI or MSI-X
+                 * we have to refuse using it, as we cannot work with shared PCI interrupts (unless we're lucky
+                 * to grab unshared PCI interrupt).
+                 */
+            }
+            else
+                rc = RTErrConvertFromErrno(RT_ABS(rcLnx));
+        }
+        else
+            rc = VERR_NOT_FOUND;
+    }
 
-    return VINF_SUCCESS;
+    IPRT_LINUX_RESTORE_EFL_AC();
+    return rc;
 }
 
-int  vboxPciOsDevDeinit(PVBOXRAWPCIINS pIns, uint32_t fFlags)
+DECLHIDDEN(int) vboxPciOsDevDeinit(PVBOXRAWPCIINS pIns, uint32_t fFlags)
 {
+    int rc = VINF_SUCCESS;
     struct pci_dev *pPciDev = pIns->pPciDev;
+    IPRT_LINUX_SAVE_EFL_AC();
 
     vbpci_printk(KERN_DEBUG, pPciDev, "%s\n", __func__);
 
-    if (pPciDev)
+    if (RT_LIKELY(pPciDev))
     {
         int iRegion;
         for (iRegion = 0; iRegion < 7; ++iRegion)
@@ -679,7 +688,7 @@ int  vboxPciOsDevDeinit(PVBOXRAWPCIINS pIns, uint32_t fFlags)
             }
         }
 
-        vboxPciOsDevUnregisterWithIommu(pIns);
+        vboxPciLinuxDevUnregisterWithIommu(pIns);
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 1)
         if (pIns->fMsiUsed)
@@ -687,192 +696,216 @@ int  vboxPciOsDevDeinit(PVBOXRAWPCIINS pIns, uint32_t fFlags)
 #endif
         // pci_disable_msix(pPciDev);
         pci_disable_device(pPciDev);
-        vboxPciOsDevReattachHostDriver(pIns);
+        vboxPciLinuxDevReattachHostDriver(pIns);
 
         PCI_DEV_PUT(pPciDev);
         pIns->pPciDev = NULL;
     }
+    else
+        rc = VERR_INVALID_PARAMETER;
 
-    return 0;
+    IPRT_LINUX_RESTORE_EFL_AC();
+    return rc;
 }
 
-int  vboxPciOsDevDestroy(PVBOXRAWPCIINS pIns)
+DECLHIDDEN(int) vboxPciOsDevDestroy(PVBOXRAWPCIINS pIns)
 {
-    return 0;
+    return VINF_SUCCESS;
 }
 
-int  vboxPciOsDevGetRegionInfo(PVBOXRAWPCIINS pIns,
-                               int32_t        iRegion,
-                               RTHCPHYS       *pRegionStart,
-                               uint64_t       *pu64RegionSize,
-                               bool           *pfPresent,
-                               uint32_t       *pfFlags)
+DECLHIDDEN(int) vboxPciOsDevGetRegionInfo(PVBOXRAWPCIINS pIns,
+                                          int32_t        iRegion,
+                                          RTHCPHYS       *pRegionStart,
+                                          uint64_t       *pu64RegionSize,
+                                          bool           *pfPresent,
+                                          uint32_t       *pfFlags)
 {
-    int flags;
+    int rc = VINF_SUCCESS;
     struct pci_dev *pPciDev = pIns->pPciDev;
-    uint32_t fResFlags;
+    IPRT_LINUX_SAVE_EFL_AC();
 
-    if (!pPciDev)
+    if (RT_LIKELY(pPciDev))
     {
-        *pfPresent = false;
-        return 0;
-    }
+        int fFlags = pci_resource_flags(pPciDev, iRegion);
 
-    flags = pci_resource_flags(pPciDev, iRegion);
-    if (((flags & (IORESOURCE_MEM | IORESOURCE_IO)) == 0)
-        ||
-        ((flags & IORESOURCE_DISABLED) != 0))
-    {
-        *pfPresent = false;
-        return 0;
-    }
-
-    *pfPresent = true;
-    fResFlags = 0;
+        if (   ((fFlags & (IORESOURCE_MEM | IORESOURCE_IO)) == 0)
+            || ((fFlags & IORESOURCE_DISABLED) != 0))
+        {
+            *pfPresent = false;
+            rc = VERR_INVALID_PARAMETER;
+        }
+        else
+        {
+            uint32_t fResFlags = 0;
+            *pfPresent = true;
 
-    if (flags & IORESOURCE_MEM)
-        fResFlags |= PCIRAW_ADDRESS_SPACE_MEM;
+            if (fFlags & IORESOURCE_MEM)
+                fResFlags |= PCIRAW_ADDRESS_SPACE_MEM;
 
-    if (flags & IORESOURCE_IO)
-        fResFlags |= PCIRAW_ADDRESS_SPACE_IO;
+            if (fFlags & IORESOURCE_IO)
+                fResFlags |= PCIRAW_ADDRESS_SPACE_IO;
 
 #ifdef IORESOURCE_MEM_64
-    if (flags & IORESOURCE_MEM_64)
-        fResFlags |= PCIRAW_ADDRESS_SPACE_BAR64;
+            if (fFlags & IORESOURCE_MEM_64)
+                fResFlags |= PCIRAW_ADDRESS_SPACE_BAR64;
 #endif
 
-    if (flags & IORESOURCE_PREFETCH)
-        fResFlags |=  PCIRAW_ADDRESS_SPACE_MEM_PREFETCH;
+            if (fFlags & IORESOURCE_PREFETCH)
+                fResFlags |=  PCIRAW_ADDRESS_SPACE_MEM_PREFETCH;
 
-    *pfFlags        = fResFlags;
-    *pRegionStart   = pci_resource_start(pPciDev, iRegion);
-    *pu64RegionSize = pci_resource_len  (pPciDev, iRegion);
+            *pfFlags        = fResFlags;
+            *pRegionStart   = pci_resource_start(pPciDev, iRegion);
+            *pu64RegionSize = pci_resource_len  (pPciDev, iRegion);
 
-    vbpci_printk(KERN_DEBUG, pPciDev,
-                 "region %d: %s %llx+%lld\n",
-                 iRegion, (flags & IORESOURCE_MEM) ? "mmio" : "pio",
-                 *pRegionStart, *pu64RegionSize);
+            vbpci_printk(KERN_DEBUG, pPciDev,
+                         "region %d: %s %llx+%lld\n",
+                         iRegion, (fFlags & IORESOURCE_MEM) ? "mmio" : "pio",
+                         *pRegionStart, *pu64RegionSize);
+        }
+    }
+    else
+    {
+        *pfPresent = false;
+        rc = VERR_INVALID_PARAMETER;
+    }
 
-    return 0;
+    IPRT_LINUX_RESTORE_EFL_AC();
+    return rc;
 }
 
-int  vboxPciOsDevMapRegion(PVBOXRAWPCIINS pIns,
-                           int32_t        iRegion,
-                           RTHCPHYS       RegionStart,
-                           uint64_t       u64RegionSize,
-                           uint32_t       fFlags,
-                           RTR0PTR        *pRegionBase)
+DECLHIDDEN(int) vboxPciOsDevMapRegion(PVBOXRAWPCIINS pIns,
+                                      int32_t        iRegion,
+                                      RTHCPHYS       RegionStart,
+                                      uint64_t       u64RegionSize,
+                                      uint32_t       fFlags,
+                                      RTR0PTR        *pRegionBase)
 {
+    int rc = VINF_SUCCESS;
     struct pci_dev  *pPciDev = pIns->pPciDev;
-    RTR0PTR          result = 0;
-    int              error;
+    IPRT_LINUX_SAVE_EFL_AC();
 
-    vbpci_printk(KERN_DEBUG, pPciDev, "reg=%d start=%llx size=%lld\n",
-                 iRegion, RegionStart, u64RegionSize);
-
-    if (!pPciDev)
-        return VERR_INVALID_PARAMETER;
-
-    if (iRegion < 0 || iRegion > 6)
+    if (!pPciDev || iRegion < 0 || iRegion > 0)
     {
-        vbpci_printk(KERN_DEBUG, pPciDev, "invalid region %d\n", iRegion);
-        return VERR_INVALID_PARAMETER;
-    }
+        if (pPciDev)
+            vbpci_printk(KERN_DEBUG, pPciDev, "invalid region %d\n", iRegion);
 
-    if (pci_resource_flags(pPciDev, iRegion) & IORESOURCE_IO)
+        IPRT_LINUX_RESTORE_EFL_AC();
         return VERR_INVALID_PARAMETER;
+    }
 
-    if (RegionStart != pci_resource_start(pPciDev, iRegion))
-        return VERR_INVALID_PARAMETER;
+    vbpci_printk(KERN_DEBUG, pPciDev, "reg=%d start=%llx size=%lld\n",
+                 iRegion, RegionStart, u64RegionSize);
 
-    if (u64RegionSize != pci_resource_len(pPciDev, iRegion))
+    if (   (pci_resource_flags(pPciDev, iRegion) & IORESOURCE_IO)
+        || RegionStart != pci_resource_start(pPciDev, iRegion)
+        || u64RegionSize != pci_resource_len(pPciDev, iRegion))
+    {
+        IPRT_LINUX_RESTORE_EFL_AC();
         return VERR_INVALID_PARAMETER;
+    }
 
     /*
      * XXX: Current code never calls unmap.  To avoid leaking mappings
      * only request and map resources once.
      */
-    if (pIns->aRegionR0Mapping[iRegion])
+    if (!pIns->aRegionR0Mapping[iRegion])
     {
+        int     rcLnx;
         *pRegionBase = pIns->aRegionR0Mapping[iRegion];
-        return VINF_SUCCESS;
-    }
-
 
-    error = pci_request_region(pPciDev, iRegion, "vboxpci");
-    if (error)
-        return VERR_RESOURCE_BUSY;
-
-    /* For now no caching, try to optimize later. */
-    result = ioremap_nocache(pci_resource_start(pPciDev, iRegion),
-                             pci_resource_len(pPciDev, iRegion));
+        rcLnx = pci_request_region(pPciDev, iRegion, "vboxpci");
+        if (!rcLnx)
+        {
+            /* For now no caching, try to optimize later. */
+            RTR0PTR R0PtrMapping = ioremap_nocache(pci_resource_start(pPciDev, iRegion),
+                                                   pci_resource_len(pPciDev, iRegion));
 
-    if (!result)
-    {
-        vbpci_printk(KERN_DEBUG, pPciDev, "ioremap_nocache() failed\n");
-        pci_release_region(pPciDev, iRegion);
-        return VERR_MAP_FAILED;
+            if (R0PtrMapping != NIL_RTR0PTR)
+                pIns->aRegionR0Mapping[iRegion] = R0PtrMapping;
+            else
+            {
+                vbpci_printk(KERN_DEBUG, pPciDev, "ioremap_nocache() failed\n");
+                pci_release_region(pPciDev, iRegion);
+                rc = VERR_MAP_FAILED;
+            }
+        }
+        else
+            rc = VERR_RESOURCE_BUSY;
     }
 
-    *pRegionBase = pIns->aRegionR0Mapping[iRegion] = result;
+    if (RT_SUCCESS(rc))
+        *pRegionBase = pIns->aRegionR0Mapping[iRegion];
 
-    return VINF_SUCCESS;
+    IPRT_LINUX_RESTORE_EFL_AC();
+    return rc;
 }
 
-int  vboxPciOsDevUnmapRegion(PVBOXRAWPCIINS pIns,
-                             int32_t        iRegion,
-                             RTHCPHYS       RegionStart,
-                             uint64_t       u64RegionSize,
-                             RTR0PTR        RegionBase)
+DECLHIDDEN(int) vboxPciOsDevUnmapRegion(PVBOXRAWPCIINS pIns,
+                                        int32_t        iRegion,
+                                        RTHCPHYS       RegionStart,
+                                        uint64_t       u64RegionSize,
+                                        RTR0PTR        RegionBase)
 {
     /* XXX: Current code never calls unmap. */
     return VERR_NOT_IMPLEMENTED;
 }
 
-int  vboxPciOsDevPciCfgWrite(PVBOXRAWPCIINS pIns, uint32_t Register, PCIRAWMEMLOC *pValue)
+DECLHIDDEN(int) vboxPciOsDevPciCfgWrite(PVBOXRAWPCIINS pIns, uint32_t Register, PCIRAWMEMLOC *pValue)
 {
     struct pci_dev *pPciDev = pIns->pPciDev;
+    int rc = VINF_SUCCESS;
+    IPRT_LINUX_SAVE_EFL_AC();
 
-    if (!pPciDev)
-        return VINF_SUCCESS;
-
-    switch (pValue->cb)
+    if (RT_LIKELY(pPciDev))
     {
-        case 1:
-            pci_write_config_byte(pPciDev,  Register, pValue->u.u8);
-            break;
-        case 2:
-            pci_write_config_word(pPciDev,  Register, pValue->u.u16);
-            break;
-        case 4:
-            pci_write_config_dword(pPciDev, Register, pValue->u.u32);
-            break;
+        switch (pValue->cb)
+        {
+            case 1:
+                pci_write_config_byte(pPciDev,  Register, pValue->u.u8);
+                break;
+            case 2:
+                pci_write_config_word(pPciDev,  Register, pValue->u.u16);
+                break;
+            case 4:
+                pci_write_config_dword(pPciDev, Register, pValue->u.u32);
+                break;
+        }
     }
+    else
+        rc = VERR_INVALID_PARAMETER;
 
-    return VINF_SUCCESS;
+    IPRT_LINUX_RESTORE_EFL_AC();
+    return rc;
 }
 
-int  vboxPciOsDevPciCfgRead (PVBOXRAWPCIINS pIns, uint32_t Register, PCIRAWMEMLOC *pValue)
+DECLHIDDEN(int) vboxPciOsDevPciCfgRead(PVBOXRAWPCIINS pIns, uint32_t Register, PCIRAWMEMLOC *pValue)
 {
     struct pci_dev *pPciDev = pIns->pPciDev;
+    int rc = VINF_SUCCESS;
 
-    if (!pPciDev)
-        return VINF_SUCCESS;
-
-    switch (pValue->cb)
+    if (RT_LIKELY(pPciDev))
     {
-        case 1:
-            pci_read_config_byte(pPciDev, Register, &pValue->u.u8);
-            break;
-        case 2:
-            pci_read_config_word(pPciDev, Register, &pValue->u.u16);
-            break;
-        case 4:
-            pci_read_config_dword(pPciDev, Register, &pValue->u.u32);
-            break;
+        IPRT_LINUX_SAVE_EFL_AC();
+
+        switch (pValue->cb)
+        {
+            case 1:
+                pci_read_config_byte(pPciDev, Register, &pValue->u.u8);
+                break;
+            case 2:
+                pci_read_config_word(pPciDev, Register, &pValue->u.u16);
+                break;
+            case 4:
+                pci_read_config_dword(pPciDev, Register, &pValue->u.u32);
+                break;
+        }
+
+        IPRT_LINUX_RESTORE_EFL_AC();
     }
+    else
+        rc = VERR_INVALID_PARAMETER;
 
-    return VINF_SUCCESS;
+    return rc;
 }
 
 /**
@@ -903,14 +936,16 @@ static irqreturn_t vboxPciOsIrqHandler(int iIrq, void *pvDevId, struct pt_regs *
     return fTaken;
 }
 
-int vboxPciOsDevRegisterIrqHandler(PVBOXRAWPCIINS pIns, PFNRAWPCIISR pfnHandler, void* pIrqContext, int32_t *piHostIrq)
+DECLHIDDEN(int) vboxPciOsDevRegisterIrqHandler(PVBOXRAWPCIINS pIns, PFNRAWPCIISR pfnHandler, void* pIrqContext, int32_t *piHostIrq)
 {
     int rc;
     int32_t iIrq = pIns->pPciDev->irq;
+    IPRT_LINUX_SAVE_EFL_AC();
 
     if (iIrq == 0)
     {
         vbpci_printk(KERN_NOTICE, pIns->pPciDev, "no irq assigned\n");
+        IPRT_LINUX_RESTORE_EFL_AC();
         return VERR_INVALID_PARAMETER;
     }
 
@@ -940,22 +975,29 @@ int vboxPciOsDevRegisterIrqHandler(PVBOXRAWPCIINS pIns, PFNRAWPCIISR pfnHandler,
     {
         vbpci_printk(KERN_DEBUG, pIns->pPciDev,
                      "could not request irq %d, error %d\n", iIrq, rc);
+        IPRT_LINUX_RESTORE_EFL_AC();
         return VERR_RESOURCE_BUSY;
     }
 
     vbpci_printk(KERN_DEBUG, pIns->pPciDev, "got irq %d\n", iIrq);
     *piHostIrq = iIrq;
+
+    IPRT_LINUX_RESTORE_EFL_AC();
     return VINF_SUCCESS;
 }
 
-int vboxPciOsDevUnregisterIrqHandler(PVBOXRAWPCIINS pIns, int32_t iHostIrq)
+DECLHIDDEN(int) vboxPciOsDevUnregisterIrqHandler(PVBOXRAWPCIINS pIns, int32_t iHostIrq)
 {
+    IPRT_LINUX_SAVE_EFL_AC();
+
     vbpci_printk(KERN_DEBUG, pIns->pPciDev, "freeing irq %d\n", iHostIrq);
     free_irq(iHostIrq, pIns);
+
+    IPRT_LINUX_RESTORE_EFL_AC();
     return VINF_SUCCESS;
 }
 
-int  vboxPciOsDevPowerStateChange(PVBOXRAWPCIINS pIns, PCIRAWPOWERSTATE  aState)
+DECLHIDDEN(int) vboxPciOsDevPowerStateChange(PVBOXRAWPCIINS pIns, PCIRAWPOWERSTATE  aState)
 {
     int rc;
 
@@ -964,18 +1006,18 @@ int  vboxPciOsDevPowerStateChange(PVBOXRAWPCIINS pIns, PCIRAWPOWERSTATE  aState)
         case PCIRAW_POWER_ON:
             vbpci_printk(KERN_DEBUG, pIns->pPciDev, "PCIRAW_POWER_ON\n");
             /* Reset device, just in case. */
-            vboxPciOsDevReset(pIns);
+            vboxPciLinuxDevReset(pIns);
             /* register us with IOMMU */
-            rc = vboxPciOsDevRegisterWithIommu(pIns);
+            rc = vboxPciLinuxDevRegisterWithIommu(pIns);
             break;
         case PCIRAW_POWER_RESET:
             vbpci_printk(KERN_DEBUG, pIns->pPciDev, "PCIRAW_POWER_RESET\n");
-            rc = vboxPciOsDevReset(pIns);
+            rc = vboxPciLinuxDevReset(pIns);
             break;
         case PCIRAW_POWER_OFF:
             vbpci_printk(KERN_DEBUG, pIns->pPciDev, "PCIRAW_POWER_OFF\n");
             /* unregister us from IOMMU */
-            rc = vboxPciOsDevUnregisterWithIommu(pIns);
+            rc = vboxPciLinuxDevUnregisterWithIommu(pIns);
             break;
         case PCIRAW_POWER_SUSPEND:
             vbpci_printk(KERN_DEBUG, pIns->pPciDev, "PCIRAW_POWER_SUSPEND\n");
@@ -1000,10 +1042,12 @@ int  vboxPciOsDevPowerStateChange(PVBOXRAWPCIINS pIns, PCIRAWPOWERSTATE  aState)
 
 #ifdef VBOX_WITH_IOMMU
 /** Callback for FNRAWPCICONTIGPHYSMEMINFO. */
-static int vboxPciOsContigMemInfo(PRAWPCIPERVM pVmCtx, RTHCPHYS HostStart, RTGCPHYS GuestStart, uint64_t cMemSize, PCIRAWMEMINFOACTION Action)
+static DECLCALLBACK(int) vboxPciOsContigMemInfo(PRAWPCIPERVM pVmCtx, RTHCPHYS HostStart, RTGCPHYS GuestStart,
+                                                uint64_t cMemSize, PCIRAWMEMINFOACTION Action)
 {
     struct iommu_domain* domain = ((PVBOXRAWPCIDRVVM)(pVmCtx->pDriverData))->pIommuDomain;
     int rc = VINF_SUCCESS;
+    IPRT_LINUX_SAVE_EFL_AC();
 
     switch (Action)
     {
@@ -1042,34 +1086,45 @@ static int vboxPciOsContigMemInfo(PRAWPCIPERVM pVmCtx, RTHCPHYS HostStart, RTGCP
             break;
     }
 
+    IPRT_LINUX_RESTORE_EFL_AC();
     return rc;
 }
 #endif
 
-int  vboxPciOsInitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM, PRAWPCIPERVM pVmData)
+DECLHIDDEN(int) vboxPciOsInitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM, PRAWPCIPERVM pVmData)
 {
+    int rc = VINF_SUCCESS;
+
 #ifdef VBOX_WITH_IOMMU
+    IPRT_LINUX_SAVE_EFL_AC();
+
     if (IOMMU_PRESENT())
     {
         pThis->pIommuDomain = IOMMU_DOMAIN_ALLOC();
         if (!pThis->pIommuDomain)
         {
             vbpci_printk(KERN_DEBUG, NULL, "cannot allocate IOMMU domain\n");
-            return VERR_NO_MEMORY;
+            rc = VERR_NO_MEMORY;
         }
+        else
+        {
+            pVmData->pfnContigMemInfo = vboxPciOsContigMemInfo;
 
-        pVmData->pfnContigMemInfo = vboxPciOsContigMemInfo;
-
-        vbpci_printk(KERN_DEBUG, NULL, "created IOMMU domain %p\n",
-                     pThis->pIommuDomain);
+            vbpci_printk(KERN_DEBUG, NULL, "created IOMMU domain %p\n",
+                         pThis->pIommuDomain);
+        }
     }
+
+    IPRT_LINUX_RESTORE_EFL_AC();
 #endif
-    return VINF_SUCCESS;
+    return rc;
 }
 
-void vboxPciOsDeinitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM)
+DECLHIDDEN(void) vboxPciOsDeinitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM)
 {
 #ifdef VBOX_WITH_IOMMU
+    IPRT_LINUX_SAVE_EFL_AC();
+
     if (pThis->pIommuDomain)
     {
         vbpci_printk(KERN_DEBUG, NULL, "freeing IOMMU domain %p\n",
@@ -1077,5 +1132,7 @@ void vboxPciOsDeinitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM)
         iommu_domain_free(pThis->pIommuDomain);
         pThis->pIommuDomain = NULL;
     }
+
+    IPRT_LINUX_RESTORE_EFL_AC();
 #endif
 }
diff --git a/src/VBox/HostServices/GuestProperties/service.cpp b/src/VBox/HostServices/GuestProperties/service.cpp
index 3722361..caff7ed 100644
--- a/src/VBox/HostServices/GuestProperties/service.cpp
+++ b/src/VBox/HostServices/GuestProperties/service.cpp
@@ -1560,7 +1560,7 @@ int Service::initialize()
                             this,
                             0 /* default stack size */,
                             RTTHREADTYPE_DEFAULT,
-                            0, /* no flags. */
+                            RTTHREADFLAGS_WAITABLE,
                             "GSTPROPNTFY");
     }
 
@@ -1587,7 +1587,8 @@ int Service::uninit()
         int rc = RTReqQueueCall(mhReqQNotifyHost, &pReq, 10000, (PFNRT)wakeupNotifyHost, 0);
         if (RT_SUCCESS(rc))
             RTReqRelease(pReq);
-
+        rc = RTThreadWait(mhThreadNotifyHost, 10000, NULL);
+        AssertRC(rc);
         rc = RTReqQueueDestroy(mhReqQNotifyHost);
         AssertRC(rc);
         mhReqQNotifyHost = NIL_RTREQQUEUE;
diff --git a/src/VBox/HostServices/SharedFolders/vbsf.cpp b/src/VBox/HostServices/SharedFolders/vbsf.cpp
index 034d5b5..d036873 100644
--- a/src/VBox/HostServices/SharedFolders/vbsf.cpp
+++ b/src/VBox/HostServices/SharedFolders/vbsf.cpp
@@ -199,8 +199,12 @@ static int vbsfConvertFileOpenFlags(unsigned fShflFlags, RTFMODE fMode, SHFLHAND
         default:
         case SHFL_CF_ACCESS_NONE:
         {
-            /** @todo treat this as read access, but theoretically this could be a no access request. */
-            fOpen |= RTFILE_O_READ;
+#ifdef RT_OS_WINDOWS
+            if (BIT_FLAG(fShflFlags, SHFL_CF_ACCESS_MASK_ATTR) != SHFL_CF_ACCESS_ATTR_NONE)
+                fOpen |= RTFILE_O_ATTR_ONLY;
+            else
+#endif
+                fOpen |= RTFILE_O_READ;
             Log(("FLAG: SHFL_CF_ACCESS_NONE\n"));
             break;
         }
diff --git a/src/VBox/Installer/Config.kmk b/src/VBox/Installer/Config.kmk
index 2a5f4c9..f033aff 100644
--- a/src/VBox/Installer/Config.kmk
+++ b/src/VBox/Installer/Config.kmk
@@ -25,7 +25,7 @@ endif
 #
 # Generic stuff.
 #
-VBOX_PATH_INST_COMMON_SRC := $(PATH_SUB_CURRENT)/common
+VBOX_PATH_INST_COMMON_SRC := $(PATH_ROOT)/src/VBox/Installer/common
 
 
 ifdef VBOX_WITH_PYTHON
diff --git a/src/VBox/Installer/common/virtualbox.desktop.in b/src/VBox/Installer/common/virtualbox.desktop.in
index d73c05d..d61b220 100644
--- a/src/VBox/Installer/common/virtualbox.desktop.in
+++ b/src/VBox/Installer/common/virtualbox.desktop.in
@@ -7,12 +7,12 @@ GenericName[de]=Virtuelle Maschine
 Type=Application
 Exec=VirtualBox %U
 TryExec=VirtualBox
-Keywords=virtualization
-Keywords[de]=Virtualisierung
+Keywords=virtualization;
+Keywords[de]=Virtualisierung;
 MimeType=application/x-virtualbox-vbox;application/x-virtualbox-vbox-extpack;application/x-virtualbox-ovf;application/x-virtualbox-ova;
 DocPath=file://@VBOX_DOC_PATH@/UserManual.pdf
 Icon=virtualbox
-Categories=Emulator;System;X-MandrivaLinux-System;Application;
+Categories=Emulator;System;
 Comment=Run several virtual systems on a single host computer
 Comment[de]=Mehrere virtuelle Maschinen auf einem einzigen Rechner ausführen
 Comment[it]=Esegui più macchine virtuali su un singolo computer
diff --git a/src/VBox/Installer/linux/Makefile.kmk b/src/VBox/Installer/linux/Makefile.kmk
index 1c79dbc..39414c2 100644
--- a/src/VBox/Installer/linux/Makefile.kmk
+++ b/src/VBox/Installer/linux/Makefile.kmk
@@ -189,12 +189,34 @@ VBOX_LNX_STRIP_OBJ = \
 	VBoxDD2R0.r0 \
 	VBoxDDR0.r0 \
 	VMMR0.r0
+ifdef VBOX_NO_LINUX_RUN_INSTALLER
+ VBOX_LNX_STRIP_OBJ += \
+	VBoxDD2R0.debug \
+	VBoxDDR0.debug \
+	VMMR0.debug
+else
+ VBOX_LNX_DBG_BIN = \
+	VBoxDD2R0.debug \
+	VBoxDDR0.debug \
+	VMMR0.debug
+endif
 
 ifdef VBOX_WITH_RAW_MODE
  VBOX_LNX_STRIP_OBJ += \
 	VBoxDD2RC.rc \
 	VBoxDDRC.rc \
 	VMMRC.rc
+ ifdef VBOX_NO_LINUX_RUN_INSTALLER
+  VBOX_LNX_STRIP_OBJ += \
+	VBoxDD2RC.debug \
+	VBoxDDRC.debug \
+	VMMRC.debug
+ else
+  VBOX_LNX_DBG_BIN += \
+	VBoxDD2RC.debug \
+	VBoxDDRC.debug \
+	VMMRC.debug
+ endif
 endif
 
 # Do not strip anything of these files
@@ -276,14 +298,14 @@ ifdef VBOX_WITH_VRDP
   VBOX_LNX_STRIP_BIN += \
   	VBoxVRDP.so
  endif
- ifdef VBOX_WITH_VRDP_RDESKTOP
-  VBOX_LNX_NO_STRIP += \
-  	rdesktop-vrdp.tar.gz
-  VBOX_LNX_NO_STRIP += \
-  	rdesktop-vrdp-keymaps
-  VBOX_LNX_STRIP_BIN += \
-  	rdesktop-vrdp
- endif
+endif
+ifdef VBOX_WITH_VRDP_RDESKTOP
+ VBOX_LNX_NO_STRIP += \
+	rdesktop-vrdp.tar.gz
+ VBOX_LNX_NO_STRIP += \
+ 	rdesktop-vrdp-keymaps
+ VBOX_LNX_STRIP_BIN += \
+ 	rdesktop-vrdp
 endif
 
 # Python XPCOM glue
@@ -353,8 +375,9 @@ VBOX_DESKTOP_ICONS = \
 VBOX_LNX_ARCH_FILES := $(VBOX_LNX_STRIP_BIN) $(VBOX_LNX_STRIP_OBJ) $(VBOX_LNX_NO_STRIP) src
 
 # Cleanup of the files we copy/symlink from bin.
-OTHER_CLEAN += $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive/,$(VBOX_LNX_ARCH_FILES)) \
-	       $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive-dbg/$(VBOX_LNX_DBG_PATH)/,$(VBOX_LNX_STRIP_BIN))
+OTHER_CLEAN += $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive/,$(filter-out src,$(VBOX_LNX_ARCH_FILES)) src/vboxhost) \
+	       $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive-dbg/$(VBOX_LNX_DBG_PATH)/,\
+		  $(VBOX_LNX_STRIP_BIN) $(VBOX_LNX_DBG_BIN))
 
 #
 # The generic installer.
@@ -468,6 +491,12 @@ $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive/,$(VBOX_LNX_STRIP_BIN)): \
 	$(QUIET)$(INSTALL) -m 0755 $(if $(VBOX_DO_STRIP),-s,) $< $@
 	$(QUIET)$(if $(VBOX_NO_LINUX_RUN_INSTALLER),,objcopy --add-gnu-debuglink=$(subst $(VBOX_LNX_INST_OUT_DIR)/archive,$(VBOX_LNX_INST_OUT_DIR)/archive-dbg/$(VBOX_LNX_DBG_PATH),$@) $@)
 
+# pattern rule for copying VBOX_LNX_DBG_BIN files to archive-dbg/
+$(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive-dbg/$(VBOX_LNX_DBG_PATH)/,$(VBOX_LNX_DBG_BIN)): \
+		$(VBOX_LNX_INST_OUT_DIR)/archive-dbg/$(VBOX_LNX_DBG_PATH)/% : $(PATH_STAGE_BIN)/% | $$(dir $$@)
+	$(call MSG_INST_FILE,$<,$@)
+	$(QUIET)$(CP) $< $@
+
 # pattern rule for striping and copying the VBOX_LNX_STRIP_OBJ files to archive/
 $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive/,$(VBOX_LNX_STRIP_OBJ)): \
 		$(VBOX_LNX_INST_OUT_DIR)/archive/% : $(PATH_STAGE_BIN)/% | $$(dir $$@)
@@ -528,18 +557,19 @@ BLDDIRS += $(foreach d,\
 # .tar.bz2 for with the debug info.
 #
 $(PATH_STAGE_BIN)/VirtualBox-dbg.tar.bz2: \
-		$(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive-dbg/$(VBOX_LNX_DBG_PATH)/, $(VBOX_LNX_STRIP_BIN))
+		$(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive-dbg/$(VBOX_LNX_DBG_PATH)/,\
+		    $(VBOX_LNX_STRIP_BIN) $(VBOX_LNX_DBG_BIN))
 	$(call MSG_L1,Packing $@)
 	$(QUIET)$(RM) -f -- $@ $(patsubst %.bz2,%,$@)
 ifdef VBOX_USE_PBZIP2
 	$(QUIET)tar --dereference --owner 0 --group 0 \
 		-cRhf $(patsubst %.bz2,%,$@) -C $(VBOX_LNX_INST_OUT_DIR)/archive-dbg \
-		$(addprefix $(VBOX_LNX_DBG_PATH)/,$(VBOX_LNX_STRIP_BIN))
+		$(addprefix $(VBOX_LNX_DBG_PATH)/,$(VBOX_LNX_STRIP_BIN) $(VBOX_LNX_DBG_BIN))
 	$(QUIET)pbzip2 $(patsubst %.bz2,%,$@)
 else
 	$(QUIET)tar --dereference --owner 0 --group 0 \
 		-cjRhf $@ -C $(VBOX_LNX_INST_OUT_DIR)/archive-dbg \
-		$(addprefix $(VBOX_LNX_DBG_PATH)/,$(VBOX_LNX_STRIP_BIN))
+		$(addprefix $(VBOX_LNX_DBG_PATH)/,$(VBOX_LNX_STRIP_BIN) $(VBOX_LNX_DBG_BIN))
 endif
 
 # pattern rule for copying the debug info from the VBOX_LNX_STRIP_BIN files into archive-dbg/$(VBOX_LNX_DBG_PATH)/
diff --git a/src/VBox/Installer/linux/VBox.sh b/src/VBox/Installer/linux/VBox.sh
index b4b1a10..e6ff685 100755
--- a/src/VBox/Installer/linux/VBox.sh
+++ b/src/VBox/Installer/linux/VBox.sh
@@ -40,7 +40,7 @@ WARNING: The vboxdrv kernel module is not loaded. Either there is no module
          available for the current kernel (`uname -r`) or it failed to
          load. Please recompile the kernel module and install it by
 
-           sudo /sbin/vboxconfig
+           sudo /sbin/rcvboxdrv setup
 
          You will not be able to start VMs until this problem is fixed.
 EOF
@@ -48,7 +48,7 @@ elif [ ! -c /dev/vboxdrv ]; then
     cat << EOF
 WARNING: The character device /dev/vboxdrv does not exist. Try
 
-           sudo /sbin/vboxconfig
+           sudo /sbin/rcvboxdrv setup
 
          and if that is not successful, try to re-install the package.
 
diff --git a/src/VBox/Installer/linux/install.sh b/src/VBox/Installer/linux/install.sh
index cce88e1..24fb6a7 100755
--- a/src/VBox/Installer/linux/install.sh
+++ b/src/VBox/Installer/linux/install.sh
@@ -402,7 +402,7 @@ if [ "$ACTION" = "install" ]; then
     else
         info "VirtualBox has been installed successfully, but the kernel module could not"
         info "be built.  When you have fixed the problems preventing this, execute"
-        info "  /sbin/vboxconfig"
+        info "  /sbin/rcvboxdrv setup"
         info "as administrator to build it."
     fi
     info ""
diff --git a/src/VBox/Installer/linux/postinst-common.sh b/src/VBox/Installer/linux/postinst-common.sh
index c94e69b..30acb4a 100644
--- a/src/VBox/Installer/linux/postinst-common.sh
+++ b/src/VBox/Installer/linux/postinst-common.sh
@@ -56,7 +56,7 @@ addrunlevel vboxautostart-service
 delrunlevel vboxweb-service
 addrunlevel vboxweb-service
 
-ln -sf "${MY_PATH}/postinst-common.sh" /sbin/vboxconfig
+ln -sf "${MY_PATH}/postinst-common.sh" /sbin/rcvboxdrv setup
 
 test -n "${START}" &&
 {
diff --git a/src/VBox/Installer/linux/prerm-common.sh b/src/VBox/Installer/linux/prerm-common.sh
index 1e64dd7..b1b8461 100644
--- a/src/VBox/Installer/linux/prerm-common.sh
+++ b/src/VBox/Installer/linux/prerm-common.sh
@@ -87,5 +87,5 @@ remove_init_script vboxdrv
 stop_init_script vboxnet 2>/dev/null
 delrunlevel vboxnet 2>/dev/null
 remove_init_script vboxnet 2>/dev/null
-rm -f /sbin/vboxconfig
+rm -f /sbin/rcvboxdrv setup
 exit 0
diff --git a/src/VBox/Installer/linux/routines.sh b/src/VBox/Installer/linux/routines.sh
index 906b90f..7206eda 100644
--- a/src/VBox/Installer/linux/routines.sh
+++ b/src/VBox/Installer/linux/routines.sh
@@ -149,6 +149,7 @@ ExecStop=${script} stop
 [Install]
 WantedBy=multi-user.target
 EOF
+    systemctl daemon-reexec
 }
 
 ## Installs a file containing a shell script as an init script
diff --git a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
index b29b3c3..d13fc9e 100644
--- a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
+++ b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
@@ -78,6 +78,8 @@ mv VBoxEFI64.fd $RPM_BUILD_ROOT/usr/lib/virtualbox || true
 mv *.rc $RPM_BUILD_ROOT/usr/lib/virtualbox
 mv *.r0 $RPM_BUILD_ROOT/usr/lib/virtualbox
 mv *.rel $RPM_BUILD_ROOT/usr/lib/virtualbox || true
+install -m 755 -d $RPM_BUILD_ROOT/usr/lib/debug/usr/lib/virtualbox
+mv *.debug $RPM_BUILD_ROOT/usr/lib/debug/usr/lib/virtualbox
 mv VBoxNetDHCP $RPM_BUILD_ROOT/usr/lib/virtualbox
 mv VBoxNetNAT $RPM_BUILD_ROOT/usr/lib/virtualbox
 mv VBoxNetAdpCtl $RPM_BUILD_ROOT/usr/lib/virtualbox
diff --git a/src/VBox/Installer/solaris/Makefile.kmk b/src/VBox/Installer/solaris/Makefile.kmk
index 2c2bb53..03fafd8 100644
--- a/src/VBox/Installer/solaris/Makefile.kmk
+++ b/src/VBox/Installer/solaris/Makefile.kmk
@@ -449,12 +449,13 @@ ifdef VBOX_WITH_PYTHON
 	$(VBOXINST_SDK_BINDINGS_XPCOM_PYTHON_FILES) \
 	$(VBOXINST_SDK_INSTALLER_PYTHON_FILES)
  ifeq ($(KBUILD_TARGET_ARCH),amd64)
+  SOLARIS_PYTHON_32_ON_64_BINS = $(notdir $(wildcard $(PATH_STAGE_BIN)/VBoxPython*_x86.so))
   ifdef VBOX_WITH_32_ON_64_MAIN_API
-   SOLARIS_COMMON_STRIP_BINS   += VBoxPython2_6_x86.so
+   SOLARIS_COMMON_STRIP_BINS   += $(SOLARIS_PYTHON_32_ON_64_BINS)
   endif
-  SOLARIS_COMMON_64_STRIP_BINS += VBoxPython.so VBoxPython2_6.so
+  SOLARIS_COMMON_64_STRIP_BINS += $(filter-out $(SOLARIS_PYTHON_32_ON_64_BINS), $(notdir $(wildcard $(PATH_STAGE_BIN)/VBoxPython*.so)))
  else
-  SOLARIS_COMMON_STRIP_BINS    += VBoxPython.so VBoxPython2_6.so
+  SOLARIS_COMMON_STRIP_BINS    += $(notdir $(wildcard $(PATH_STAGE_BIN)/VBoxPython*.so)))
  endif
 endif
 
diff --git a/src/VBox/Installer/solaris/checkinstall.sh b/src/VBox/Installer/solaris/checkinstall.sh
index 10fd2bd..1f3b289 100755
--- a/src/VBox/Installer/solaris/checkinstall.sh
+++ b/src/VBox/Installer/solaris/checkinstall.sh
@@ -133,7 +133,7 @@ fi
 infoprint "Checking package dependencies..."
 
 if test -x "$BIN_PKG"; then
-    checkdep_ips "runtime/python-26"
+    checkdep_ips_either "runtime/python-26" "runtime/python-27"
     checkdep_ips_either "system/library/iconv/utf-8" "system/library/iconv/iconv-core"
 else
     PKG_MISSING_IPS="runtime/python-26 system/library/iconv/utf-8"
diff --git a/src/VBox/Installer/solaris/vboxconfig.sh b/src/VBox/Installer/solaris/vboxconfig.sh
index 3f297a9..a4ad260 100755
--- a/src/VBox/Installer/solaris/vboxconfig.sh
+++ b/src/VBox/Installer/solaris/vboxconfig.sh
@@ -1189,12 +1189,17 @@ postinstall()
                     if test "$?" -eq 0; then
                         INSTALLEDIT=0
                     fi
+                    PYTHONBIN=`which python2.7 2>/dev/null`
+                    install_python_bindings "$PYTHONBIN" "Python 2.7"
+                    if test "$?" -eq 0; then
+                        INSTALLEDIT=0
+                    fi
 
                     # remove files installed by Python build
                     rm -rf $DIR_VBOXBASE/sdk/installer/build
 
                     if test "$INSTALLEDIT" -ne 0; then
-                        warnprint "No suitable Python version found. Required Python 2.4, 2.5 or 2.6."
+                        warnprint "No suitable Python version found. Required Python 2.4, 2.5, 2.6 or 2.7"
                         warnprint "Skipped installing the Python bindings."
                     fi
                 else
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
index 93b864e..66a510a 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
+++ b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
@@ -1041,7 +1041,12 @@ static UINT _createHostOnlyInterface(MSIHANDLE hModule, LPCWSTR pwszId, LPCWSTR
         if (FAILED(hr))
         {
             logStringW(hModule, L"CreateHostOnlyInterface: calling VBoxNetCfgWinCreateHostOnlyNetworkInterface");
+#ifdef VBOXNETCFG_DELAYEDRENAME
+            BSTR devId;
+            hr = VBoxNetCfgWinCreateHostOnlyNetworkInterface(pwszInfPath, bIsFile, &guid, &devId, NULL);
+#else /* !VBOXNETCFG_DELAYEDRENAME */
             hr = VBoxNetCfgWinCreateHostOnlyNetworkInterface(pwszInfPath, bIsFile, &guid, NULL, NULL);
+#endif /* !VBOXNETCFG_DELAYEDRENAME */
             logStringW(hModule, L"CreateHostOnlyInterface: VBoxNetCfgWinCreateHostOnlyNetworkInterface returns 0x%x", hr);
             if (SUCCEEDED(hr))
             {
@@ -1052,6 +1057,12 @@ static UINT _createHostOnlyInterface(MSIHANDLE hModule, LPCWSTR pwszId, LPCWSTR
                 logStringW(hModule, L"CreateHostOnlyInterface: VBoxNetCfgWinEnableStaticIpConfig returns 0x%x", hr);
                 if (FAILED(hr))
                     logStringW(hModule, L"CreateHostOnlyInterface: VBoxNetCfgWinEnableStaticIpConfig failed, error = 0x%x", hr);
+#ifdef VBOXNETCFG_DELAYEDRENAME
+                hr = VBoxNetCfgWinRenameHostOnlyConnection(&guid, devId, NULL);
+                if (FAILED(hr))
+                    logStringW(hModule, L"CreateHostOnlyInterface: VBoxNetCfgWinRenameHostOnlyConnection failed, error = 0x%x", hr);
+                SysFreeString(devId);
+#endif /* VBOXNETCFG_DELAYEDRENAME */
             }
             else
                 logStringW(hModule, L"CreateHostOnlyInterface: VBoxNetCfgWinCreateHostOnlyNetworkInterface failed, error = 0x%x", hr);
diff --git a/src/VBox/Installer/win/VBoxMergeApp.wxi b/src/VBox/Installer/win/VBoxMergeApp.wxi
index 110cbeb..a687cef 100644
--- a/src/VBox/Installer/win/VBoxMergeApp.wxi
+++ b/src/VBox/Installer/win/VBoxMergeApp.wxi
@@ -94,7 +94,13 @@
 <?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
     <Component Id="cp_RegisterExtensions" Guid="FEB8943E-5D60-4E2D-846F-458207019D40"
                Win64="$(var.Property_Win64)" KeyPath="yes">
-        <Condition>VBOX_REGISTERFILEEXTENSIONS</Condition>
+               
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+            <Condition><![CDATA[(local_VBOX_REGISTERFILEEXTENSIONS="1")]]></Condition>
+<?else ?>
+            <Condition><![CDATA[(VBOX_REGISTERFILEEXTENSIONS)]]></Condition>
+<?endif ?>
+
         <!-- Register file extensions. Note: Extension IDs *must not* be changed! These specify the actual
              file extension to handle. Also, here would be the place to add more fancy DDE stuff later.
              Important: The IDs in "IconIndex" *must* be matching "Resources\resource.h" -->
diff --git a/src/VBox/Installer/win/VBoxMergeApp.wxs b/src/VBox/Installer/win/VBoxMergeApp.wxs
index 293e667..d61b27f 100644
--- a/src/VBox/Installer/win/VBoxMergeApp.wxs
+++ b/src/VBox/Installer/win/VBoxMergeApp.wxs
@@ -48,6 +48,11 @@
                  Platform="$(var.Property_Platform)"
                  SummaryCodepage="1252"/>
 
+        <Property Id="local_VBOX_REGISTERFILEEXTENSIONS" Value="Empty" /> 
+        <Configuration Name="argRegesterExtensions" Format="Text" DefaultValue="Not passed"/> 
+        <Substitution Table="CustomAction" Row="registerExtensions" Column="Target" Value="[=argRegesterExtensions]"/> 
+        <CustomAction Id="registerExtensions" Property="local_VBOX_REGISTERFILEEXTENSIONS" Value="[local_VBOX_REGISTERFILEEXTENSIONS]" Execute="immediate" /> 
+
         <!-- Here comes the file/directory list -->
         <Directory Id="TARGETDIR" Name="SourceDir">
             <Directory Id="msm_VBoxApplicationFolder" FileSource=".">
@@ -62,6 +67,7 @@
         <?include VBoxMergeAppCA.wxi ?>
 
         <InstallExecuteSequence>
+            <Custom Action="registerExtensions" After="AppSearch"/>
             <?include VBoxMergeAppSeq.wxi ?>
         </InstallExecuteSequence>
 
diff --git a/src/VBox/Installer/win/VBoxMergeNetAdp.wxi b/src/VBox/Installer/win/VBoxMergeNetAdp.wxi
index 0e240ec..5a98948 100644
--- a/src/VBox/Installer/win/VBoxMergeNetAdp.wxi
+++ b/src/VBox/Installer/win/VBoxMergeNetAdp.wxi
@@ -24,7 +24,13 @@
         <File Id="file_VBoxNetAdp.cat" Name="VBoxNetAdp.cat"
               Source="$(env.PATH_OUT)\bin\VBoxNetAdp.cat" />
 <?endif ?>
-        <Condition><![CDATA[NETWORKTYPE="NDIS5"]]></Condition>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Condition><![CDATA[(localMSMNetworkType="NDIS5")]]></Condition>
+<?else ?>
+        <Condition><![CDATA[(NETWORKTYPE="NDIS5")]]></Condition>
+<?endif ?>
+
     </Component>
 
 </Include>
diff --git a/src/VBox/Installer/win/VBoxMergeNetAdp.wxs b/src/VBox/Installer/win/VBoxMergeNetAdp.wxs
index b3f4b44..22fca59 100644
--- a/src/VBox/Installer/win/VBoxMergeNetAdp.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetAdp.wxs
@@ -33,6 +33,14 @@
                  Platform="$(var.Property_Platform)"
                  SummaryCodepage="1252"/>
 
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Property Id="localMSMNetworkType" Value="Empty" /> 
+        <Configuration Name="passedNetworkType" Format="Text" DefaultValue="Not passed"/> 
+        <Substitution Table="CustomAction" Row="setNetworkTypeADP" Column="Target" Value="[=passedNetworkType]"/> 
+        <CustomAction Id="setNetworkTypeADP" Property="localMSMNetworkType" Value="[localMSMNetworkType]" Execute="immediate" /> 
+        <CustomAction Id="correctNetworkTypeADP" Property="localMSMNetworkType" Value="NDIS5" Execute="immediate" />
+<?endif ?>
+
         <!-- Here comes the file/directory list -->
         <Directory Id="TARGETDIR" Name="SourceDir">
             <Directory Id="msm_VBoxNetworkAdpFolder" FileSource=".">
@@ -47,6 +55,12 @@
         <?include VBoxMergeNetAdpCA.wxi ?>
 
         <InstallExecuteSequence>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+            <Custom Action="setNetworkTypeADP" After="CostInitialize"/>
+            <Custom Action="correctNetworkTypeADP" After="setNetworkTypeADP">
+                <![CDATA[(VersionNT < 600)]]>
+            </Custom>
+<?endif ?>
             <?include VBoxMergeNetAdpSeq.wxi ?>
         </InstallExecuteSequence>
 
diff --git a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi
index abaafb3..d3d0c1e 100644
--- a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi
+++ b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi
@@ -24,9 +24,13 @@
         <File Id="file_VBoxNetAdp6.cat" Name="VBoxNetAdp6.cat"
               Source="$(env.PATH_OUT)\bin\VBoxNetAdp6.cat" />
 <?endif ?>
-<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
-        <Condition><![CDATA[NETWORKTYPE="NDIS6"]]></Condition>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Condition><![CDATA[(localMSMNetworkType="NDIS6")]]></Condition>
+<?else ?>
+        <Condition><![CDATA[(NETWORKTYPE="NDIS6")]]></Condition>
 <?endif ?>
+
     </Component>
 
 </Include>
diff --git a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs
index 5a9dada..cb52b2c 100644
--- a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs
@@ -33,6 +33,14 @@
                  Platform="$(var.Property_Platform)"
                  SummaryCodepage="1252"/>
 
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Property Id="localMSMNetworkType" Value="NDIS6" /> 
+        <Configuration Name="passedNetworkType" Format="Text" DefaultValue="Not passed"/> 
+        <Substitution Table="CustomAction" Row="setNetworkTypeADP6" Column="Target" Value="[=passedNetworkType]"/> 
+        <CustomAction Id="setNetworkTypeADP6" Property="localMSMNetworkType" Value="[localMSMNetworkType]" Execute="immediate" /> 
+        <CustomAction Id="correctNetworkTypeADP6" Property="localMSMNetworkType" Value="NDIS5" Execute="immediate" />
+<?endif ?>
+
         <!-- Here comes the file/directory list -->
         <Directory Id="TARGETDIR" Name="SourceDir">
             <Directory Id="msm_VBoxNetworkAdp6Folder" FileSource=".">
@@ -47,6 +55,12 @@
         <?include VBoxMergeNetAdp6CA.wxi ?>
 
         <InstallExecuteSequence>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+            <Custom Action="setNetworkTypeADP6" After="CostInitialize"/>
+            <Custom Action="correctNetworkTypeADP6" After="setNetworkTypeADP6">
+                <![CDATA[(VersionNT < 600)]]>
+            </Custom>
+<?endif ?>
             <?include VBoxMergeNetAdp6Seq.wxi ?>
         </InstallExecuteSequence>
 
diff --git a/src/VBox/Installer/win/VBoxMergeNetFlt.wxi b/src/VBox/Installer/win/VBoxMergeNetFlt.wxi
index 2e5c692..c454feb 100644
--- a/src/VBox/Installer/win/VBoxMergeNetFlt.wxi
+++ b/src/VBox/Installer/win/VBoxMergeNetFlt.wxi
@@ -29,7 +29,13 @@
         <File Id="file_VBoxNetFlt.cat" Name="VBoxNetFlt.cat"
               Source="$(env.PATH_OUT)\bin\VBoxNetFlt.cat" />
 <?endif ?>
-        <Condition><![CDATA[NETWORKTYPE="NDIS5"]]></Condition>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Condition><![CDATA[(localMSMNetworkType="NDIS5")]]></Condition>
+<?else ?>
+        <Condition><![CDATA[(NETWORKTYPE="NDIS5")]]></Condition>
+<?endif ?>
+
     </Component>
 
 <?endif ?> <!-- VBOX_WITH_NETFLT -->
diff --git a/src/VBox/Installer/win/VBoxMergeNetFlt.wxs b/src/VBox/Installer/win/VBoxMergeNetFlt.wxs
index 0df6304..b38b653 100644
--- a/src/VBox/Installer/win/VBoxMergeNetFlt.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetFlt.wxs
@@ -33,6 +33,14 @@
                  Platform="$(var.Property_Platform)"
                  SummaryCodepage="1252"/>
 
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Property Id="localMSMNetworkType" Value="Empty" /> 
+        <Configuration Name="passedNetworkType" Format="Text" DefaultValue="Not passed"/> 
+        <Substitution Table="CustomAction" Row="setNetworkTypeFLT" Column="Target" Value="[=passedNetworkType]"/> 
+        <CustomAction Id="setNetworkTypeFLT" Property="localMSMNetworkType" Value="[localMSMNetworkType]" Execute="immediate" /> 
+        <CustomAction Id="correctNetworkTypeFLT" Property="localMSMNetworkType" Value="NDIS5" Execute="immediate" />
+<?endif ?>
+
         <!-- Here comes the file/directory list -->
         <Directory Id="TARGETDIR" Name="SourceDir">
             <Directory Id="msm_VBoxNetworkFltFolder" FileSource=".">
@@ -47,6 +55,12 @@
         <?include VBoxMergeNetFltCA.wxi ?>
 
         <InstallExecuteSequence>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+            <Custom Action="setNetworkTypeFLT" After="CostInitialize"/>
+            <Custom Action="correctNetworkTypeFLT" After="setNetworkTypeFLT">
+                <![CDATA[(VersionNT < 600)]]>
+            </Custom>
+<?endif ?>
             <?include VBoxMergeNetFltSeq.wxi ?>
         </InstallExecuteSequence>
 
diff --git a/src/VBox/Installer/win/VBoxMergeNetLwf.wxi b/src/VBox/Installer/win/VBoxMergeNetLwf.wxi
index d4d2ca3..768911c 100644
--- a/src/VBox/Installer/win/VBoxMergeNetLwf.wxi
+++ b/src/VBox/Installer/win/VBoxMergeNetLwf.wxi
@@ -25,9 +25,13 @@
         <File Id="file_VBoxNetLwf.cat" Name="VBoxNetLwf.cat"
               Source="$(env.PATH_OUT)\bin\VBoxNetLwf.cat" />
 <?endif ?>
-<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
-        <Condition><![CDATA[NETWORKTYPE="NDIS6"]]></Condition>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Condition><![CDATA[(localMSMNetworkType="NDIS6")]]></Condition>
+<?else ?>
+        <Condition><![CDATA[(NETWORKTYPE="NDIS6")]]></Condition>
 <?endif ?>
+
     </Component>
 
 <?endif ?> <!-- VBOX_WITH_NETFLT -->
diff --git a/src/VBox/Installer/win/VBoxMergeNetLwf.wxs b/src/VBox/Installer/win/VBoxMergeNetLwf.wxs
index 3096c44..1233fb6 100644
--- a/src/VBox/Installer/win/VBoxMergeNetLwf.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetLwf.wxs
@@ -33,6 +33,14 @@
                  Platform="$(var.Property_Platform)"
                  SummaryCodepage="1252"/>
 
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+        <Property Id="localMSMNetworkType" Value="NDIS6" /> 
+        <Configuration Name="passedNetworkType" Format="Text" DefaultValue="Not passed"/> 
+        <Substitution Table="CustomAction" Row="setNetworkTypeLWF" Column="Target" Value="[=passedNetworkType]"/> 
+        <CustomAction Id="setNetworkTypeLWF" Property="localMSMNetworkType" Value="[localMSMNetworkType]" Execute="immediate" /> 
+        <CustomAction Id="correctNetworkTypeLWF" Property="localMSMNetworkType" Value="NDIS5" Execute="immediate" />
+<?endif ?>
+
         <!-- Here comes the file/directory list -->
         <Directory Id="TARGETDIR" Name="SourceDir">
             <Directory Id="msm_VBoxNetworkLwfFolder" FileSource=".">
@@ -47,6 +55,12 @@
         <?include VBoxMergeNetLwfCA.wxi ?>
 
         <InstallExecuteSequence>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+            <Custom Action="setNetworkTypeLWF" After="CostInitialize"/>
+            <Custom Action="correctNetworkTypeLWF" After="setNetworkTypeLWF">
+                <![CDATA[(VersionNT < 600)]]>
+            </Custom>
+<?endif ?>
             <?include VBoxMergeNetLwfSeq.wxi ?>
         </InstallExecuteSequence>
 
diff --git a/src/VBox/Installer/win/VirtualBox.wxs b/src/VBox/Installer/win/VirtualBox.wxs
index 9929fd1..20b652e 100644
--- a/src/VBox/Installer/win/VirtualBox.wxs
+++ b/src/VBox/Installer/win/VirtualBox.wxs
@@ -64,7 +64,12 @@
     <!-- Default property for network adapter type -->
     <Property Id="NETWORKTYPE" Value="NDIS6" Secure="yes"/>
     <!-- Force NDIS5 on pre-Vista -->
-    <SetProperty Id="NETWORKTYPE" After="CostFinalize" Value="NDIS5"><![CDATA[VersionNT < 600]]></SetProperty>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
+    <!-- Force NDIS5 on pre-Vista -->
+    <SetProperty Id="NETWORKTYPE" After="CostFinalize" Value="NDIS5">
+      <![CDATA[(VersionNT < 600)]]>
+    </SetProperty>
+<?endif ?>
 
     <!-- Install the product for all users on the system -->
     <Property Id="ALLUSERS"><![CDATA[1]]></Property>
@@ -239,7 +244,11 @@
             <Directory Id="VENDOR" Name="$(env.VBOX_VENDOR_SHORT)">
                 <Directory Id="INSTALLDIR" Name="VirtualBox">
 <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
-                <Merge Id="msm_VBoxApp" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeApp)" DiskId="1" />
+                <Merge Id="msm_VBoxApp" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeApp)" DiskId="1">
+                    <ConfigurationData Name="argRegesterExtensions" Value="[VBOX_REGISTERFILEEXTENSIONS]"/>
+                    <ConfigurationData Name="argInstallDesktopShortcut" Value="[VBOX_INSTALLDESKTOPSHORTCUT]"/>
+                    <ConfigurationData Name="argInstallQuickLaunchShortcut" Value="[VBOX_INSTALLQUICKLAUNCHSHORTCUT]"/>
+                </Merge>
     <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
                 <Merge Id="msm_VBoxCOM32On64" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeCOM32On64)" DiskId="1" />
     <?endif ?>
@@ -265,7 +274,9 @@
 <?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
                         <Directory Id="dir_NetFlt" Name="netflt">
     <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
-                            <Merge Id="msm_VBoxNetworkFlt" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkFlt)" DiskId="1" />
+                            <Merge Id="msm_VBoxNetworkFlt" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkFlt)" DiskId="1">
+                            <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/> 
+                            </Merge>
     <?else ?>
                             <Directory Id="msm_VBoxNetworkFltFolder" FileSource=".">
                                 <?include VBoxMergeNetFlt.wxi ?>
@@ -275,7 +286,9 @@
 <?endif ?>
                         <Directory Id="dir_NetAdp" Name="netadp">
 <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
-                            <Merge Id="msm_VBoxNetworkAdp" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkAdp)" DiskId="1" />
+                            <Merge Id="msm_VBoxNetworkAdp" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkAdp)" DiskId="1">
+                            <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/> 
+                            </Merge>
 <?else ?>
                             <Directory Id="msm_VBoxNetworkAdpFolder" FileSource=".">
                                 <?include VBoxMergeNetAdp.wxi ?>
@@ -286,7 +299,9 @@
 <?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
                         <Directory Id="dir_NetLwf" Name="netlwf">
     <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
-                            <Merge Id="msm_VBoxNetworkLwf" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkLwf)" DiskId="1" />
+                            <Merge Id="msm_VBoxNetworkLwf" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkLwf)" DiskId="1">
+                            <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/> 
+                            </Merge>
     <?else ?>
                             <Directory Id="msm_VBoxNetworkLwfFolder" FileSource=".">
                                 <?include VBoxMergeNetLwf.wxi ?>
@@ -296,7 +311,9 @@
 <?endif ?>
                         <Directory Id="dir_NetAdp6" Name="netadp6">
 <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
-                            <Merge Id="msm_VBoxNetworkAdp6" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkAdp6)" DiskId="1" />
+                            <Merge Id="msm_VBoxNetworkAdp6" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkAdp6)" DiskId="1">
+                            <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/> 
+                            </Merge>
 <?else ?>
                             <Directory Id="msm_VBoxNetworkAdp6Folder" FileSource=".">
                                 <?include VBoxMergeNetAdp6.wxi ?>
@@ -318,6 +335,7 @@
                     </Directory>
                 </Directory>
 <?endif ?>
+
                 <!-- Set up special directory IDs for referencing to the start menu
                      or the Quick Launch bar.
                      See: http://msdn.microsoft.com/en-us/library/aa368276.aspx
@@ -361,6 +379,7 @@
                     <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)"
                                    Type="string" Value="installed" KeyPath="yes" />
                 </Component>
+
                 </Directory>
             </Directory>
         </Directory>
@@ -373,10 +392,12 @@
              Description="!(loc.VB_App)"
              ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
              Absent="disallow" AllowAdvertise="no" >
+
         <!-- Components which are handled only by this installer itself -->
         <ComponentRef Id="cp_StartMenuVBox" />
         <ComponentRef Id="cp_DesktopShortcut" />
         <ComponentRef Id="cp_QuickLaunchVBox" />
+        
         <!-- Components handled either by the installer itself or
              the merge module -->
 <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
@@ -385,6 +406,7 @@
             <MergeRef Id="msm_VBoxCOM32On64" />
         <?endif ?>
 <?else ?>
+
     <?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
         <ComponentRef Id="cp_RegisterExtensions" />
     <?endif ?>
diff --git a/src/VBox/Main/include/ExtPackManagerImpl.h b/src/VBox/Main/include/ExtPackManagerImpl.h
index e6aaf5d..e2a4cc9 100644
--- a/src/VBox/Main/include/ExtPackManagerImpl.h
+++ b/src/VBox/Main/include/ExtPackManagerImpl.h
@@ -211,7 +211,7 @@ public:
     /** @}  */
 
 private:
-
+    bool    isThereAnyRunningVM() const;
     // wrapped IExtPackManager properties
     HRESULT getInstalledExtPacks(std::vector<ComPtr<IExtPack> > &aInstalledExtPacks);
 
diff --git a/src/VBox/Main/src-all/ExtPackManagerImpl.cpp b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
index 7de2bfa..04fc7b0 100644
--- a/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
+++ b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
@@ -2525,6 +2525,44 @@ HRESULT ExtPackManager::i_refreshExtPack(const char *a_pszName, bool a_fUnusable
     return hrc;
 }
 
+bool ExtPackManager::isThereAnyRunningVM() const
+{
+    Assert(m->pVirtualBox); /* Only called from VBoxSVC */
+    
+    /*
+     * Get the list of all _running_ VMs
+     */
+    bool fRunning = false;
+    com::SafeIfaceArray<IMachine> machines;
+    com::SafeArray<MachineState_T> states;
+    int rc = m->pVirtualBox->COMGETTER(Machines)(ComSafeArrayAsOutParam(machines));
+    if (SUCCEEDED(rc))
+        rc = m->pVirtualBox->GetMachineStates(ComSafeArrayAsInParam(machines), ComSafeArrayAsOutParam(states));
+    if (SUCCEEDED(rc))
+    {
+        for (size_t i = 0; i < machines.size(); ++i)
+        {
+            if (machines[i])
+            {
+                MachineState_T machineState = states[i];
+                switch (machineState)
+                {
+                    case MachineState_Running:
+                    case MachineState_Teleporting:
+                    case MachineState_LiveSnapshotting:
+                    case MachineState_Paused:
+                    case MachineState_TeleportingPausedVM:
+                        fRunning = true;
+                        break;
+                }
+            }
+            if (fRunning)
+                break;
+        }
+    }
+    return fRunning;
+}
+
 /**
  * Thread wrapper around doInstall.
  *
@@ -2569,13 +2607,24 @@ HRESULT ExtPackManager::i_doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace
     if (SUCCEEDED(hrc))
     {
         AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-
-        /*
-         * Refresh the data we have on the extension pack as it
-         * may be made stale by direct meddling or some other user.
-         */
         ExtPack *pExtPack;
-        hrc = i_refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+
+        bool fRunning = isThereAnyRunningVM();
+        if (fRunning)
+        {
+            LogRel(("Install extension pack '%s' failed because at least one VM is still running.", pStrName->c_str()));
+            hrc = setError(E_FAIL, tr("Install extension pack '%s' failed because at least one VM is still running"),
+                           pStrName->c_str());
+        }
+        else
+        {
+            /*
+             * Refresh the data we have on the extension pack as it
+             * may be made stale by direct meddling or some other user.
+             */
+            hrc = i_refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+        }
+
         if (SUCCEEDED(hrc))
         {
             if (pExtPack && a_fReplace)
@@ -2695,13 +2744,24 @@ HRESULT ExtPackManager::i_doUninstall(Utf8Str const *a_pstrName, bool a_fForcedR
     if (SUCCEEDED(hrc))
     {
         AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-
-        /*
-         * Refresh the data we have on the extension pack as it may be made
-         * stale by direct meddling or some other user.
-         */
         ExtPack *pExtPack;
-        hrc = i_refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+
+        bool fRunning = isThereAnyRunningVM();
+        if (fRunning)
+        {
+            LogRel(("Uninstall extension pack '%s' failed because at least one VM is still running.", a_pstrName->c_str()));
+            hrc = setError(E_FAIL, tr("Uninstall extension pack '%s' failed because at least one VM is still running"),
+                                               a_pstrName->c_str());
+        }
+        else
+        {
+            /*
+             * Refresh the data we have on the extension pack as it may be made
+             * stale by direct meddling or some other user.
+             */
+            hrc = i_refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+        }
+
         if (SUCCEEDED(hrc))
         {
             if (!pExtPack)
diff --git a/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp b/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp
index 7eb7b3d..96fa929 100644
--- a/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp
+++ b/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp
@@ -65,10 +65,18 @@ HRESULT PCIDeviceAttachment::init(IMachine      *aParent,
                                   LONG          aGuestAddress,
                                   BOOL          fPhysical)
 {
-    (void)aParent;
+    NOREF(aParent);
+
+    /* Enclose the state transition NotReady->InInit->Ready */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
     m = new Data(aDevName, aHostAddress, aGuestAddress, fPhysical);
 
-    return m != NULL ? S_OK : E_FAIL;
+    /* Confirm a successful initialization */
+    autoInitSpan.setSucceeded();
+
+    return S_OK;
 }
 
 HRESULT PCIDeviceAttachment::i_loadSettings(IMachine *aParent,
@@ -95,11 +103,13 @@ HRESULT PCIDeviceAttachment::i_saveSettings(settings::HostPCIDeviceAttachment &d
  */
 void PCIDeviceAttachment::uninit()
 {
-    if (m)
-    {
-        delete m;
-        m = NULL;
-    }
+    /* Enclose the state transition Ready->InUninit->NotReady */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+
+    delete m;
+    m = NULL;
 }
 
 // IPCIDeviceAttachment properties
diff --git a/src/VBox/Main/src-all/win/VirtualBox_rgs.xsl b/src/VBox/Main/src-all/win/VirtualBox_rgs.xsl
index 08dc63f..68a2f34 100644
--- a/src/VBox/Main/src-all/win/VirtualBox_rgs.xsl
+++ b/src/VBox/Main/src-all/win/VirtualBox_rgs.xsl
@@ -54,7 +54,7 @@ HKCR
 <xsl:template match="idl/library">
   NoRemove AppID
   {
-    {<xsl:value-of select="@appUuid"/>} = s '<xsl:value-of select="@name"/> Application'
+    ForceRemove {<xsl:value-of select="@appUuid"/>} = s '<xsl:value-of select="@name"/> Application'
   }
 
 <xsl:apply-templates select="module[@name=$Module]/class"/>
diff --git a/src/VBox/Main/src-client/ConsoleImpl2.cpp b/src/VBox/Main/src-client/ConsoleImpl2.cpp
index ee099d0..8d4852a 100644
--- a/src/VBox/Main/src-client/ConsoleImpl2.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl2.cpp
@@ -572,7 +572,7 @@ HRESULT Console::i_attachRawPCIDevices(PUVM pUVM, BusAssignmentManager *pBusMgr,
         LONG guest = 0;
         PCIBusAddress GuestPCIAddress;
 
-        assignment->COMGETTER(GuestAddress)(&guest);
+        hrc = assignment->COMGETTER(GuestAddress)(&guest);   H();
         GuestPCIAddress.fromLong(guest);
         Assert(GuestPCIAddress.valid());
 
@@ -625,9 +625,9 @@ HRESULT Console::i_attachRawPCIDevices(PUVM pUVM, BusAssignmentManager *pBusMgr,
         LONG host, guest;
         Bstr aDevName;
 
-        assignment->COMGETTER(HostAddress)(&host);
-        assignment->COMGETTER(GuestAddress)(&guest);
-        assignment->COMGETTER(Name)(aDevName.asOutParam());
+        hrc = assignment->COMGETTER(HostAddress)(&host);            H();
+        hrc = assignment->COMGETTER(GuestAddress)(&guest);          H();
+        hrc = assignment->COMGETTER(Name)(aDevName.asOutParam());   H();
 
         InsertConfigNode(pPCIDevs, Utf8StrFmt("%d", iDev).c_str(), &pInst);
         InsertConfigInteger(pInst, "Trusted", 1);
diff --git a/src/VBox/Main/src-client/DrvAudioVRDE.cpp b/src/VBox/Main/src-client/DrvAudioVRDE.cpp
index 247eda8..121a9a4 100644
--- a/src/VBox/Main/src-client/DrvAudioVRDE.cpp
+++ b/src/VBox/Main/src-client/DrvAudioVRDE.cpp
@@ -104,7 +104,7 @@ static DECLCALLBACK(int) drvAudioVRDEInitIn(PPDMIHOSTAUDIO pInterface,
     if (pcSamples)
         *pcSamples = _4K; /** @todo Make this configurable. */
 
-    return drvAudioStreamCfgToProps(pCfg, &pVRDEStrmIn->HstStrmIn.Props);
+    return DrvAudioStreamCfgToProps(pCfg, &pVRDEStrmIn->HstStrmIn.Props);
 }
 
 static DECLCALLBACK(int) drvAudioVRDEInitOut(PPDMIHOSTAUDIO pInterface,
@@ -122,7 +122,7 @@ static DECLCALLBACK(int) drvAudioVRDEInitOut(PPDMIHOSTAUDIO pInterface,
     if (pcSamples)
         *pcSamples = _4K; /** @todo Make this configurable. */
 
-    return drvAudioStreamCfgToProps(pCfg, &pVRDEStrmOut->HstStrmOut.Props);
+    return DrvAudioStreamCfgToProps(pCfg, &pVRDEStrmOut->HstStrmOut.Props);
 }
 
 static DECLCALLBACK(bool) drvAudioVRDEIsEnabled(PPDMIHOSTAUDIO pInterface, PDMAUDIODIR enmDir)
@@ -212,7 +212,7 @@ static DECLCALLBACK(int) drvAudioVRDEPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUDI
     PVRDESTREAMOUT pVRDEStrmOut = (PVRDESTREAMOUT)pHstStrmOut;
     AssertPtrReturn(pVRDEStrmOut, VERR_INVALID_POINTER);
 
-    uint32_t live = drvAudioHstOutSamplesLive(pHstStrmOut);
+    uint32_t live = AudioMixBufAvail(&pHstStrmOut->MixBuf);
     uint64_t now = PDMDrvHlpTMGetVirtualTime(pDrv->pDrvIns);
     uint64_t ticks = now  - pVRDEStrmOut->old_ticks;
     uint64_t ticks_per_second = PDMDrvHlpTMGetVirtualFreq(pDrv->pDrvIns);
diff --git a/src/VBox/Main/src-server/HostImpl.cpp b/src/VBox/Main/src-server/HostImpl.cpp
index 70f8bb2..c2d5758 100644
--- a/src/VBox/Main/src-server/HostImpl.cpp
+++ b/src/VBox/Main/src-server/HostImpl.cpp
@@ -1542,7 +1542,7 @@ HRESULT Host::findHostNetworkInterfaceByName(const com::Utf8Str &aName,
 
     if (!found)
         return setError(E_INVALIDARG,
-                        HostNetworkInterface::tr("The host network interface with the given name could not be found"));
+                        HostNetworkInterface::tr("The host network interface named '%s' could not be found"), aName.c_str());
 
     return found.queryInterfaceTo(aNetworkInterface.asOutParam());
 #endif
diff --git a/src/VBox/Main/src-server/MachineImpl.cpp b/src/VBox/Main/src-server/MachineImpl.cpp
index ce1047b..b8135f7 100644
--- a/src/VBox/Main/src-server/MachineImpl.cpp
+++ b/src/VBox/Main/src-server/MachineImpl.cpp
@@ -13571,6 +13571,29 @@ HRESULT SessionMachine::authenticateExternal(const std::vector<com::Utf8Str> &aA
 
     HRESULT hr = S_OK;
 
+    if (!mAuthLibCtx.hAuthLibrary)
+    {
+        /* Load the external authentication library. */
+        Bstr authLibrary;
+        mVRDEServer->COMGETTER(AuthLibrary)(authLibrary.asOutParam());
+
+        Utf8Str filename = authLibrary;
+
+        int rc = AuthLibLoad(&mAuthLibCtx, filename.c_str());
+        if (RT_FAILURE(rc))
+        {
+            hr = setError(E_FAIL,
+                          tr("Could not load the external authentication library '%s' (%Rrc)"),
+                          filename.c_str(), rc);
+        }
+    }
+
+    /* The auth library might need the machine lock. */
+    alock.release();
+
+    if (FAILED(hr))
+       return hr;
+
     if (aAuthParams[0] == "VRDEAUTH" && aAuthParams.size() == 7)
     {
         enum VRDEAuthParams
@@ -13585,36 +13608,16 @@ HRESULT SessionMachine::authenticateExternal(const std::vector<com::Utf8Str> &aA
 
         AuthResult result = AuthResultAccessDenied;
 
-        if (!mAuthLibCtx.hAuthLibrary)
-        {
-            /* Load the external authentication library. */
-            Bstr authLibrary;
-            mVRDEServer->COMGETTER(AuthLibrary)(authLibrary.asOutParam());
-
-            Utf8Str filename = authLibrary;
-
-            int rc = AuthLibLoad(&mAuthLibCtx, filename.c_str());
-            if (RT_FAILURE(rc))
-            {
-                hr = setError(E_FAIL,
-                              tr("Could not load the external authentication library '%s' (%Rrc)"),
-                              filename.c_str(), rc);
-            }
-        }
-
-        if (SUCCEEDED(hr))
-        {
-            Guid uuid(aAuthParams[parmUuid]);
-            AuthGuestJudgement guestJudgement = (AuthGuestJudgement)aAuthParams[parmGuestJudgement].toUInt32();
-            uint32_t u32ClientId = aAuthParams[parmClientId].toUInt32();
-
-            result = AuthLibAuthenticate(&mAuthLibCtx,
-                                         uuid.raw(), guestJudgement,
-                                         aAuthParams[parmUser].c_str(),
-                                         aAuthParams[parmPassword].c_str(),
-                                         aAuthParams[parmDomain].c_str(),
-                                         u32ClientId);
-        }
+        Guid uuid(aAuthParams[parmUuid]);
+        AuthGuestJudgement guestJudgement = (AuthGuestJudgement)aAuthParams[parmGuestJudgement].toUInt32();
+        uint32_t u32ClientId = aAuthParams[parmClientId].toUInt32();
+
+        result = AuthLibAuthenticate(&mAuthLibCtx,
+                                     uuid.raw(), guestJudgement,
+                                     aAuthParams[parmUser].c_str(),
+                                     aAuthParams[parmPassword].c_str(),
+                                     aAuthParams[parmDomain].c_str(),
+                                     u32ClientId);
 
         /* Hack: aAuthParams[parmPassword] is const but the code believes in writable memory. */
         size_t cbPassword = aAuthParams[parmPassword].length();
diff --git a/src/VBox/Main/src-server/linux/HostPowerLinux.cpp b/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
index c39d607..4ee0634 100644
--- a/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
+++ b/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
@@ -21,6 +21,7 @@
 #include <iprt/asm.h>
 #include <iprt/power.h>
 #include <iprt/time.h>
+#include <iprt/stream.h>
 
 static bool checkDBusError(DBusError *pError, DBusConnection **pConnection)
 {
diff --git a/src/VBox/Main/src-server/win/NetIf-win.cpp b/src/VBox/Main/src-server/win/NetIf-win.cpp
index 7b78abf..34b657f 100644
--- a/src/VBox/Main/src-server/win/NetIf-win.cpp
+++ b/src/VBox/Main/src-server/win/NetIf-win.cpp
@@ -675,8 +675,14 @@ int netIfNetworkInterfaceHelperServer(SVCHlpClient *aClient,
             Bstr name;
             Bstr bstrErr;
 
+#ifdef VBOXNETCFG_DELAYEDRENAME
+            Bstr devId;
+            hrc = VBoxNetCfgWinCreateHostOnlyNetworkInterface(NULL, false, guid.asOutParam(), devId.asOutParam(),
+                                                              bstrErr.asOutParam());
+#else /* !VBOXNETCFG_DELAYEDRENAME */
             hrc = VBoxNetCfgWinCreateHostOnlyNetworkInterface(NULL, false, guid.asOutParam(), name.asOutParam(),
                                                               bstrErr.asOutParam());
+#endif /* !VBOXNETCFG_DELAYEDRENAME */
 
             if (hrc == S_OK)
             {
@@ -688,8 +694,16 @@ int netIfNetworkInterfaceHelperServer(SVCHlpClient *aClient,
                      * i.e. 192.168.xxx.0, assign  192.168.xxx.1 for the hostonly adapter */
                     ip = ip | (1 << 24);
                     hrc = VBoxNetCfgWinEnableStaticIpConfig((const GUID*)guid.raw(), ip, mask);
+                    if (hrc != S_OK)
+                        LogRel(("VBoxNetCfgWinEnableStaticIpConfig failed (0x%x)\n", hrc));
                 }
-
+                else
+                    LogRel(("VBoxNetCfgWinGenHostOnlyNetworkNetworkIp failed (0x%x)\n", hrc));
+#ifdef VBOXNETCFG_DELAYEDRENAME
+                hrc = VBoxNetCfgWinRenameHostOnlyConnection((const GUID*)guid.raw(), devId.raw(), name.asOutParam());
+                if (hrc != S_OK)
+                    LogRel(("VBoxNetCfgWinRenameHostOnlyConnection failed, error = 0x%x", hrc));
+#endif /* VBOXNETCFG_DELAYEDRENAME */
                 /* write success followed by GUID */
                 vrc = aClient->write(SVCHlpMsg::CreateHostOnlyNetworkInterface_OK);
                 if (RT_FAILURE(vrc)) break;
@@ -1458,359 +1472,454 @@ int NetIfDhcpRediscover(VirtualBox *vBox, HostNetworkInterface * pIf)
 #endif
 }
 
-#ifndef NETIF_WITHOUT_NETCFG
-int NetIfList(std::list<ComObjPtr<HostNetworkInterface> > &list)
+
+#define netIfLog Log
+
+struct BoundAdapter
 {
-#ifndef VBOX_WITH_NETFLT
-    return VERR_NOT_IMPLEMENTED;
-#else /* #  if defined VBOX_WITH_NETFLT */
-    INetCfg              *pNc = NULL;
-    INetCfgComponent     *pMpNcc;
-    INetCfgComponent     *pTcpIpNcc;
+    LPWSTR                pName;
+    LPWSTR                pHwId;
+    RTUUID                guid;
+    PIP_ADAPTER_ADDRESSES pAdapter;
+};
+
+static int netIfGetUnboundHostOnlyAdapters(INetCfg *pNetCfg, std::list<BoundAdapter> &adapters)
+{
+    INetCfgComponent     *pMiniport;
+    HRESULT              hr;
+    IEnumNetCfgComponent  *pEnumComponent;
+
+    if ((hr = pNetCfg->EnumComponents(&GUID_DEVCLASS_NET, &pEnumComponent)) != S_OK)
+        LogRel(("netIfGetUnboundHostOnlyAdapters: failed to enumerate network adapter components (0x%x)\n", hr));
+    else
+    {
+        while ((hr = pEnumComponent->Next(1, &pMiniport, NULL)) == S_OK)
+        {
+            GUID guid;
+            ULONG uComponentStatus;
+            struct BoundAdapter adapter;
+            memset(&adapter, 0, sizeof(adapter));
+            if ((hr = pMiniport->GetDisplayName(&adapter.pName)) != S_OK)
+                LogRel(("netIfGetUnboundHostOnlyAdapters: failed to get device display name (0x%x)\n", hr));
+            else if ((hr = pMiniport->GetDeviceStatus(&uComponentStatus)) != S_OK)
+                netIfLog(("netIfGetUnboundHostOnlyAdapters: failed to get device status (0x%x)\n", hr));
+            else if (uComponentStatus != 0)
+                netIfLog(("netIfGetUnboundHostOnlyAdapters: wrong device status (0x%x)\n", uComponentStatus));
+            else if ((hr = pMiniport->GetId(&adapter.pHwId)) != S_OK)
+                LogRel(("netIfGetUnboundHostOnlyAdapters: failed to get device id (0x%x)\n", hr));
+            else if (_wcsnicmp(adapter.pHwId, L"sun_VBoxNetAdp", sizeof(L"sun_VBoxNetAdp")/2))
+                netIfLog(("netIfGetUnboundHostOnlyAdapters: not host-only id = %ls, ignored\n", adapter.pHwId));
+            else if ((hr = pMiniport->GetInstanceGuid(&guid)) != S_OK)
+                LogRel(("netIfGetUnboundHostOnlyAdapters: failed to get instance id (0x%x)\n", hr));
+            else
+            {
+                adapter.guid = *(Guid(guid).raw());
+                netIfLog(("netIfGetUnboundHostOnlyAdapters: guid=%RTuuid, name=%ls id = %ls\n", &adapter.guid, adapter.pName, adapter.pHwId));
+                adapters.push_back(adapter);
+                adapter.pName = adapter.pHwId = NULL; /* do not free, will be done later */
+            }
+            if (adapter.pHwId)
+                CoTaskMemFree(adapter.pHwId);
+            if (adapter.pName)
+                CoTaskMemFree(adapter.pName);
+            pMiniport->Release();
+        }
+        Assert(hr == S_OK || hr == S_FALSE);
+
+        pEnumComponent->Release();
+    }
+    netIfLog(("netIfGetUnboundHostOnlyAdapters: return\n"));
+    return VINF_SUCCESS;
+}
+
+static HRESULT netIfGetBoundAdapters(std::list<BoundAdapter> &boundAdapters)
+{
+    INetCfg              *pNetCfg = NULL;
+    INetCfgComponent     *pFilter;
     LPWSTR               lpszApp;
     HRESULT              hr;
-    IEnumNetCfgBindingPath      *pEnumBp;
-    INetCfgBindingPath          *pBp;
-    IEnumNetCfgBindingInterface *pEnumBi;
-    INetCfgBindingInterface *pBi;
-    int                  iDefault = getDefaultInterfaceIndex();
 
-    Log(("NetIfList: building the list of interfaces\n"));
+    netIfLog(("netIfGetBoundAdapters: building the list of interfaces\n"));
     /* we are using the INetCfg API for getting the list of miniports */
-    hr = VBoxNetCfgWinQueryINetCfg(&pNc, FALSE,
+    hr = VBoxNetCfgWinQueryINetCfg(&pNetCfg, FALSE,
                        VBOX_APP_NAME,
                        10000,
                        &lpszApp);
     Assert(hr == S_OK);
     if (hr != S_OK)
     {
-        if (pNc)
-            pNc->Release();
-        pNc = NULL;
-        LogRel(("NetIfList: failed to acquire INetCfg interface (0x%x), trying CoCreateInstance...\n", hr));
-        hr = CoCreateInstance(CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, IID_INetCfg, (PVOID*)&pNc);
-        if (SUCCEEDED(hr))
-        {
-            hr = pNc->Initialize(NULL);
-            if (FAILED(hr))
-            {
-                LogRel(("NetIfList: INetCfg::Initialize failed with 0x%x\n", hr));
-                if (pNc)
-                    pNc->Release();
-                pNc = NULL;
-            }
-        }
-        else
-            LogRel(("NetIfList: CoCreateInstance failed with 0x%x\n", hr));
+        LogRel(("netIfGetBoundAdapters: failed to query INetCfg (0x%x)\n", hr));
+        return hr;
     }
 
-    if (hr == S_OK)
+    if ((hr = pNetCfg->FindComponent(L"oracle_VBoxNetLwf", &pFilter)) != S_OK
+        /* fall back to NDIS5 miniport lookup */
+        && (hr = pNetCfg->FindComponent(L"sun_VBoxNetFlt", &pFilter)))
+        LogRel(("netIfGetBoundAdapters: could not find either 'oracle_VBoxNetLwf' or 'sun_VBoxNetFlt' components (0x%x)\n", hr));
+    else
     {
-# ifdef VBOX_NETFLT_ONDEMAND_BIND
-        /* for the protocol-based approach for now we just get all miniports the MS_TCPIP protocol binds to */
-        hr = pNc->FindComponent(L"MS_TCPIP", &pTcpIpNcc);
-# else
-        /* for the filter-based approach we get all miniports our filter (oracle_VBoxNetLwf)is bound to */
-        hr = pNc->FindComponent(L"oracle_VBoxNetLwf", &pTcpIpNcc);
-        if (hr != S_OK)
-        {
-            LogRel(("NetIfList: could not find VBoxNetLwf component (error 0x%x), trying VBoxNetFlt instead\n", hr));
-            /* fall back to NDIS5 miniport lookup (sun_VBoxNetFlt) */
-            hr = pNc->FindComponent(L"sun_VBoxNetFlt", &pTcpIpNcc);
-        }
-#  ifndef VBOX_WITH_HARDENING
-        if (hr != S_OK)
-        {
-            /* TODO: try to install the netflt from here */
-        }
-#  endif
-
-# endif
-
-        if (hr == S_OK)
+        INetCfgComponentBindings *pFilterBindings;
+        if ((pFilter->QueryInterface(IID_INetCfgComponentBindings, (PVOID*)&pFilterBindings)) != S_OK)
+            LogRel(("netIfGetBoundAdapters: failed to query INetCfgComponentBindings (0x%x)\n", hr));
+        else
         {
-            INetCfgComponentBindings *pBindings;
-            hr = pTcpIpNcc->QueryInterface(IID_INetCfgComponentBindings, (PVOID*)&pBindings);
-            Assert(hr == S_OK);
-            if (hr == S_OK)
+            IEnumNetCfgBindingPath *pEnumBp;
+            INetCfgBindingPath     *pBp;
+            if ((pFilterBindings->EnumBindingPaths(EBP_BELOW, &pEnumBp)) != S_OK)
+                LogRel(("netIfGetBoundAdapters: failed to enumerate binding paths (0x%x)\n", hr));
+            else
             {
-                hr = pBindings->EnumBindingPaths(EBP_BELOW, &pEnumBp);
-                Assert(hr == S_OK);
-                if (hr == S_OK)
+                pEnumBp->Reset();
+                while ((hr = pEnumBp->Next(1, &pBp, NULL)) == S_OK)
                 {
-                    hr = pEnumBp->Reset();
-                    Assert(hr == S_OK);
-                    if (hr == S_OK)
+                    IEnumNetCfgBindingInterface *pEnumBi;
+                    INetCfgBindingInterface     *pBi;
+                    if (pBp->IsEnabled() != S_OK)
+                    {
+                        /* @todo some id of disabled path could be useful. */
+                        netIfLog(("netIfGetBoundAdapters: INetCfgBindingPath is disabled (0x%x)\n", hr));
+                        pBp->Release();
+                        continue;
+                    }
+                    if ((pBp->EnumBindingInterfaces(&pEnumBi)) != S_OK)
+                        LogRel(("netIfGetBoundAdapters: failed to enumerate binding interfaces (0x%x)\n", hr));
+                    else
                     {
-                        while ((hr = pEnumBp->Next(1, &pBp, NULL)) == S_OK)
+                        hr = pEnumBi->Reset();
+                        while ((hr = pEnumBi->Next(1, &pBi, NULL)) == S_OK)
                         {
-                            Log(("NetIfList: fetched INetCfgBindingPath interface\n"));
-                            /* S_OK == enabled, S_FALSE == disabled */
-                            if (pBp->IsEnabled() == S_OK)
+                            INetCfgComponent *pAdapter;
+                            if ((hr = pBi->GetLowerComponent(&pAdapter)) != S_OK)
+                                LogRel(("netIfGetBoundAdapters: failed to get lower component (0x%x)\n", hr));
+                            else
                             {
-                                hr = pBp->EnumBindingInterfaces(&pEnumBi);
-                                Assert(hr == S_OK);
-                                if (hr == S_OK)
+                                LPWSTR pwszName = NULL;
+                                if ((hr = pAdapter->GetDisplayName(&pwszName)) != S_OK)
+                                    LogRel(("netIfGetBoundAdapters: failed to get display name (0x%x)\n", hr));
+                                else
                                 {
-                                    hr = pEnumBi->Reset();
-                                    Assert(hr == S_OK);
-                                    if (hr == S_OK)
+                                    ULONG uStatus;
+                                    DWORD dwChars;
+                                    if ((hr = pAdapter->GetDeviceStatus(&uStatus)) != S_OK)
+                                        netIfLog(("netIfGetBoundAdapters: %ls: failed to get device status (0x%x)\n",
+                                                  pwszName, hr));
+                                    else if ((hr = pAdapter->GetCharacteristics(&dwChars)) != S_OK)
+                                        netIfLog(("netIfGetBoundAdapters: %ls: failed to get device characteristics (0x%x)\n",
+                                                  pwszName, hr));
+                                    else if (uStatus != 0)
+                                        netIfLog(("netIfGetBoundAdapters: %ls: wrong status 0x%x\n",
+                                                  pwszName, uStatus));
+                                    else if (dwChars & NCF_HIDDEN)
+                                        netIfLog(("netIfGetBoundAdapters: %ls: wrong characteristics 0x%x\n",
+                                                  pwszName, dwChars));
+                                    else
                                     {
-                                        while ((hr = pEnumBi->Next(1, &pBi, NULL)) == S_OK)
+                                        GUID guid;
+                                        LPWSTR pwszHwId = NULL;
+                                        if ((hr = pAdapter->GetId(&pwszHwId)) != S_OK)
+                                            LogRel(("netIfGetBoundAdapters: %ls: failed to get hardware id (0x%x)\n",
+                                                      pwszName, hr));
+                                        else if (!_wcsnicmp(pwszHwId, L"sun_VBoxNetAdp", sizeof(L"sun_VBoxNetAdp")/2))
+                                            netIfLog(("netIfGetBoundAdapters: host-only adapter %ls, ignored\n", pwszName));
+                                        else if ((hr = pAdapter->GetInstanceGuid(&guid)) != S_OK)
+                                            LogRel(("netIfGetBoundAdapters: %ls: failed to get instance GUID (0x%x)\n",
+                                                      pwszName, hr));
+                                        else
                                         {
-                                            Log(("NetIfList: fetched INetCfgBindingInterface interface\n"));
-                                            hr = pBi->GetLowerComponent(&pMpNcc);
-                                            Assert(hr == S_OK);
-                                            if (hr == S_OK)
-                                            {
-                                                LPWSTR pwszName;
-                                                ULONG uComponentStatus;
-                                                hr = pMpNcc->GetDisplayName(&pwszName);
-                                                if (hr == S_OK)
-                                                    Log(("NetIfList: got %ls\n", pwszName));
-                                                else
-                                                    LogRel(("NetIfList: failed to get device display name (0x%x)\n", hr));
-                                                hr = pMpNcc->GetDeviceStatus(&uComponentStatus);
-                                                if (hr == S_OK)
-                                                {
-                                                    if (uComponentStatus == 0)
-                                                    {
-                                                        LPWSTR pId;
-                                                        hr = pMpNcc->GetId(&pId);
-                                                        Assert(hr == S_OK);
-                                                        if (hr == S_OK)
-                                                        {
-                                                            Log(("NetIfList: fetched network adapter id: %.80ls\n", pId));
-                                                            /*
-                                                             * Host-only interfaces are ignored here and included into the list
-                                                             * later in netIfListHostAdapters()
-                                                             */
-                                                            if (_wcsnicmp(pId, L"sun_VBoxNetAdp", sizeof(L"sun_VBoxNetAdp")/2))
-                                                            {
-                                                                vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_Bridged,
-                                                                                       iDefault);
-                                                            }
-                                                            CoTaskMemFree(pId);
-                                                        }
-                                                        else
-                                                            LogRel(("NetIfList: failed to get device id (0x%x)\n", hr));
-                                                    }
-                                                    else
-                                                        LogRel(("NetIfList: wrong device status (0x%x)\n", uComponentStatus));
-                                                }
-                                                else
-                                                    LogRel(("NetIfList: failed to get device status (0x%x)\n", hr));
-                                                pMpNcc->Release();
-                                            }
-                                            else
-                                                LogRel(("NetIfList: failed to get lower component (0x%x)\n", hr));
-                                            pBi->Release();
+                                            struct BoundAdapter adapter;
+                                            adapter.pName    = pwszName;
+                                            adapter.pHwId    = pwszHwId;
+                                            adapter.guid     = *(Guid(guid).raw());
+                                            adapter.pAdapter = NULL;
+                                            netIfLog(("netIfGetBoundAdapters: guid=%RTuuid, name=%ls, hwid=%ls, status=%x, chars=%x\n",
+                                                      &adapter.guid, pwszName, pwszHwId, uStatus, dwChars));
+                                            boundAdapters.push_back(adapter);
+                                            pwszName = pwszHwId = NULL; /* do not free, will be done later */
                                         }
-                                        Assert(hr == S_OK || hr == S_FALSE);
+                                        if (pwszHwId)
+                                            CoTaskMemFree(pwszHwId);
                                     }
-                                    else
-                                        LogRel(("NetIfList: IEnumNetCfgBindingInterface::Reset failed (0x%x)\n", hr));
-                                    pEnumBi->Release();
+                                    if (pwszName)
+                                        CoTaskMemFree(pwszName);
                                 }
-                                else
-                                    LogRel(("NetIfList: failed to enumerate binding interfaces (0x%x)\n", hr));
+
+                                pAdapter->Release();
                             }
-                            else
-                                LogRel(("NetIfList: INetCfgBindingPath is disabled\n"));
-                            pBp->Release();
+                            pBi->Release();
                         }
-                        Assert(hr == S_OK || hr == S_FALSE);
+                        pEnumBi->Release();
                     }
-                    else
-                        LogRel(("NetIfList: IEnumNetCfgBindingPath::Reset failed (0x%x)\n", hr));
-                    pEnumBp->Release();
+                    pBp->Release();
                 }
-                else
-                    LogRel(("NetIfList: EnumBindingPaths failed (0x%x)\n", hr));
-                pBindings->Release();
+                pEnumBp->Release();
             }
-            else
-                LogRel(("NetIfList: failed to acquire INetCfgComponentBindings interface\n"));
-            pTcpIpNcc->Release();
+            pFilterBindings->Release();
         }
-        else
+        pFilter->Release();
+    }
+    /* Host-only adapters are not necessarily bound, add them separately. */
+    netIfGetUnboundHostOnlyAdapters(pNetCfg, boundAdapters);
+    VBoxNetCfgWinReleaseINetCfg(pNetCfg, FALSE);
+
+    return S_OK;
+}
+
+#if 0
+static HRESULT netIfGetBoundAdaptersFallback(std::list<BoundAdapter> &boundAdapters)
+{
+    return CO_E_NOT_SUPPORTED;
+}
+#endif
+
+static void netIfFillInfoWithAddressesXp(PNETIFINFO pInfo, PIP_ADAPTER_ADDRESSES pAdapter)
+{
+    PIP_ADAPTER_UNICAST_ADDRESS pAddr;
+    bool fIPFound = false;
+    bool fIPv6Found = false;
+    for (pAddr = pAdapter->FirstUnicastAddress; pAddr; pAddr = pAddr->Next)
+    {
+        switch (pAddr->Address.lpSockaddr->sa_family)
         {
-            LogRel(("failed to get the oracle_VBoxNetLwf(sun_VBoxNetFlt) component, error (0x%x)\n", hr));
+            case AF_INET:
+                if (!fIPFound)
+                {
+                    fIPFound = true;
+                    memcpy(&pInfo->IPAddress,
+                           &((struct sockaddr_in *)pAddr->Address.lpSockaddr)->sin_addr.s_addr,
+                           sizeof(pInfo->IPAddress));
+                }
+                break;
+            case AF_INET6:
+                if (!fIPv6Found)
+                {
+                    fIPv6Found = true;
+                    memcpy(&pInfo->IPv6Address,
+                           ((struct sockaddr_in6 *)pAddr->Address.lpSockaddr)->sin6_addr.s6_addr,
+                           sizeof(pInfo->IPv6Address));
+                }
+                break;
+        }
+    }
+    PIP_ADAPTER_PREFIX pPrefix;
+    ULONG uPrefixLenV4 = 0;
+    ULONG uPrefixLenV6 = 0;
+    for (pPrefix = pAdapter->FirstPrefix; pPrefix && !(uPrefixLenV4 && uPrefixLenV6); pPrefix = pPrefix->Next)
+    {
+        switch (pPrefix->Address.lpSockaddr->sa_family)
+        {
+            case AF_INET:
+                if (!uPrefixLenV4)
+                {
+                    ULONG ip = ((PSOCKADDR_IN)(pPrefix->Address.lpSockaddr))->sin_addr.s_addr;
+                    netIfLog(("netIfFillInfoWithAddressesXp: prefix=%RTnaipv4 len=%u\n", ip, pPrefix->PrefixLength));
+                    if (   pPrefix->PrefixLength < sizeof(pInfo->IPNetMask) * 8
+                        && pPrefix->PrefixLength > 0
+                        && (ip & 0xF0) < 224)
+                    {
+                        uPrefixLenV4 = pPrefix->PrefixLength;
+                        ASMBitSetRange(&pInfo->IPNetMask, 0, pPrefix->PrefixLength);
+                    }
+                    else
+                        netIfLog(("netIfFillInfoWithAddressesXp: Unexpected IPv4 prefix length of %d\n",
+                             pPrefix->PrefixLength));
+                }
+                break;
+            case AF_INET6:
+                if (!uPrefixLenV6)
+                {
+                    PBYTE ipv6 = ((PSOCKADDR_IN6)(pPrefix->Address.lpSockaddr))->sin6_addr.s6_addr;
+                    netIfLog(("netIfFillInfoWithAddressesXp: prefix=%RTnaipv6 len=%u\n",
+                              ipv6, pPrefix->PrefixLength));
+                    if (   pPrefix->PrefixLength < sizeof(pInfo->IPv6NetMask) * 8
+                        && pPrefix->PrefixLength > 0
+                        && ipv6[0] != 0xFF)
+                    {
+                        uPrefixLenV6 = pPrefix->PrefixLength;
+                        ASMBitSetRange(&pInfo->IPv6NetMask, 0, pPrefix->PrefixLength);
+                    }
+                    else
+                        netIfLog(("netIfFillInfoWithAddressesXp: Unexpected IPv6 prefix length of %d\n",
+                             pPrefix->PrefixLength));
+                }
+                break;
         }
+    }
+    netIfLog(("netIfFillInfoWithAddressesXp: %RTnaipv4/%u\n",
+              pInfo->IPAddress, uPrefixLenV4));
+    netIfLog(("netIfFillInfoWithAddressesXp: %RTnaipv6/%u\n",
+              &pInfo->IPv6Address, uPrefixLenV6));
+}
 
-        /* Add host-only adapters to the list */
-        netIfListHostAdapters(pNc, list);
+static void netIfFillInfoWithAddresses(PNETIFINFO pInfo, PIP_ADAPTER_ADDRESSES pAdapter)
+{
+    PIP_ADAPTER_UNICAST_ADDRESS pAddr;
 
-        VBoxNetCfgWinReleaseINetCfg(pNc, FALSE);
-    }
+    if (sizeof(pInfo->MACAddress) != pAdapter->PhysicalAddressLength)
+        netIfLog(("netIfFillInfoWithAddresses: Unexpected physical address length: %u\n", pAdapter->PhysicalAddressLength));
+    else
+        memcpy(pInfo->MACAddress.au8, pAdapter->PhysicalAddress, sizeof(pInfo->MACAddress));
 
-    return VINF_SUCCESS;
-#endif /* #  if defined VBOX_WITH_NETFLT */
+    bool fIPFound = false;
+    bool fIPv6Found = false;
+    for (pAddr = pAdapter->FirstUnicastAddress; pAddr; pAddr = pAddr->Next)
+    {
+        if (pAddr->Length < sizeof(IP_ADAPTER_UNICAST_ADDRESS_LH))
+        {
+            netIfLog(("netIfFillInfoWithAddresses: unicast address is too small (%u < %u), fall back to XP implementation\n",
+                      pAddr->Length, sizeof(IP_ADAPTER_UNICAST_ADDRESS_LH)));
+            return netIfFillInfoWithAddressesXp(pInfo, pAdapter);
+        }
+        PIP_ADAPTER_UNICAST_ADDRESS_LH pAddrLh = (PIP_ADAPTER_UNICAST_ADDRESS_LH)pAddr;
+        switch (pAddrLh->Address.lpSockaddr->sa_family)
+        {
+            case AF_INET:
+                if (!fIPFound)
+                {
+                    fIPFound = true;
+                    memcpy(&pInfo->IPAddress,
+                           &((struct sockaddr_in *)pAddrLh->Address.lpSockaddr)->sin_addr.s_addr,
+                           sizeof(pInfo->IPAddress));
+                    if (pAddrLh->OnLinkPrefixLength > 32)
+                        netIfLog(("netIfFillInfoWithAddresses: Invalid IPv4 prefix length of %d\n", pAddrLh->OnLinkPrefixLength));
+                    else
+                        ASMBitSetRange(&pInfo->IPNetMask, 0, pAddrLh->OnLinkPrefixLength);
+                }
+                break;
+            case AF_INET6:
+                if (!fIPv6Found)
+                {
+                    fIPv6Found = true;
+                    memcpy(&pInfo->IPv6Address,
+                           ((struct sockaddr_in6 *)pAddrLh->Address.lpSockaddr)->sin6_addr.s6_addr,
+                           sizeof(pInfo->IPv6Address));
+                    if (pAddrLh->OnLinkPrefixLength > 128)
+                        netIfLog(("netIfFillInfoWithAddresses: Invalid IPv6 prefix length of %d\n", pAddrLh->OnLinkPrefixLength));
+                    else
+                        ASMBitSetRange(&pInfo->IPv6NetMask, 0, pAddrLh->OnLinkPrefixLength);
+                }
+                break;
+        }
+    }
+    netIfLog(("netIfFillInfoWithAddresses: %RTnaipv4/%u\n",
+              pInfo->IPAddress, ASMBitFirstClear(&pInfo->IPNetMask, sizeof(RTNETADDRIPV4)*8)));
+    netIfLog(("netIfFillInfoWithAddresses: %RTnaipv6/%u\n",
+              &pInfo->IPv6Address, composeIPv6PrefixLenghFromAddress(&pInfo->IPv6NetMask)));
 }
 
-#else /* !NETIF_WITHOUT_NETCFG */
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define NETIF_GAA_FLAGS GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST
+#else /* (NTDDI_VERSION < NTDDI_VISTA) */
+#define NETIF_GAA_FLAGS GAA_FLAG_INCLUDE_PREFIX | GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST
+#endif /* (NTDDI_VERSION < NTDDI_VISTA) */
+
 int NetIfList(std::list<ComObjPtr<HostNetworkInterface> > &list)
 {
-    DWORD dwRc;
-    int rc = VINF_SUCCESS;
+    HRESULT hr = S_OK;
     int iDefault = getDefaultInterfaceIndex();
-    /*
-     * Most of the hosts probably have less than 10 adapters,
-     * so we'll mostly succeed from the first attempt.
-     */
-    ULONG uBufLen = sizeof(IP_ADAPTER_ADDRESSES) * 10;
+    /* MSDN recommends to pre-allocate a 15KB buffer. */
+    ULONG uBufLen = 15 * 1024;
     PIP_ADAPTER_ADDRESSES pAddresses = (PIP_ADAPTER_ADDRESSES)RTMemAlloc(uBufLen);
     if (!pAddresses)
-        return VERR_NO_MEMORY;
-    dwRc = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, pAddresses, &uBufLen);
-    if (dwRc == ERROR_BUFFER_OVERFLOW)
+        return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
+    DWORD dwRc = GetAdaptersAddresses(AF_UNSPEC, NETIF_GAA_FLAGS, NULL, pAddresses, &uBufLen);
+    for (int tries = 0; tries < 3 && dwRc == ERROR_BUFFER_OVERFLOW; ++tries)
     {
-        /* Impressive! More than 10 adapters! Get more memory and try again. */
-        RTMemFree(pAddresses);
+        /* Get more memory and try again. */
+        free(pAddresses);
         pAddresses = (PIP_ADAPTER_ADDRESSES)RTMemAlloc(uBufLen);
         if (!pAddresses)
-            return VERR_NO_MEMORY;
-        dwRc = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, pAddresses, &uBufLen);
+            return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
+        dwRc = GetAdaptersAddresses(AF_UNSPEC, NETIF_GAA_FLAGS, NULL, pAddresses, &uBufLen);
     }
-    if (dwRc == NO_ERROR)
+    if (dwRc != NO_ERROR)
     {
-        PIP_ADAPTER_ADDRESSES pAdapter;
-        for (pAdapter = pAddresses; pAdapter; pAdapter = pAdapter->Next)
+        LogRel(("NetIfList: GetAdaptersAddresses failed (0x%x)\n", dwRc));
+        hr = HRESULT_FROM_WIN32(dwRc);
+    }
+    else
+    {
+        std::list<BoundAdapter> boundAdapters;
+        HRESULT hr = netIfGetBoundAdapters(boundAdapters);
+#if 0
+        if (hr != S_OK)
+            hr = netIfGetBoundAdaptersFallback(boundAdapters);
+#endif
+        if (hr != S_OK)
+            LogRel(("NetIfList: netIfGetBoundAdapters failed (0x%x)\n", hr));
+        else
         {
-            Log(("Enumerating %s\n", pAdapter->AdapterName));
-            /* Vista+ systems introduced separate type for wireless adapters */
-            if (pAdapter->IfType != IF_TYPE_ETHERNET_CSMACD && pAdapter->IfType != IF_TYPE_IEEE80211)
-            {
-                LogRel(("Skipped non-Ethernet '%ls'\n", pAdapter->FriendlyName));
-                continue;
-            }
-
-            NETIFINFO Info;
-            RT_ZERO(Info);
+            PIP_ADAPTER_ADDRESSES pAdapter;
 
-            if (pAdapter->AdapterName[0] == '{')
+            for (pAdapter = pAddresses; pAdapter; pAdapter = pAdapter->Next)
             {
-                char *pszUuid = pAdapter->AdapterName + 1;
-                size_t len = strlen(pszUuid) - 1;
-                if (pszUuid[len] != '}')
-                {
-                    LogRel(("%s is not a valid UUID!\n", pAdapter->AdapterName));
-                    continue;
-                }
-                pszUuid[len] = 0;
-                rc = RTUuidFromStr(&Info.Uuid, pszUuid);
-                if (RT_FAILURE(rc))
+                char *pszUuid = RTStrDup(pAdapter->AdapterName);
+                if (!pszUuid)
                 {
-                    LogRel(("NetIfList: Failed to convert %s to UUID (%Rrc)\n", pszUuid, rc));
-                    continue;
+                    LogRel(("NetIfList: out of memory\n"));
+                    break;
                 }
-                bool fIPv4Found, fIPv6Found;
-                PIP_ADAPTER_UNICAST_ADDRESS pAddr;
-                fIPv4Found = fIPv6Found = false;
-                for (pAddr = pAdapter->FirstUnicastAddress;
-                     pAddr && !(fIPv4Found && fIPv6Found);
-                     pAddr = pAddr->Next)
+                size_t len = strlen(pszUuid) - 1;
+                if (pszUuid[0] != '{' || pszUuid[len] != '}')
+                    LogRel(("NetIfList: ignoring invalid GUID %s\n", pAdapter->AdapterName));
+                else
                 {
-                    switch (pAddr->Address.lpSockaddr->sa_family)
+                    std::list<BoundAdapter>::iterator it;
+                    pszUuid[len] = 0;
+                    for (it = boundAdapters.begin(); it != boundAdapters.end(); ++it)
                     {
-                        case AF_INET:
-                            if (!fIPv4Found)
-                            {
-                                fIPv4Found = true;
-                                memcpy(&Info.IPAddress,
-                                       &((struct sockaddr_in *)pAddr->Address.lpSockaddr)->sin_addr.s_addr,
-                                       sizeof(Info.IPAddress));
-                            }
-                            break;
-                        case AF_INET6:
-                            if (!fIPv6Found)
-                            {
-                                fIPv6Found = true;
-                                memcpy(&Info.IPv6Address,
-                                       ((struct sockaddr_in6 *)pAddr->Address.lpSockaddr)->sin6_addr.s6_addr,
-                                       sizeof(Info.IPv6Address));
-                            }
+                        if (!RTUuidCompareStr(&(*it).guid, pszUuid + 1))
+                        {
+                            (*it).pAdapter = pAdapter;
                             break;
+                        }
                     }
                 }
-                PIP_ADAPTER_PREFIX pPrefix;
-                fIPv4Found = fIPv6Found = false;
-                for (pPrefix = pAdapter->FirstPrefix;
-                     pPrefix && !(fIPv4Found && fIPv6Found);
-                     pPrefix = pPrefix->Next)
+                RTStrFree(pszUuid);
+            }
+            std::list<BoundAdapter>::iterator it;
+            for (it = boundAdapters.begin(); it != boundAdapters.end(); ++it)
+            {
+                NETIFINFO info;
+                memset(&info, 0, sizeof(info));
+                info.Uuid = (*it).guid;
+                info.enmMediumType = NETIF_T_ETHERNET;
+                pAdapter = (*it).pAdapter;
+                if (pAdapter)
                 {
-                    switch (pPrefix->Address.lpSockaddr->sa_family)
-                    {
-                        case AF_INET:
-                            if (!fIPv4Found)
-                            {
-                                if (pPrefix->PrefixLength <= sizeof(Info.IPNetMask) * 8)
-                                {
-                                    fIPv4Found = true;
-                                    ASMBitSetRange(&Info.IPNetMask, 0, pPrefix->PrefixLength);
-                                }
-                                else
-                                    LogRel(("NetIfList: Unexpected IPv4 prefix length of %d\n",
-                                            pPrefix->PrefixLength));
-                            }
-                            break;
-                        case AF_INET6:
-                            if (!fIPv6Found)
-                            {
-                                if (pPrefix->PrefixLength <= sizeof(Info.IPv6NetMask) * 8)
-                                {
-                                    fIPv6Found = true;
-                                    ASMBitSetRange(&Info.IPv6NetMask, 0, pPrefix->PrefixLength);
-                                }
-                                else
-                                    LogRel(("NetIfList: Unexpected IPv6 prefix length of %d\n",
-                                            pPrefix->PrefixLength));
-                            }
-                            break;
-                    }
+                    info.enmStatus = pAdapter->OperStatus == IfOperStatusUp ? NETIF_S_UP : NETIF_S_DOWN;
+                    info.bIsDefault = (pAdapter->IfIndex == iDefault);
+                    info.bDhcpEnabled = pAdapter->Flags & IP_ADAPTER_DHCP_ENABLED;
+                    netIfFillInfoWithAddresses(&info, pAdapter);
                 }
-                if (sizeof(Info.MACAddress) != pAdapter->PhysicalAddressLength)
-                    LogRel(("NetIfList: Unexpected physical address length: %u\n",
-                            pAdapter->PhysicalAddressLength));
                 else
-                    memcpy(Info.MACAddress.au8, pAdapter->PhysicalAddress, sizeof(Info.MACAddress));
-                Info.enmMediumType = NETIF_T_ETHERNET;
-                Info.enmStatus = pAdapter->OperStatus == IfOperStatusUp ? NETIF_S_UP : NETIF_S_DOWN;
-                Info.bDhcpEnabled = !!(pAdapter->Flags & IP_ADAPTER_DHCP_ENABLED);
-                Info.bIsDefault = (pAdapter->IfIndex == iDefault);
-                HostNetworkInterfaceType enmType;
-                /*
-                 * For some reason, I would not even want to speculate what it is, the users see
-                 * adapter's description as its name in its property dialog box.
-                 */
-                enmType = wcsncmp(pAdapter->Description, L"VirtualBox", 10) == 0
-                    ? HostNetworkInterfaceType_HostOnly
-                    : HostNetworkInterfaceType_Bridged;
-                Log(("Adding %ls as %s\n", pAdapter->Description,
-                     enmType == HostNetworkInterfaceType_Bridged ? "bridged" : "host-only"));
+                    info.enmStatus = NETIF_S_DOWN;
                 /* create a new object and add it to the list */
                 ComObjPtr<HostNetworkInterface> iface;
                 iface.createObject();
-                /* remove the curly bracket at the end */
-                rc = iface->init(pAdapter->Description, enmType, &Info);
-                if (SUCCEEDED(rc))
+                HostNetworkInterfaceType enmType =
+                    _wcsnicmp((*it).pHwId, L"sun_VBoxNetAdp", sizeof(L"sun_VBoxNetAdp")/2) ?
+                    HostNetworkInterfaceType_Bridged : HostNetworkInterfaceType_HostOnly;
+                netIfLog(("Adding %ls as %s\n", (*it).pName,
+                        enmType == HostNetworkInterfaceType_Bridged ? "bridged" :
+                        enmType == HostNetworkInterfaceType_HostOnly ? "host-only" : "unknown"));
+                int rc = iface->init((*it).pName, enmType, &info);
+                if (FAILED(rc))
+                    LogRel(("NetIfList: HostNetworkInterface::init() -> %Rrc\n", rc));
+                else
                 {
-                    if (Info.bIsDefault)
+                    if (info.bIsDefault)
                         list.push_front(iface);
                     else
                         list.push_back(iface);
                 }
-                else
-                {
-                    LogRel(("NetIfList: HostNetworkInterface::init() -> %Rrc\n", rc));
-                    Assert(0);
-                }
+                if ((*it).pHwId)
+                    CoTaskMemFree((*it).pHwId);
+                if ((*it).pName)
+                    CoTaskMemFree((*it).pName);
             }
         }
     }
-
     RTMemFree(pAddresses);
 
-    return VINF_SUCCESS;
+    return hr;
 }
-#endif /* !NETIF_WITHOUT_NETCFG */
diff --git a/src/VBox/Makefile.kmk b/src/VBox/Makefile.kmk
index 26fb2d2..7f86b7a 100644
--- a/src/VBox/Makefile.kmk
+++ b/src/VBox/Makefile.kmk
@@ -81,6 +81,8 @@ else
  include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk
  ifdef VBOX_WITH_VRDP
   include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk
+ else ifdef VBOX_WITH_VRDP_RDESKTOP
+  include $(PATH_SUB_CURRENT)/RDP/client-1.8.3/Makefile.kmk
  endif
  if defined(VBOX_WITH_CROGL) || defined(VBOX_WITH_HGSMI) || defined(VBOX_WITH_HGCM)
   include $(PATH_SUB_CURRENT)/GuestHost/Makefile.kmk
diff --git a/src/VBox/RDP/client-1.8.3/Makefile.kmk b/src/VBox/RDP/client-1.8.3/Makefile.kmk
index dc9234e..1d427a2 100644
--- a/src/VBox/RDP/client-1.8.3/Makefile.kmk
+++ b/src/VBox/RDP/client-1.8.3/Makefile.kmk
@@ -287,6 +287,7 @@ rdesktop-src_SOURCES = \
 	$(PATH_ROOT)/include/iprt/errno.h=>include/iprt/errno.h \
 	$(PATH_ROOT)/include/iprt/file.h=>include/iprt/file.h \
 	$(PATH_ROOT)/include/iprt/fs.h=>include/iprt/fs.h \
+	$(PATH_ROOT)/include/iprt/latin1.h=>include/iprt/latin1.h \
 	$(PATH_ROOT)/include/iprt/linux/sysfs.h=>include/iprt/linux/sysfs.h \
 	$(PATH_ROOT)/include/iprt/list.h=>include/iprt/list.h \
 	$(PATH_ROOT)/include/iprt/log.h=>include/iprt/log.h \
@@ -308,6 +309,7 @@ rdesktop-src_SOURCES = \
 	$(PATH_ROOT)/include/iprt/thread.h=>include/iprt/thread.h \
 	$(PATH_ROOT)/include/iprt/types.h=>include/iprt/types.h \
 	$(PATH_ROOT)/include/iprt/uni.h=>include/iprt/uni.h \
+	$(PATH_ROOT)/include/iprt/utf16.h=>include/iprt/utf16.h \
 	$(PATH_ROOT)/include/iprt/x86.h=>include/iprt/x86.h \
 	$(PATH_ROOT)/include/VBox/cdefs.h=>include/VBox/cdefs.h \
 	$(PATH_ROOT)/include/VBox/err.h=>include/VBox/err.h \
diff --git a/src/VBox/Runtime/Makefile.kmk b/src/VBox/Runtime/Makefile.kmk
index c6fe664..bd8892f 100644
--- a/src/VBox/Runtime/Makefile.kmk
+++ b/src/VBox/Runtime/Makefile.kmk
@@ -1189,7 +1189,7 @@ RuntimeR3_SOURCES.haiku = \
  	generic/RTSemEventMultiWait-2-ex-generic.cpp \
  	generic/RTSemEventMultiWaitNoResume-2-ex-generic.cpp \
 	generic/sched-generic.cpp \
-	generic/semrw-$(if-expr defined(VBOX_WITH_LOCKLESS_SEMRW),ockless-,)generic.cpp \
+	generic/semrw-$(if-expr defined(VBOX_WITH_LOCKLESS_SEMRW),lockless-,)generic.cpp \
 	generic/timer-generic.cpp \
 	generic/utf16locale-generic.cpp \
 	generic/uuid-generic.cpp\
@@ -1746,6 +1746,7 @@ RuntimeR0_SOURCES      := \
 	common/time/timesup.cpp \
 	generic/RTAssertShouldPanic-generic.cpp \
 	generic/critsect-generic.cpp \
+	generic/critsectrw-generic.cpp \
 	\
 	$(RuntimeNoCrt_SOURCES)
 
diff --git a/src/VBox/Runtime/common/ldr/ldrEx.cpp b/src/VBox/Runtime/common/ldr/ldrEx.cpp
index d85a42b..a1b319b 100644
--- a/src/VBox/Runtime/common/ldr/ldrEx.cpp
+++ b/src/VBox/Runtime/common/ldr/ldrEx.cpp
@@ -729,3 +729,26 @@ DECLHIDDEN(int) rtLdrReadAt(RTLDRMOD hLdrMod, void *pvBuf, uint32_t iDbgInfo, RT
     return pMod->pReader->pfnRead(pMod->pReader, pvBuf, cb, off);
 }
 
+
+/**
+ * Translates a RTLDRARCH value to a string.
+ *
+ * @returns Name corresponding to @a enmArch
+ * @param   enmArch             The value to name.
+ */
+DECLHIDDEN(const char *) rtLdrArchName(RTLDRARCH enmArch)
+{
+    switch (enmArch)
+    {
+        case RTLDRARCH_INVALID:     return "INVALID";
+        case RTLDRARCH_WHATEVER:    return "WHATEVER";
+        case RTLDRARCH_HOST:        return "HOST";
+        case RTLDRARCH_AMD64:       return "AMD64";
+        case RTLDRARCH_X86_32:      return "X86_32";
+
+        case RTLDRARCH_END:
+        case RTLDRARCH_32BIT_HACK:
+            break;
+    }
+    return "UNKNOWN";
+}
diff --git a/src/VBox/Runtime/common/ldr/ldrPE.cpp b/src/VBox/Runtime/common/ldr/ldrPE.cpp
index ad983fd..c69c5c3 100644
--- a/src/VBox/Runtime/common/ldr/ldrPE.cpp
+++ b/src/VBox/Runtime/common/ldr/ldrPE.cpp
@@ -3622,6 +3622,18 @@ static int rtldrPEValidateDirectoriesAndRememberStuff(PRTLDRMODPE pModPe, const
 }
 
 
+static const char *rtldrPEGetArchName(uint16_t uMachine)
+{
+    switch (uMachine)
+    {
+        case IMAGE_FILE_MACHINE_I386:   return "X86_32";
+        case IMAGE_FILE_MACHINE_AMD64:  return "AMD64";
+        default:                        return "Unknown";
+    }
+}
+
+
+
 /**
  * Open a PE image.
  *
@@ -3658,7 +3670,8 @@ int rtldrPEOpen(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, RTFOFF
              && !(fFlags & RTLDR_O_WHATEVER_ARCH)) )
     {
         if (!(fFlags & RTLDR_O_IGNORE_ARCH_IF_NO_CODE))
-            return VERR_LDR_ARCH_MISMATCH;
+            return RTErrInfoSetF(pErrInfo, VERR_LDR_ARCH_MISMATCH, "Image is for '%s', only accepting images for '%s'.",
+                                 rtldrPEGetArchName(FileHdr.Machine), rtLdrArchName(enmArch));
         fArchNoCodeCheckPending = true;
     }
 
@@ -3675,7 +3688,9 @@ int rtldrPEOpen(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, RTFOFF
     if (RT_FAILURE(rc))
         return rc;
     if (fArchNoCodeCheckPending && OptHdr.SizeOfCode != 0)
-        return VERR_LDR_ARCH_MISMATCH;
+        return RTErrInfoSetF(pErrInfo, VERR_LDR_ARCH_MISMATCH,
+                             "Image is for '%s' and contains code (%#x), only accepting images for '%s' with code.",
+                             rtldrPEGetArchName(FileHdr.Machine), OptHdr.SizeOfCode, rtLdrArchName(enmArch));
 
     /*
      * Read and validate section headers.
diff --git a/src/VBox/Runtime/common/misc/sg.cpp b/src/VBox/Runtime/common/misc/sg.cpp
index a257459..00ccf2c 100644
--- a/src/VBox/Runtime/common/misc/sg.cpp
+++ b/src/VBox/Runtime/common/misc/sg.cpp
@@ -48,12 +48,12 @@ static void *sgBufGet(PRTSGBUF pSgBuf, size_t *pcbData)
     }
 
 #ifndef RDESKTOP
-    AssertReleaseMsg(      pSgBuf->cbSegLeft <= 32 * _1M
-                     &&    (uintptr_t)pSgBuf->pvSegCur                     >= (uintptr_t)pSgBuf->paSegs[pSgBuf->idxSeg].pvSeg
-                     &&    (uintptr_t)pSgBuf->pvSegCur + pSgBuf->cbSegLeft <= (uintptr_t)pSgBuf->paSegs[pSgBuf->idxSeg].pvSeg + pSgBuf->paSegs[pSgBuf->idxSeg].cbSeg,
-                     ("pSgBuf->idxSeg=%d pSgBuf->cSegs=%d pSgBuf->pvSegCur=%p pSgBuf->cbSegLeft=%zd pSgBuf->paSegs[%d].pvSeg=%p pSgBuf->paSegs[%d].cbSeg=%zd\n",
-                      pSgBuf->idxSeg, pSgBuf->cSegs, pSgBuf->pvSegCur, pSgBuf->cbSegLeft,
-                      pSgBuf->idxSeg, pSgBuf->paSegs[pSgBuf->idxSeg].pvSeg, pSgBuf->idxSeg, pSgBuf->paSegs[pSgBuf->idxSeg].cbSeg));
+    AssertMsg(      pSgBuf->cbSegLeft <= 128 * _1M
+              &&    (uintptr_t)pSgBuf->pvSegCur                     >= (uintptr_t)pSgBuf->paSegs[pSgBuf->idxSeg].pvSeg
+              &&    (uintptr_t)pSgBuf->pvSegCur + pSgBuf->cbSegLeft <= (uintptr_t)pSgBuf->paSegs[pSgBuf->idxSeg].pvSeg + pSgBuf->paSegs[pSgBuf->idxSeg].cbSeg,
+              ("pSgBuf->idxSeg=%d pSgBuf->cSegs=%d pSgBuf->pvSegCur=%p pSgBuf->cbSegLeft=%zd pSgBuf->paSegs[%d].pvSeg=%p pSgBuf->paSegs[%d].cbSeg=%zd\n",
+               pSgBuf->idxSeg, pSgBuf->cSegs, pSgBuf->pvSegCur, pSgBuf->cbSegLeft,
+               pSgBuf->idxSeg, pSgBuf->paSegs[pSgBuf->idxSeg].pvSeg, pSgBuf->idxSeg, pSgBuf->paSegs[pSgBuf->idxSeg].cbSeg));
 #endif
 
     cbData = RT_MIN(*pcbData, pSgBuf->cbSegLeft);
diff --git a/src/VBox/Runtime/generic/critsectrw-generic.cpp b/src/VBox/Runtime/generic/critsectrw-generic.cpp
index 54c3ac6..6e68f87 100644
--- a/src/VBox/Runtime/generic/critsectrw-generic.cpp
+++ b/src/VBox/Runtime/generic/critsectrw-generic.cpp
@@ -66,6 +66,11 @@ RTDECL(int) RTCritSectRwInitEx(PRTCRITSECTRW pThis, uint32_t fFlags,
      */
     pThis->u32Magic         = RTCRITSECTRW_MAGIC_DEAD;
     pThis->fNeedReset       = false;
+#ifdef IN_RING0
+    pThis->fFlags           = (uint16_t)(fFlags | RTCRITSECT_FLAGS_RING0);
+#else
+    pThis->fFlags           = (uint16_t)(fFlags & ~RTCRITSECT_FLAGS_RING0);
+#endif
     pThis->u64State         = 0;
     pThis->hNativeWriter    = NIL_RTNATIVETHREAD;
     pThis->cWriterReads     = 0;
@@ -137,6 +142,11 @@ RTDECL(uint32_t) RTCritSectRwSetSubClass(PRTCRITSECTRW pThis, uint32_t uSubClass
 {
     AssertPtrReturn(pThis, RTLOCKVAL_SUB_CLASS_INVALID);
     AssertReturn(pThis->u32Magic == RTCRITSECTRW_MAGIC, RTLOCKVAL_SUB_CLASS_INVALID);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 #ifdef RTCRITSECTRW_STRICT
     AssertReturn(!(pThis->fFlags & RTCRITSECT_FLAGS_NOP), RTLOCKVAL_SUB_CLASS_INVALID);
 
@@ -157,6 +167,11 @@ static int rtCritSectRwEnterShared(PRTCRITSECTRW pThis, PCRTLOCKVALSRCPOS pSrcPo
      */
     AssertPtr(pThis);
     AssertReturn(pThis->u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 
 #ifdef RTCRITSECTRW_STRICT
     RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt();
@@ -256,13 +271,15 @@ static int rtCritSectRwEnterShared(PRTCRITSECTRW pThis, PCRTLOCKVALSRCPOS pSrcPo
                     rc = RTLockValidatorRecSharedCheckBlocking(pThis->pValidatorRead, hThreadSelf, pSrcPos, true,
                                                                RT_INDEFINITE_WAIT, RTTHREADSTATE_RW_READ, false);
                     if (RT_SUCCESS(rc))
-#else
+#elif defined(IN_RING3)
                     RTTHREAD hThreadSelf = RTThreadSelf();
                     RTThreadBlocking(hThreadSelf, RTTHREADSTATE_RW_READ, false);
 #endif
                     {
                         rc = RTSemEventMultiWait(pThis->hEvtRead, RT_INDEFINITE_WAIT);
+#ifdef IN_RING3
                         RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_RW_READ);
+#endif
                         if (pThis->u32Magic != RTCRITSECTRW_MAGIC)
                             return VERR_SEM_DESTROYED;
                     }
@@ -387,6 +404,11 @@ RTDECL(int) RTCritSectRwLeaveShared(PRTCRITSECTRW pThis)
      */
     AssertPtr(pThis);
     AssertReturn(pThis->u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 
     /*
      * Check the direction and take action accordingly.
@@ -460,6 +482,11 @@ static int rtCritSectRwEnterExcl(PRTCRITSECTRW pThis, PCRTLOCKVALSRCPOS pSrcPos,
      */
     AssertPtr(pThis);
     AssertReturn(pThis->u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 
 #ifdef RTCRITSECTRW_STRICT
     RTTHREAD hThreadSelf = NIL_RTTHREAD;
@@ -583,13 +610,15 @@ static int rtCritSectRwEnterExcl(PRTCRITSECTRW pThis, PCRTLOCKVALSRCPOS pSrcPos,
             rc = RTLockValidatorRecExclCheckBlocking(pThis->pValidatorWrite, hThreadSelf, pSrcPos, true,
                                                      RT_INDEFINITE_WAIT, RTTHREADSTATE_RW_WRITE, false);
             if (RT_SUCCESS(rc))
-#else
+#elif defined(IN_RING3)
             RTTHREAD hThreadSelf = RTThreadSelf();
             RTThreadBlocking(hThreadSelf, RTTHREADSTATE_RW_WRITE, false);
 #endif
             {
                 rc = RTSemEventWait(pThis->hEvtWrite, RT_INDEFINITE_WAIT);
+#ifdef IN_RING3
                 RTThreadUnblocked(hThreadSelf, RTTHREADSTATE_RW_WRITE);
+#endif
                 if (pThis->u32Magic != RTCRITSECTRW_MAGIC)
                     return VERR_SEM_DESTROYED;
             }
@@ -681,6 +710,11 @@ RTDECL(int) RTCritSectRwLeaveExcl(PRTCRITSECTRW pThis)
      */
     AssertPtr(pThis);
     AssertReturn(pThis->u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 
     RTNATIVETHREAD hNativeSelf = RTThreadNativeSelf();
     RTNATIVETHREAD hNativeWriter;
@@ -772,6 +806,11 @@ RTDECL(bool) RTCritSectRwIsWriteOwner(PRTCRITSECTRW pThis)
      */
     AssertPtr(pThis);
     AssertReturn(pThis->u32Magic == RTCRITSECTRW_MAGIC, false);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 
     /*
      * Check ownership.
@@ -791,6 +830,11 @@ RTDECL(bool) RTCritSectRwIsReadOwner(PRTCRITSECTRW pThis, bool fWannaHear)
      */
     AssertPtr(pThis);
     AssertReturn(pThis->u32Magic == RTCRITSECTRW_MAGIC, false);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 
     /*
      * Inspect the state.
@@ -890,6 +934,11 @@ RTDECL(int) RTCritSectRwDelete(PRTCRITSECTRW pThis)
     //Assert(pThis->cNestings == 0);
     //Assert(pThis->cLockers == -1);
     Assert(pThis->hNativeWriter == NIL_RTNATIVETHREAD);
+#ifdef IN_RING0
+    Assert(pThis->fFlags & RTCRITSECT_FLAGS_RING0);
+#else
+    Assert(!(pThis->fFlags & RTCRITSECT_FLAGS_RING0));
+#endif
 
     /*
      * Invalidate the structure and free the semaphores.
@@ -908,8 +957,10 @@ RTDECL(int) RTCritSectRwDelete(PRTCRITSECTRW pThis)
     int rc1 = RTSemEventDestroy(hEvtWrite);     AssertRC(rc1);
     int rc2 = RTSemEventMultiDestroy(hEvtRead); AssertRC(rc2);
 
+#ifndef IN_RING0
     RTLockValidatorRecSharedDestroy(&pThis->pValidatorRead);
     RTLockValidatorRecExclDestroy(&pThis->pValidatorWrite);
+#endif
 
     return RT_SUCCESS(rc1) ? rc2 : rc1;
 }
diff --git a/src/VBox/Runtime/generic/http-curl.cpp b/src/VBox/Runtime/generic/http-curl.cpp
index e1ce7b6..848feca 100644
--- a/src/VBox/Runtime/generic/http-curl.cpp
+++ b/src/VBox/Runtime/generic/http-curl.cpp
@@ -2077,7 +2077,7 @@ static int rtHttpGetCalcStatus(PRTHTTPINTERNAL pThis, int rcCurl)
         {
             case CURLE_URL_MALFORMAT:
             case CURLE_COULDNT_RESOLVE_HOST:
-                rc = VERR_HTTP_NOT_FOUND;
+                rc = VERR_HTTP_HOST_NOT_FOUND;
                 break;
             case CURLE_COULDNT_CONNECT:
                 rc = VERR_HTTP_COULDNT_CONNECT;
diff --git a/src/VBox/Runtime/include/internal/ldr.h b/src/VBox/Runtime/include/internal/ldr.h
index 356f511..e15bbc7 100644
--- a/src/VBox/Runtime/include/internal/ldr.h
+++ b/src/VBox/Runtime/include/internal/ldr.h
@@ -496,6 +496,7 @@ int rtldrMachoOpen(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, RTF
 
 
 DECLHIDDEN(int) rtLdrReadAt(RTLDRMOD hLdrMod, void *pvBuf, uint32_t iDbgInfo, RTFOFF off, size_t cb);
+DECLHIDDEN(const char *) rtLdrArchName(RTLDRARCH enmArch);
 
 RT_C_DECLS_END
 
diff --git a/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp b/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
index 033dad0..4978665 100644
--- a/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
+++ b/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
@@ -1160,7 +1160,7 @@ RTR0DECL(uint32_t) RTR0DbgKrnlInfoRelease(RTDBGKRNLINFO hKrnlInfo)
 }
 
 
-RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszStructure,
+RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszModule, const char *pszStructure,
                                          const char *pszMember, size_t *poffMember)
 {
     RTDBGKRNLINFOINT *pThis = hKrnlInfo;
diff --git a/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c b/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c
index 5fe1354..3379c30 100644
--- a/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c
+++ b/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c
@@ -134,6 +134,33 @@ static void rtR0DbgKrnlInfoModRelease(modctl_t *pMod, ctf_file_t *pCTF)
 }
 
 
+/**
+ * Helper for opening the specified kernel module.
+ *
+ * @param pszModule         The name of the module.
+ * @param ppMod             Where to store the module handle.
+ * @param ppCtf             Where to store the module's CTF handle.
+ *
+ * @returns Pointer to the CTF structure for the module.
+ */
+static int rtR0DbgKrnlInfoModRetainEx(const char *pszModule, modctl_t **ppMod, ctf_file_t **ppCtf)
+{
+    char *pszMod = RTStrDup(pszModule);
+    if (RT_LIKELY(pszMod))
+    {
+        int rc = rtR0DbgKrnlInfoModRetain(pszMod, ppMod, ppCtf);
+        RTStrFree(pszMod);
+        if (RT_SUCCESS(rc))
+        {
+            AssertPtrReturn(*ppMod, VERR_INTERNAL_ERROR_2);
+            AssertPtrReturn(*ppCtf, VERR_INTERNAL_ERROR_3);
+        }
+        return rc;
+    }
+    return VERR_NO_MEMORY;
+}
+
+
 RTR0DECL(int) RTR0DbgKrnlInfoOpen(PRTDBGKRNLINFO phKrnlInfo, uint32_t fFlags)
 {
     AssertReturn(fFlags == 0, VERR_INVALID_PARAMETER);
@@ -197,7 +224,7 @@ RTR0DECL(uint32_t) RTR0DbgKrnlInfoRelease(RTDBGKRNLINFO hKrnlInfo)
 }
 
 
-RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszStructure,
+RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszModule, const char *pszStructure,
                                          const char *pszMember, size_t *poffMember)
 {
     PRTDBGKRNLINFOINT pThis = hKrnlInfo;
@@ -209,19 +236,37 @@ RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *ps
     if (g_frtSolInitDone)
         RT_ASSERT_PREEMPTIBLE();
 
+    ctf_file_t *pCtf = NULL;
+    modctl_t   *pMod = NULL;
+    if (!pszModule)
+    {
+        pCtf = pThis->pGenUnixCTF;
+        pMod = pThis->pGenUnixMod;
+    }
+    else
+    {
+        int rc2 = rtR0DbgKrnlInfoModRetainEx(pszModule, &pMod, &pCtf);
+        if (RT_FAILURE(rc2))
+            return rc2;
+        Assert(pMod);
+        Assert(pCtf);
+    }
+
     int rc = VERR_NOT_FOUND;
-    ctf_id_t TypeIdent = ctf_lookup_by_name(pThis->pGenUnixCTF, pszStructure);
+    ctf_id_t TypeIdent = ctf_lookup_by_name(pCtf, pszStructure);
     if (TypeIdent != CTF_ERR)
     {
         ctf_membinfo_t MemberInfo;
         RT_ZERO(MemberInfo);
-        if (ctf_member_info(pThis->pGenUnixCTF, TypeIdent, pszMember, &MemberInfo) != CTF_ERR)
+        if (ctf_member_info(pCtf, TypeIdent, pszMember, &MemberInfo) != CTF_ERR)
         {
             *poffMember = (MemberInfo.ctm_offset >> 3);
-            return VINF_SUCCESS;
+            rc = VINF_SUCCESS;
         }
     }
 
+    if (pszModule)
+        rtR0DbgKrnlInfoModRelease(pMod, pCtf);
     return rc;
 }
 
@@ -246,3 +291,49 @@ RTR0DECL(int) RTR0DbgKrnlInfoQuerySymbol(RTDBGKRNLINFO hKrnlInfo, const char *ps
     return VERR_SYMBOL_NOT_FOUND;
 }
 
+
+RTR0DECL(int) RTR0DbgKrnlInfoQuerySize(RTDBGKRNLINFO hKrnlInfo, const char *pszModule, const char *pszType, size_t *pcbType)
+{
+    PRTDBGKRNLINFOINT pThis = hKrnlInfo;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertMsgReturn(pThis->u32Magic == RTDBGKRNLINFO_MAGIC, ("%p: u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_HANDLE);
+    AssertPtrReturn(pszType, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pcbType, VERR_INVALID_PARAMETER);
+    if (g_frtSolInitDone)
+        RT_ASSERT_PREEMPTIBLE();
+
+    modctl_t   *pMod = NULL;
+    ctf_file_t *pCtf = NULL;
+    if (!pszModule)
+    {
+        pCtf = pThis->pGenUnixCTF;
+        pMod = pThis->pGenUnixMod;
+    }
+    else
+    {
+        int rc2 = rtR0DbgKrnlInfoModRetainEx(pszModule, &pMod, &pCtf);
+        if (RT_FAILURE(rc2))
+            return rc2;
+        Assert(pMod);
+        Assert(pCtf);
+    }
+
+    int rc = VERR_NOT_FOUND;
+    ctf_id_t TypeIdent = ctf_lookup_by_name(pCtf, pszType);
+    if (TypeIdent != CTF_ERR)
+    {
+        ssize_t cbType = ctf_type_size(pCtf, TypeIdent);
+        if (cbType > 0)
+        {
+            *pcbType = cbType;
+            rc = VINF_SUCCESS;
+        }
+        else
+            rc = VERR_WRONG_TYPE;
+    }
+
+    if (pszModule)
+        rtR0DbgKrnlInfoModRelease(pMod, pCtf);
+    return rc;
+}
+
diff --git a/src/VBox/Runtime/r0drv/solaris/initterm-r0drv-solaris.c b/src/VBox/Runtime/r0drv/solaris/initterm-r0drv-solaris.c
index 4562920..7f05eef 100644
--- a/src/VBox/Runtime/r0drv/solaris/initterm-r0drv-solaris.c
+++ b/src/VBox/Runtime/r0drv/solaris/initterm-r0drv-solaris.c
@@ -117,49 +117,49 @@ DECLHIDDEN(int) rtR0InitNative(void)
         /*
          * Mandatory: Preemption offsets.
          */
-        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "cpu_t", "cpu_runrun", &g_offrtSolCpuPreempt);
+        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "cpu_t", "cpu_runrun", &g_offrtSolCpuPreempt);
         if (RT_FAILURE(rc))
         {
             cmn_err(CE_NOTE, "Failed to find cpu_t::cpu_runrun!\n");
             goto errorbail;
         }
 
-        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "cpu_t", "cpu_kprunrun", &g_offrtSolCpuForceKernelPreempt);
+        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "cpu_t", "cpu_kprunrun", &g_offrtSolCpuForceKernelPreempt);
         if (RT_FAILURE(rc))
         {
             cmn_err(CE_NOTE, "Failed to find cpu_t::cpu_kprunrun!\n");
             goto errorbail;
         }
 
-        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_preempt", &g_offrtSolThreadPreempt);
+        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_preempt", &g_offrtSolThreadPreempt);
         if (RT_FAILURE(rc))
         {
             cmn_err(CE_NOTE, "Failed to find kthread_t::t_preempt!\n");
             goto errorbail;
         }
 
-        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_did", &g_offrtSolThreadId);
+        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_did", &g_offrtSolThreadId);
         if (RT_FAILURE(rc))
         {
             cmn_err(CE_NOTE, "Failed to find kthread_t::t_did!\n");
             goto errorbail;
         }
 
-        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_intr", &g_offrtSolThreadIntrThread);
+        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_intr", &g_offrtSolThreadIntrThread);
         if (RT_FAILURE(rc))
         {
             cmn_err(CE_NOTE, "Failed to find kthread_t::t_intr!\n");
             goto errorbail;
         }
 
-        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_lockp", &g_offrtSolThreadLock);
+        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_lockp", &g_offrtSolThreadLock);
         if (RT_FAILURE(rc))
         {
             cmn_err(CE_NOTE, "Failed to find kthread_t::t_lockp!\n");
             goto errorbail;
         }
 
-        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_procp", &g_offrtSolThreadProc);
+        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_procp", &g_offrtSolThreadProc);
         if (RT_FAILURE(rc))
         {
             cmn_err(CE_NOTE, "Failed to find kthread_t::t_procp!\n");
diff --git a/src/VBox/Runtime/r3/fileio.cpp b/src/VBox/Runtime/r3/fileio.cpp
index 4dd180b..2be0f17 100644
--- a/src/VBox/Runtime/r3/fileio.cpp
+++ b/src/VBox/Runtime/r3/fileio.cpp
@@ -130,15 +130,25 @@ int rtFileRecalcAndValidateFlags(uint64_t *pfOpen)
             fOpen |= g_fOpenReadWriteSet;
             fOpen &= ~g_fOpenReadWriteMask;
             break;
+#ifdef RT_OS_WINDOWS
+        case RTFILE_O_ATTR_ONLY:
+            if (fOpen & RTFILE_O_ACCESS_ATTR_MASK)
+                break;
+#endif
         default:
-            AssertMsgFailed(("Invalid RW value, fOpen=%#llx\n", fOpen));
+            AssertMsgFailed(("Invalid access mode value, fOpen=%#llx\n", fOpen));
             return VERR_INVALID_PARAMETER;
     }
 
     /*
      * Validate                                                                                                                                       .
      */
+#ifdef RT_OS_WINDOWS
+    AssertMsgReturn((fOpen & RTFILE_O_ACCESS_MASK) || (fOpen & RTFILE_O_ACCESS_ATTR_MASK),
+                    ("Missing RTFILE_O_READ/WRITE/ACCESS_ATTR: fOpen=%#llx\n", fOpen), VERR_INVALID_PARAMETER);
+#else
     AssertMsgReturn(fOpen & RTFILE_O_ACCESS_MASK, ("Missing RTFILE_O_READ/WRITE: fOpen=%#llx\n", fOpen), VERR_INVALID_PARAMETER);
+#endif
 #if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
     AssertMsgReturn(!(fOpen & (~(uint64_t)RTFILE_O_VALID_MASK | RTFILE_O_NON_BLOCK)), ("%#llx\n", fOpen), VERR_INVALID_PARAMETER);
 #else
diff --git a/src/VBox/Runtime/r3/linux/sched-linux.cpp b/src/VBox/Runtime/r3/linux/sched-linux.cpp
index b0b2847..358ffb3 100644
--- a/src/VBox/Runtime/r3/linux/sched-linux.cpp
+++ b/src/VBox/Runtime/r3/linux/sched-linux.cpp
@@ -324,7 +324,7 @@ static int rtSchedRunThread(void *(*pfnThread)(void *pvArg), void *pvArg)
         do
         {
             rc = pthread_join(Thread, &pvRet);
-        } while (errno == EINTR);
+        } while (rc == EINTR);
         if (rc)
             return RTErrConvertFromErrno(rc);
         return (int)(uintptr_t)pvRet;
diff --git a/src/VBox/Runtime/r3/posix/sched-posix.cpp b/src/VBox/Runtime/r3/posix/sched-posix.cpp
index 5d6e7b8..8dcbcef 100644
--- a/src/VBox/Runtime/r3/posix/sched-posix.cpp
+++ b/src/VBox/Runtime/r3/posix/sched-posix.cpp
@@ -400,7 +400,7 @@ static int rtSchedCreateThread(void *(*pfnThread)(void *pvArg), void *pvArg)
                     do
                     {
                         rc = pthread_join(Thread, &pvRet);
-                    } while (errno == EINTR);
+                    } while (rc == EINTR);
                     if (rc)
                         return RTErrConvertFromErrno(rc);
                     return (int)(uintptr_t)pvRet;
diff --git a/src/VBox/Runtime/r3/win/RTSystemQueryOSInfo-win.cpp b/src/VBox/Runtime/r3/win/RTSystemQueryOSInfo-win.cpp
index c7a9c1f..39d7f7f 100644
--- a/src/VBox/Runtime/r3/win/RTSystemQueryOSInfo-win.cpp
+++ b/src/VBox/Runtime/r3/win/RTSystemQueryOSInfo-win.cpp
@@ -215,9 +215,13 @@ static int rtSystemWinQueryOSVersion(RTSYSOSINFO enmInfo, char *pszInfo, size_t
                 }
                 case kRTWinOSType_2008:         strcpy(szTmp, "Windows 2008"); break;
                 case kRTWinOSType_7:            strcpy(szTmp, "Windows 7"); break;
+                case kRTWinOSType_2008R2:       strcpy(szTmp, "Windows 2008 R2"); break;
                 case kRTWinOSType_8:            strcpy(szTmp, "Windows 8"); break;
+                case kRTWinOSType_2012:         strcpy(szTmp, "Windows 2012"); break;
                 case kRTWinOSType_81:           strcpy(szTmp, "Windows 8.1"); break;
+                case kRTWinOSType_2012R2:       strcpy(szTmp, "Windows 2012 R2"); break;
                 case kRTWinOSType_10:           strcpy(szTmp, "Windows 10"); break;
+                case kRTWinOSType_2016:         strcpy(szTmp, "Windows 2016"); break;
 
                 case kRTWinOSType_NT_UNKNOWN:
                     RTStrPrintf(szTmp, sizeof(szTmp), "Unknown NT v%u.%u",
diff --git a/src/VBox/Runtime/r3/win/fileio-win.cpp b/src/VBox/Runtime/r3/win/fileio-win.cpp
index 2f41236..5296093 100644
--- a/src/VBox/Runtime/r3/win/fileio-win.cpp
+++ b/src/VBox/Runtime/r3/win/fileio-win.cpp
@@ -212,6 +212,13 @@ RTR3DECL(int) RTFileOpen(PRTFILE pFile, const char *pszFilename, uint64_t fOpen)
                             ? FILE_GENERIC_READ | (FILE_GENERIC_WRITE & ~FILE_WRITE_DATA)
                             : FILE_GENERIC_READ | FILE_GENERIC_WRITE;
             break;
+        case RTFILE_O_ATTR_ONLY:
+            if (fOpen & RTFILE_O_ACCESS_ATTR_MASK)
+            {
+                dwDesiredAccess = 0;
+                break;
+            }
+            /* fall thru */
         default:
             AssertMsgFailed(("Impossible fOpen=%#llx\n", fOpen));
             return VERR_INVALID_PARAMETER;
diff --git a/src/VBox/Runtime/r3/win/init-win.cpp b/src/VBox/Runtime/r3/win/init-win.cpp
index 1c1e53c..f4e1404 100644
--- a/src/VBox/Runtime/r3/win/init-win.cpp
+++ b/src/VBox/Runtime/r3/win/init-win.cpp
@@ -155,18 +155,38 @@ static RTWINOSTYPE rtR3InitWinSimplifiedVersion(OSVERSIONINFOEXW const *pOSInfoE
         }
         else if (   dwMajorVersion == 6
                  && dwMinorVersion == 1)
-            enmVer = kRTWinOSType_7;
+        {
+            if (bProductType != VER_NT_WORKSTATION)
+                enmVer = kRTWinOSType_2008R2;
+            else
+                enmVer = kRTWinOSType_7;
+        }
         else if (   dwMajorVersion == 6
                  && dwMinorVersion == 2)
-            enmVer = kRTWinOSType_8;
+        {
+            if (bProductType != VER_NT_WORKSTATION)
+                enmVer = kRTWinOSType_2012;
+            else
+                enmVer = kRTWinOSType_8;
+        }
         else if (   dwMajorVersion == 6
                  && dwMinorVersion == 3)
-            enmVer = kRTWinOSType_81;
+        {
+            if (bProductType != VER_NT_WORKSTATION)
+               enmVer = kRTWinOSType_2012R2;
+            else
+                enmVer = kRTWinOSType_81;
+        }
         else if (   (   dwMajorVersion == 6
                      && dwMinorVersion == 4)
                  || (   dwMajorVersion == 10
                      && dwMinorVersion == 0))
-            enmVer = kRTWinOSType_10;
+        {
+            if (bProductType != VER_NT_WORKSTATION)
+                enmVer = kRTWinOSType_2016;
+            else
+                enmVer = kRTWinOSType_10;
+        }
         else
             enmVer = kRTWinOSType_NT_UNKNOWN;
     }
diff --git a/src/VBox/Runtime/r3/win/internal-r3-win.h b/src/VBox/Runtime/r3/win/internal-r3-win.h
index e69a49b..3236bc7 100644
--- a/src/VBox/Runtime/r3/win/internal-r3-win.h
+++ b/src/VBox/Runtime/r3/win/internal-r3-win.h
@@ -58,15 +58,20 @@ typedef enum RTWINOSTYPE
     kRTWinOSType_NT31       = kRTWinOSType_NTFIRST,
     kRTWinOSType_NT351,
     kRTWinOSType_NT4,
-    kRTWinOSType_2K,
-    kRTWinOSType_XP,
-    kRTWinOSType_2003,
-    kRTWinOSType_VISTA,
-    kRTWinOSType_2008,
-    kRTWinOSType_7,
-    kRTWinOSType_8,
-    kRTWinOSType_81,
-    kRTWinOSType_10,
+    kRTWinOSType_2K,                        /* 5.0 */
+    kRTWinOSType_XP,                        /* 5.1 */
+    kRTWinOSType_XP64,                      /* 5.2, workstation */
+    kRTWinOSType_2003,                      /* 5.2 */
+    kRTWinOSType_VISTA,                     /* 6.0, workstation */
+    kRTWinOSType_2008,                      /* 6.0, server */
+    kRTWinOSType_7,                         /* 6.1, workstation */
+    kRTWinOSType_2008R2,                    /* 6.1, server */
+    kRTWinOSType_8,                         /* 6.2, workstation */
+    kRTWinOSType_2012,                      /* 6.2, server */
+    kRTWinOSType_81,                        /* 6.3, workstation */
+    kRTWinOSType_2012R2,                    /* 6.3, server */
+    kRTWinOSType_10,                        /* 10.0, workstation */
+    kRTWinOSType_2016,                      /* 10.0, server */
     kRTWinOSType_NT_UNKNOWN = 199,
     kRTWinOSType_NT_LAST    = kRTWinOSType_UNKNOWN
 } RTWINOSTYPE;
diff --git a/src/VBox/Runtime/testcase/tstRTR0DbgKrnlInfo.cpp b/src/VBox/Runtime/testcase/tstRTR0DbgKrnlInfo.cpp
index 04cfe42..fab18e6 100644
--- a/src/VBox/Runtime/testcase/tstRTR0DbgKrnlInfo.cpp
+++ b/src/VBox/Runtime/testcase/tstRTR0DbgKrnlInfo.cpp
@@ -83,10 +83,10 @@ DECLEXPORT(int) TSTR0DbgKrnlInfoSrvReqHandler(PSUPDRVSESSION pSession, uint32_t
             RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoOpen(&hKrnlInfo, 0), VINF_SUCCESS);
 
             size_t offMemb;
-            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(NULL, "Test", "Test", &offMemb), VERR_INVALID_HANDLE);
-            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(hKrnlInfo, NULL, "Test", &offMemb), VERR_INVALID_PARAMETER);
-            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(hKrnlInfo, "Test", NULL, &offMemb), VERR_INVALID_PARAMETER);
-            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(hKrnlInfo, "Test", "Test", NULL), VERR_INVALID_PARAMETER);
+            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(NULL, NULL, "Test", "Test", &offMemb), VERR_INVALID_HANDLE);
+            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(hKrnlInfo, NULL, NULL, "Test", &offMemb), VERR_INVALID_PARAMETER);
+            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(hKrnlInfo, NULL, "Test", NULL, &offMemb), VERR_INVALID_PARAMETER);
+            RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQueryMember(hKrnlInfo, NULL, "Test", "Test", NULL), VERR_INVALID_PARAMETER);
 
             void *pvSymbol;
             RTR0TESTR0_CHECK_RC_BREAK(RTR0DbgKrnlInfoQuerySymbol(NULL, "Test", "Test", &pvSymbol), VERR_INVALID_HANDLE);
diff --git a/src/VBox/VMM/VMMR0/GVMMR0.cpp b/src/VBox/VMM/VMMR0/GVMMR0.cpp
index 762ce78..7f89ce8 100644
--- a/src/VBox/VMM/VMMR0/GVMMR0.cpp
+++ b/src/VBox/VMM/VMMR0/GVMMR0.cpp
@@ -62,6 +62,7 @@
 
 #include <iprt/asm.h>
 #include <iprt/asm-amd64-x86.h>
+#include <iprt/critsect.h>
 #include <iprt/mem.h>
 #include <iprt/semaphore.h>
 #include <iprt/time.h>
@@ -257,19 +258,20 @@ typedef struct GVMM
     uint32_t volatile   cEMTs;
     /** The number of EMTs that have halted in GVMMR0SchedHalt. */
     uint32_t volatile   cHaltedEMTs;
-    /** Alignment padding. */
-    uint32_t            u32Alignment;
+    /** Mini lock for restricting early wake-ups to one thread. */
+    bool volatile       fDoingEarlyWakeUps;
+    bool                afPadding[3]; /**< explicit alignment padding. */
     /** When the next halted or sleeping EMT will wake up.
      * This is set to 0 when it needs recalculating and to UINT64_MAX when
      * there are no halted or sleeping EMTs in the GVMM. */
     uint64_t            uNsNextEmtWakeup;
     /** The lock used to serialize VM creation, destruction and associated events that
      * isn't performance critical. Owners may acquire the list lock. */
-    RTSEMFASTMUTEX      CreateDestroyLock;
+    RTCRITSECT          CreateDestroyLock;
     /** The lock used to serialize used list updates and accesses.
      * This indirectly includes scheduling since the scheduler will have to walk the
      * used list to examin running VMs. Owners may not acquire any other locks. */
-    RTSEMFASTMUTEX      UsedLock;
+    RTCRITSECTRW        UsedLock;
     /** The handle array.
      * The size of this array defines the maximum number of currently running VMs.
      * The first entry is unused as it represents the NIL handle. */
@@ -289,19 +291,26 @@ typedef struct GVMM
      */
     uint32_t            nsMinSleepCompany;
     /** @gcfgm{/GVMM/EarlyWakeUp1, 32-bit, 0, 100000000, 25000, ns}
-     * The limit for the first round of early wakeups, given in nano seconds.
+     * The limit for the first round of early wake-ups, given in nano seconds.
      */
     uint32_t            nsEarlyWakeUp1;
     /** @gcfgm{/GVMM/EarlyWakeUp2, 32-bit, 0, 100000000, 50000, ns}
-     * The limit for the second round of early wakeups, given in nano seconds.
+     * The limit for the second round of early wake-ups, given in nano seconds.
      */
     uint32_t            nsEarlyWakeUp2;
 
+    /** Set if we're doing early wake-ups.
+     * This reflects  nsEarlyWakeUp1 and nsEarlyWakeUp2.  */
+    bool volatile       fDoEarlyWakeUps;
+
     /** The number of entries in the host CPU array (aHostCpus). */
     uint32_t            cHostCpus;
     /** Per host CPU data (variable length). */
     GVMMHOSTCPU         aHostCpus[1];
 } GVMM;
+AssertCompileMemberAlignment(GVMM, CreateDestroyLock, 8);
+AssertCompileMemberAlignment(GVMM, UsedLock, 8);
+AssertCompileMemberAlignment(GVMM, uNsNextEmtWakeup, 8);
 /** Pointer to the GVMM instance data. */
 typedef GVMM *PGVMM;
 
@@ -376,10 +385,11 @@ GVMMR0DECL(int) GVMMR0Init(void)
     PGVMM pGVMM = (PGVMM)RTMemAllocZ(RT_UOFFSETOF(GVMM, aHostCpus[cHostCpus]));
     if (!pGVMM)
         return VERR_NO_MEMORY;
-    int rc = RTSemFastMutexCreate(&pGVMM->CreateDestroyLock);
+    int rc = RTCritSectInitEx(&pGVMM->CreateDestroyLock, 0, NIL_RTLOCKVALCLASS, RTLOCKVAL_SUB_CLASS_NONE,
+                              "GVMM-CreateDestroyLock");
     if (RT_SUCCESS(rc))
     {
-        rc = RTSemFastMutexCreate(&pGVMM->UsedLock);
+        rc = RTCritSectRwInitEx(&pGVMM->UsedLock, 0, NIL_RTLOCKVALCLASS, RTLOCKVAL_SUB_CLASS_NONE, "GVMM-UsedLock");
         if (RT_SUCCESS(rc))
         {
             pGVMM->u32Magic = GVMM_MAGIC;
@@ -426,6 +436,7 @@ GVMMR0DECL(int) GVMMR0Init(void)
                 pGVMM->nsEarlyWakeUp1    = 0;
                 pGVMM->nsEarlyWakeUp2    = 0;
             }
+            pGVMM->fDoEarlyWakeUps = pGVMM->nsEarlyWakeUp1 > 0 && pGVMM->nsEarlyWakeUp2 > 0;
 
             /* The host CPU data. */
             pGVMM->cHostCpus = cHostCpus;
@@ -490,11 +501,9 @@ GVMMR0DECL(int) GVMMR0Init(void)
             }
 
             /* bail out. */
-            RTSemFastMutexDestroy(pGVMM->UsedLock);
-            pGVMM->UsedLock = NIL_RTSEMFASTMUTEX;
+            RTCritSectRwDelete(&pGVMM->UsedLock);
         }
-        RTSemFastMutexDestroy(pGVMM->CreateDestroyLock);
-        pGVMM->CreateDestroyLock = NIL_RTSEMFASTMUTEX;
+        RTCritSectDelete(&pGVMM->CreateDestroyLock);
     }
 
     RTMemFree(pGVMM);
@@ -542,10 +551,8 @@ GVMMR0DECL(void) GVMMR0Term(void)
      * Invalidate the and free resources.
      */
     pGVMM->u32Magic = ~GVMM_MAGIC;
-    RTSemFastMutexDestroy(pGVMM->UsedLock);
-    pGVMM->UsedLock = NIL_RTSEMFASTMUTEX;
-    RTSemFastMutexDestroy(pGVMM->CreateDestroyLock);
-    pGVMM->CreateDestroyLock = NIL_RTSEMFASTMUTEX;
+    RTCritSectRwDelete(&pGVMM->UsedLock);
+    RTCritSectDelete(&pGVMM->CreateDestroyLock);
 
     pGVMM->iFreeHead = 0;
     if (pGVMM->iUsedHead)
@@ -619,14 +626,20 @@ GVMMR0DECL(int) GVMMR0SetConfig(PSUPDRVSESSION pSession, const char *pszName, ui
     else if (!strcmp(pszName, "EarlyWakeUp1"))
     {
         if (u64Value <= RT_NS_100MS)
+        {
             pGVMM->nsEarlyWakeUp1 = u64Value;
+            pGVMM->fDoEarlyWakeUps = pGVMM->nsEarlyWakeUp1 > 0 && pGVMM->nsEarlyWakeUp2 > 0;
+        }
         else
             rc = VERR_OUT_OF_RANGE;
     }
     else if (!strcmp(pszName, "EarlyWakeUp2"))
     {
         if (u64Value <= RT_NS_100MS)
+        {
             pGVMM->nsEarlyWakeUp2 = u64Value;
+            pGVMM->fDoEarlyWakeUps = pGVMM->nsEarlyWakeUp1 > 0 && pGVMM->nsEarlyWakeUp2 > 0;
+        }
         else
             rc = VERR_OUT_OF_RANGE;
     }
@@ -680,33 +693,44 @@ GVMMR0DECL(int) GVMMR0QueryConfig(PSUPDRVSESSION pSession, const char *pszName,
 
 
 /**
- * Try acquire the 'used' lock.
+ * Acquire the 'used' lock in shared mode.
+ *
+ * This prevents destruction of the VM while we're in ring-0.
  *
  * @returns IPRT status code, see RTSemFastMutexRequest.
- * @param   pGVMM   The GVMM instance data.
+ * @param   a_pGVMM     The GVMM instance data.
+ * @sa      GVMMR0_USED_SHARED_UNLOCK, GVMMR0_USED_EXCLUSIVE_LOCK
  */
-DECLINLINE(int) gvmmR0UsedLock(PGVMM pGVMM)
-{
-    LogFlow(("++gvmmR0UsedLock(%p)\n", pGVMM));
-    int rc = RTSemFastMutexRequest(pGVMM->UsedLock);
-    LogFlow(("gvmmR0UsedLock(%p)->%Rrc\n", pGVMM, rc));
-    return rc;
-}
+#define GVMMR0_USED_SHARED_LOCK(a_pGVMM)        RTCritSectRwEnterShared(&(a_pGVMM)->UsedLock)
+
+/**
+ * Release the 'used' lock in when owning it in shared mode.
+ *
+ * @returns IPRT status code, see RTSemFastMutexRequest.
+ * @param   a_pGVMM     The GVMM instance data.
+ * @sa      GVMMR0_USED_SHARED_LOCK
+ */
+#define GVMMR0_USED_SHARED_UNLOCK(a_pGVMM)      RTCritSectRwLeaveShared(&(a_pGVMM)->UsedLock)
 
+/**
+ * Acquire the 'used' lock in exclusive mode.
+ *
+ * Only use this function when making changes to the used list.
+ *
+ * @returns IPRT status code, see RTSemFastMutexRequest.
+ * @param   a_pGVMM     The GVMM instance data.
+ * @sa      GVMMR0_USED_EXCLUSIVE_UNLOCK
+ */
+#define GVMMR0_USED_EXCLUSIVE_LOCK(a_pGVMM)     RTCritSectRwEnterExcl(&(a_pGVMM)->UsedLock)
 
 /**
- * Release the 'used' lock.
+ * Release the 'used' lock when owning it in exclusive mode.
  *
  * @returns IPRT status code, see RTSemFastMutexRelease.
- * @param   pGVMM   The GVMM instance data.
+ * @param   a_pGVMM     The GVMM instance data.
+ * @sa      GVMMR0_USED_EXCLUSIVE_LOCK, GVMMR0_USED_SHARED_UNLOCK
  */
-DECLINLINE(int) gvmmR0UsedUnlock(PGVMM pGVMM)
-{
-    LogFlow(("--gvmmR0UsedUnlock(%p)\n", pGVMM));
-    int rc = RTSemFastMutexRelease(pGVMM->UsedLock);
-    AssertRC(rc);
-    return rc;
-}
+#define GVMMR0_USED_EXCLUSIVE_UNLOCK(a_pGVMM)   RTCritSectRwLeaveExcl(&(a_pGVMM)->UsedLock)
 
 
 /**
@@ -718,7 +742,7 @@ DECLINLINE(int) gvmmR0UsedUnlock(PGVMM pGVMM)
 DECLINLINE(int) gvmmR0CreateDestroyLock(PGVMM pGVMM)
 {
     LogFlow(("++gvmmR0CreateDestroyLock(%p)\n", pGVMM));
-    int rc = RTSemFastMutexRequest(pGVMM->CreateDestroyLock);
+    int rc = RTCritSectEnter(&pGVMM->CreateDestroyLock);
     LogFlow(("gvmmR0CreateDestroyLock(%p)->%Rrc\n", pGVMM, rc));
     return rc;
 }
@@ -733,7 +757,7 @@ DECLINLINE(int) gvmmR0CreateDestroyLock(PGVMM pGVMM)
 DECLINLINE(int) gvmmR0CreateDestroyUnlock(PGVMM pGVMM)
 {
     LogFlow(("--gvmmR0CreateDestroyUnlock(%p)\n", pGVMM));
-    int rc = RTSemFastMutexRelease(pGVMM->CreateDestroyLock);
+    int rc = RTCritSectLeave(&pGVMM->CreateDestroyLock);
     AssertRC(rc);
     return rc;
 }
@@ -829,7 +853,7 @@ GVMMR0DECL(int) GVMMR0CreateVM(PSUPDRVSESSION pSession, uint32_t cCpus, PVM *ppV
                 /*
                  * Move the handle from the free to used list and perform permission checks.
                  */
-                rc = gvmmR0UsedLock(pGVMM);
+                rc = GVMMR0_USED_EXCLUSIVE_LOCK(pGVMM);
                 AssertRC(rc);
 
                 pGVMM->iFreeHead = pHandle->iNext;
@@ -843,7 +867,7 @@ GVMMR0DECL(int) GVMMR0CreateVM(PSUPDRVSESSION pSession, uint32_t cCpus, PVM *ppV
                 pHandle->hEMT0    = NIL_RTNATIVETHREAD;
                 pHandle->ProcId   = NIL_RTPROCESS;
 
-                gvmmR0UsedUnlock(pGVMM);
+                GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
 
                 rc = SUPR0ObjVerifyAccess(pHandle->pvObj, pSession, NULL);
                 if (RT_SUCCESS(rc))
@@ -923,7 +947,7 @@ GVMMR0DECL(int) GVMMR0CreateVM(PSUPDRVSESSION pSession, uint32_t cCpus, PVM *ppV
                                         AssertPtr((void *)pVM->paVMPagesR3);
 
                                         /* complete the handle - take the UsedLock sem just to be careful. */
-                                        rc = gvmmR0UsedLock(pGVMM);
+                                        rc = GVMMR0_USED_EXCLUSIVE_LOCK(pGVMM);
                                         AssertRC(rc);
 
                                         pHandle->pVM                  = pVM;
@@ -940,13 +964,15 @@ GVMMR0DECL(int) GVMMR0CreateVM(PSUPDRVSESSION pSession, uint32_t cCpus, PVM *ppV
                                         {
                                             VBOXVMM_R0_GVMM_VM_CREATED(pGVM, pVM, ProcId, (void *)hEMT0, cCpus);
 
-                                            gvmmR0UsedUnlock(pGVMM);
+                                            GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
                                             gvmmR0CreateDestroyUnlock(pGVMM);
 
                                             *ppVM = pVM;
                                             Log(("GVMMR0CreateVM: pVM=%p pVMR3=%p pGVM=%p hGVM=%d\n", pVM, pVM->pVMR3, pGVM, iHandle));
                                             return VINF_SUCCESS;
                                         }
+
+                                        GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
                                     }
 
                                     RTR0MemObjFree(pGVM->gvmm.s.VMMapObj, false /* fFreeMappings */);
@@ -1238,7 +1264,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1,
 
     int rc = gvmmR0CreateDestroyLock(pGVMM);
     AssertRC(rc);
-    rc = gvmmR0UsedLock(pGVMM);
+    rc = GVMMR0_USED_EXCLUSIVE_LOCK(pGVMM);
     AssertRC(rc);
 
     /*
@@ -1247,7 +1273,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1,
     if (RT_UNLIKELY(pHandle->iNext >= RT_ELEMENTS(pGVMM->aHandles)))
     {
         SUPR0Printf("GVM: used list index %d is out of range!\n", pHandle->iNext);
-        gvmmR0UsedUnlock(pGVMM);
+        GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
         gvmmR0CreateDestroyUnlock(pGVMM);
         return;
     }
@@ -1263,7 +1289,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1,
             if (RT_UNLIKELY(iPrev >= RT_ELEMENTS(pGVMM->aHandles)))
             {
                 SUPR0Printf("GVM: used list index %d is out of range!\n", iPrev);
-                gvmmR0UsedUnlock(pGVMM);
+                GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
                 gvmmR0CreateDestroyUnlock(pGVMM);
                 return;
             }
@@ -1280,7 +1306,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1,
         if (!iPrev)
         {
             SUPR0Printf("GVM: can't find the handle previous previous of %d!\n", pHandle->iSelf);
-            gvmmR0UsedUnlock(pGVMM);
+            GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
             gvmmR0CreateDestroyUnlock(pGVMM);
             return;
         }
@@ -1299,7 +1325,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1,
         &&  pGVM->u32Magic == GVM_MAGIC)
     {
         pGVMM->cEMTs -= pGVM->cCpus;
-        gvmmR0UsedUnlock(pGVMM);
+        GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
 
         gvmmR0CleanupVM(pGVM);
 
@@ -1345,7 +1371,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1,
         RTMemFree(pGVM);
 
         /* Re-acquire the UsedLock before freeing the handle since we're updating handle fields. */
-        rc = gvmmR0UsedLock(pGVMM);
+        rc = GVMMR0_USED_EXCLUSIVE_LOCK(pGVMM);
         AssertRC(rc);
     }
     /* else: GVMMR0CreateVM cleanup. */
@@ -1362,7 +1388,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1,
     ASMAtomicWriteHandle(&pHandle->hEMT0,        NIL_RTNATIVETHREAD);
     ASMAtomicWriteU32(&pHandle->ProcId,          NIL_RTPROCESS);
 
-    gvmmR0UsedUnlock(pGVMM);
+    GVMMR0_USED_EXCLUSIVE_UNLOCK(pGVMM);
     gvmmR0CreateDestroyUnlock(pGVMM);
     LogFlow(("gvmmR0HandleObjDestructor: returns\n"));
 }
@@ -1386,7 +1412,7 @@ GVMMR0DECL(int) GVMMR0RegisterVCpu(PVM pVM, VMCPUID idCpu)
      */
     PGVM pGVM;
     PGVMM pGVMM;
-    int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, false /* fTakeUsedLock */);
+    int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, false /* fTakeUsedLock */); /** @todo take lock here. */
     if (RT_FAILURE(rc))
         return rc;
 
@@ -1442,9 +1468,11 @@ GVMMR0DECL(PGVM) GVMMR0ByHandle(uint32_t hGVM)
  * @param   pVM             The cross context VM structure.
  * @param   ppGVM           Where to store the GVM pointer.
  * @param   ppGVMM          Where to store the pointer to the GVMM instance data.
- * @param   fTakeUsedLock   Whether to take the used lock or not.
- *                          Be very careful if not taking the lock as it's possible that
- *                          the VM will disappear then.
+ * @param   fTakeUsedLock   Whether to take the used lock or not.  We take it in
+ *                          shared mode when requested.
+ *
+ *                          Be very careful if not taking the lock as it's
+ *                          possible that the VM will disappear then!
  *
  * @remark  This will not assert on an invalid pVM but try return silently.
  */
@@ -1476,7 +1504,7 @@ static int gvmmR0ByVM(PVM pVM, PGVM *ppGVM, PGVMM *ppGVMM, bool fTakeUsedLock)
     PGVM pGVM;
     if (fTakeUsedLock)
     {
-        int rc = gvmmR0UsedLock(pGVMM);
+        int rc = GVMMR0_USED_SHARED_LOCK(pGVMM);
         AssertRCReturn(rc, rc);
 
         pGVM = pHandle->pGVM;
@@ -1486,7 +1514,7 @@ static int gvmmR0ByVM(PVM pVM, PGVM *ppGVM, PGVMM *ppGVMM, bool fTakeUsedLock)
                         ||  !VALID_PTR(pGVM)
                         ||  pGVM->pVM != pVM))
         {
-            gvmmR0UsedUnlock(pGVMM);
+            GVMMR0_USED_SHARED_UNLOCK(pGVMM);
             return VERR_INVALID_HANDLE;
         }
     }
@@ -1521,6 +1549,8 @@ static int gvmmR0ByVM(PVM pVM, PGVM *ppGVM, PGVMM *ppGVMM, bool fTakeUsedLock)
  *
  * @remark  This will not take the 'used'-lock because it doesn't do
  *          nesting and this function will be used from under the lock.
+ *          Update: This is no longer true.  Consider taking the lock in shared
+ *          mode!
  */
 GVMMR0DECL(int) GVMMR0ByVM(PVM pVM, PGVM *ppGVM)
 {
@@ -1678,8 +1708,7 @@ static unsigned gvmmR0SchedDoWakeUps(PGVMM pGVMM, uint64_t u64Now)
      * Skip this if we've got disabled because of high resolution wakeups or by
      * the user.
      */
-    if (   !pGVMM->nsEarlyWakeUp1
-        && !pGVMM->nsEarlyWakeUp2)
+    if (!pGVMM->fDoEarlyWakeUps)
         return 0;
 
 /** @todo Rewrite this algorithm. See performance defect XYZ. */
@@ -1693,6 +1722,12 @@ static unsigned gvmmR0SchedDoWakeUps(PGVMM pGVMM, uint64_t u64Now)
         return 0;
 
     /*
+     * Only one thread doing this at a time.
+     */
+    if (!ASMAtomicCmpXchgBool(&pGVMM->fDoingEarlyWakeUps, true, false))
+        return 0;
+
+    /*
      * The first pass will wake up VMs which have actually expired
      * and look for VMs that should be woken up in the 2nd and 3rd passes.
      */
@@ -1806,6 +1841,7 @@ static unsigned gvmmR0SchedDoWakeUps(PGVMM pGVMM, uint64_t u64Now)
      */
     pGVMM->uNsNextEmtWakeup = u64Min;
 
+    ASMAtomicWriteBool(&pGVMM->fDoingEarlyWakeUps, false);
     return cWoken;
 }
 
@@ -1841,13 +1877,16 @@ GVMMR0DECL(int) GVMMR0SchedHalt(PVM pVM, VMCPUID idCpu, uint64_t u64ExpireGipTim
     Assert(!pCurGVCpu->gvmm.s.u64HaltExpire);
 
     /*
-     * Take the UsedList semaphore, get the current time
-     * and check if anyone needs waking up.
-     * Interrupts must NOT be disabled at this point because we ask for GIP time!
+     * If we're doing early wake-ups, we must take the UsedList lock before we
+     * start querying the current time.
+     * Note! Interrupts must NOT be disabled at this point because we ask for GIP time!
      */
-    rc = gvmmR0UsedLock(pGVMM);
-    AssertRC(rc);
-    GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
+    bool const fDoEarlyWakeUps = pGVMM->fDoEarlyWakeUps;
+    if (fDoEarlyWakeUps)
+    {
+        rc = GVMMR0_USED_SHARED_LOCK(pGVMM); AssertRC(rc);
+        GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
+    }
 
     pCurGVCpu->gvmm.s.iCpuEmt = ASMGetApicId();
 
@@ -1858,8 +1897,12 @@ GVMMR0DECL(int) GVMMR0SchedHalt(PVM pVM, VMCPUID idCpu, uint64_t u64ExpireGipTim
     const uint64_t u64NowSys = RTTimeSystemNanoTS();
     const uint64_t u64NowGip = RTTimeNanoTS();
     GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
-    pGVM->gvmm.s.StatsSched.cHaltWakeUps += gvmmR0SchedDoWakeUps(pGVMM, u64NowGip);
-    GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
+
+    if (fDoEarlyWakeUps)
+    {
+        pGVM->gvmm.s.StatsSched.cHaltWakeUps += gvmmR0SchedDoWakeUps(pGVMM, u64NowGip);
+        GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
+    }
 
     /*
      * Go to sleep if we must...
@@ -1874,11 +1917,14 @@ GVMMR0DECL(int) GVMMR0SchedHalt(PVM pVM, VMCPUID idCpu, uint64_t u64ExpireGipTim
         pGVM->gvmm.s.StatsSched.cHaltBlocking++;
         if (cNsInterval > RT_NS_1SEC)
             u64ExpireGipTime = u64NowGip + RT_NS_1SEC;
-        if (u64ExpireGipTime < pGVMM->uNsNextEmtWakeup)
-            pGVMM->uNsNextEmtWakeup = u64ExpireGipTime;
         ASMAtomicWriteU64(&pCurGVCpu->gvmm.s.u64HaltExpire, u64ExpireGipTime);
         ASMAtomicIncU32(&pGVMM->cHaltedEMTs);
-        gvmmR0UsedUnlock(pGVMM);
+        if (fDoEarlyWakeUps)
+        {
+            if (u64ExpireGipTime < pGVMM->uNsNextEmtWakeup)
+                pGVMM->uNsNextEmtWakeup = u64ExpireGipTime;
+            GVMMR0_USED_SHARED_UNLOCK(pGVMM);
+        }
         GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
 
         rc = RTSemEventMultiWaitEx(pCurGVCpu->gvmm.s.HaltEventMulti,
@@ -1904,7 +1950,8 @@ GVMMR0DECL(int) GVMMR0SchedHalt(PVM pVM, VMCPUID idCpu, uint64_t u64ExpireGipTim
     else
     {
         pGVM->gvmm.s.StatsSched.cHaltNotBlocking++;
-        gvmmR0UsedUnlock(pGVMM);
+        if (fDoEarlyWakeUps)
+            GVMMR0_USED_SHARED_UNLOCK(pGVMM);
         GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
         RTSemEventMultiReset(pCurGVCpu->gvmm.s.HaltEventMulti);
         GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
@@ -1990,7 +2037,7 @@ GVMMR0DECL(int) GVMMR0SchedWakeUpEx(PVM pVM, VMCPUID idCpu, bool fTakeUsedLock)
             rc = gvmmR0SchedWakeUpOne(pGVM, &pGVM->aCpus[idCpu]);
             GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
 
-            if (fTakeUsedLock)
+            if (fTakeUsedLock && pGVMM->fDoEarlyWakeUps)
             {
                 /*
                  * While we're here, do a round of scheduling.
@@ -2006,7 +2053,7 @@ GVMMR0DECL(int) GVMMR0SchedWakeUpEx(PVM pVM, VMCPUID idCpu, bool fTakeUsedLock)
 
         if (fTakeUsedLock)
         {
-            int rc2 = gvmmR0UsedUnlock(pGVMM);
+            int rc2 = GVMMR0_USED_SHARED_UNLOCK(pGVMM);
             AssertRC(rc2);
             GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
         }
@@ -2089,7 +2136,7 @@ GVMMR0DECL(int) GVMMR0SchedPokeEx(PVM pVM, VMCPUID idCpu, bool fTakeUsedLock)
 
         if (fTakeUsedLock)
         {
-            int rc2 = gvmmR0UsedUnlock(pGVMM);
+            int rc2 = GVMMR0_USED_SHARED_UNLOCK(pGVMM);
             AssertRC(rc2);
         }
     }
@@ -2162,7 +2209,7 @@ GVMMR0DECL(int) GVMMR0SchedWakeUpAndPokeCpus(PVM pVM, PCVMCPUSET pSleepSet, PCVM
             }
         }
 
-        int rc2 = gvmmR0UsedUnlock(pGVMM);
+        int rc2 = GVMMR0_USED_SHARED_UNLOCK(pGVMM);
         AssertRC(rc2);
         GVMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     }
@@ -2216,22 +2263,29 @@ GVMMR0DECL(int) GVMMR0SchedPoll(PVM pVM, VMCPUID idCpu, bool fYield)
     int rc = gvmmR0ByVMAndEMT(pVM, idCpu, &pGVM, &pGVMM);
     if (RT_SUCCESS(rc))
     {
-        rc = gvmmR0UsedLock(pGVMM);
-        AssertRC(rc);
-        pGVM->gvmm.s.StatsSched.cPollCalls++;
+        /*
+         * We currently only implement helping doing wakeups (fYield = false), so don't
+         * bother taking the lock if gvmmR0SchedDoWakeUps is not going to do anything.
+         */
+        if (!fYield && pGVMM->fDoEarlyWakeUps)
+        {
+            rc = GVMMR0_USED_SHARED_LOCK(pGVMM); AssertRC(rc);
+            pGVM->gvmm.s.StatsSched.cPollCalls++;
 
-        Assert(ASMGetFlags() & X86_EFL_IF);
-        const uint64_t u64Now = RTTimeNanoTS(); /* (GIP time) */
+            Assert(ASMGetFlags() & X86_EFL_IF);
+            const uint64_t u64Now = RTTimeNanoTS(); /* (GIP time) */
 
-        if (!fYield)
             pGVM->gvmm.s.StatsSched.cPollWakeUps += gvmmR0SchedDoWakeUps(pGVMM, u64Now);
-        else
-        {
-            /** @todo implement this... */
-            rc = VERR_NOT_IMPLEMENTED;
-        }
 
-        gvmmR0UsedUnlock(pGVMM);
+            GVMMR0_USED_SHARED_UNLOCK(pGVMM);
+        }
+        /*
+         * Not quite sure what we could do here...
+         */
+        else if (fYield)
+            rc = VERR_NOT_IMPLEMENTED; /** @todo implement this... */
+        else
+            rc = VINF_SUCCESS;
     }
 
     LogFlow(("GVMMR0SchedWakeUp: returns %Rrc\n", rc));
@@ -2443,7 +2497,7 @@ GVMMR0DECL(int) GVMMR0QueryStatistics(PGVMMSTATS pStats, PSUPDRVSESSION pSession
         GVMM_GET_VALID_INSTANCE(pGVMM, VERR_GVMM_INSTANCE);
         memset(&pStats->SchedVM, 0, sizeof(pStats->SchedVM));
 
-        int rc = gvmmR0UsedLock(pGVMM);
+        int rc = GVMMR0_USED_SHARED_LOCK(pGVMM);
         AssertRCReturn(rc, rc);
     }
 
@@ -2516,7 +2570,7 @@ GVMMR0DECL(int) GVMMR0QueryStatistics(PGVMMSTATS pStats, PSUPDRVSESSION pSession
     }
     pStats->cHostCpus = iDstCpu;
 
-    gvmmR0UsedUnlock(pGVMM);
+    GVMMR0_USED_SHARED_UNLOCK(pGVMM);
 
     return VINF_SUCCESS;
 }
@@ -2591,7 +2645,7 @@ GVMMR0DECL(int) GVMMR0ResetStatistics(PCGVMMSTATS pStats, PSUPDRVSESSION pSessio
     {
         GVMM_GET_VALID_INSTANCE(pGVMM, VERR_GVMM_INSTANCE);
 
-        int rc = gvmmR0UsedLock(pGVMM);
+        int rc = GVMMR0_USED_SHARED_LOCK(pGVMM);
         AssertRCReturn(rc, rc);
     }
 
@@ -2631,7 +2685,7 @@ GVMMR0DECL(int) GVMMR0ResetStatistics(PCGVMMSTATS pStats, PSUPDRVSESSION pSessio
         }
     }
 
-    gvmmR0UsedUnlock(pGVMM);
+    GVMMR0_USED_SHARED_UNLOCK(pGVMM);
 
     return VINF_SUCCESS;
 }
diff --git a/src/VBox/VMM/VMMR0/HMR0.cpp b/src/VBox/VMM/VMMR0/HMR0.cpp
index d26c5ee..351e6c5 100644
--- a/src/VBox/VMM/VMMR0/HMR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMR0.cpp
@@ -119,6 +119,9 @@ static struct
         /** Host EFER value (set by ring-0 VMX init) */
         uint64_t                    u64HostEfer;
 
+        /** Host SMM monitor control (used for logging/diagnostics) */
+        uint64_t                    u64HostSmmMonitorCtl;
+
         /** VMX MSR values */
         VMXMSRS                     Msrs;
 
@@ -382,21 +385,22 @@ static int hmR0InitIntel(uint32_t u32FeaturesECX, uint32_t u32FeaturesEDX)
             /*
              * Read all relevant registers and MSRs.
              */
-            g_HmR0.vmx.u64HostCr4          = ASMGetCR4();
-            g_HmR0.vmx.u64HostEfer         = ASMRdMsr(MSR_K6_EFER);
-            g_HmR0.vmx.Msrs.u64BasicInfo   = ASMRdMsr(MSR_IA32_VMX_BASIC_INFO);
-            g_HmR0.vmx.Msrs.VmxPinCtls.u   = ASMRdMsr(MSR_IA32_VMX_PINBASED_CTLS);
-            g_HmR0.vmx.Msrs.VmxProcCtls.u  = ASMRdMsr(MSR_IA32_VMX_PROCBASED_CTLS);
-            g_HmR0.vmx.Msrs.VmxExit.u      = ASMRdMsr(MSR_IA32_VMX_EXIT_CTLS);
-            g_HmR0.vmx.Msrs.VmxEntry.u     = ASMRdMsr(MSR_IA32_VMX_ENTRY_CTLS);
-            g_HmR0.vmx.Msrs.u64Misc        = ASMRdMsr(MSR_IA32_VMX_MISC);
-            g_HmR0.vmx.Msrs.u64Cr0Fixed0   = ASMRdMsr(MSR_IA32_VMX_CR0_FIXED0);
-            g_HmR0.vmx.Msrs.u64Cr0Fixed1   = ASMRdMsr(MSR_IA32_VMX_CR0_FIXED1);
-            g_HmR0.vmx.Msrs.u64Cr4Fixed0   = ASMRdMsr(MSR_IA32_VMX_CR4_FIXED0);
-            g_HmR0.vmx.Msrs.u64Cr4Fixed1   = ASMRdMsr(MSR_IA32_VMX_CR4_FIXED1);
-            g_HmR0.vmx.Msrs.u64VmcsEnum    = ASMRdMsr(MSR_IA32_VMX_VMCS_ENUM);
+            g_HmR0.vmx.u64HostCr4           = ASMGetCR4();
+            g_HmR0.vmx.u64HostSmmMonitorCtl = ASMRdMsr(MSR_IA32_SMM_MONITOR_CTL);
+            g_HmR0.vmx.u64HostEfer          = ASMRdMsr(MSR_K6_EFER);
+            g_HmR0.vmx.Msrs.u64BasicInfo    = ASMRdMsr(MSR_IA32_VMX_BASIC_INFO);
+            g_HmR0.vmx.Msrs.VmxPinCtls.u    = ASMRdMsr(MSR_IA32_VMX_PINBASED_CTLS);
+            g_HmR0.vmx.Msrs.VmxProcCtls.u   = ASMRdMsr(MSR_IA32_VMX_PROCBASED_CTLS);
+            g_HmR0.vmx.Msrs.VmxExit.u       = ASMRdMsr(MSR_IA32_VMX_EXIT_CTLS);
+            g_HmR0.vmx.Msrs.VmxEntry.u      = ASMRdMsr(MSR_IA32_VMX_ENTRY_CTLS);
+            g_HmR0.vmx.Msrs.u64Misc         = ASMRdMsr(MSR_IA32_VMX_MISC);
+            g_HmR0.vmx.Msrs.u64Cr0Fixed0    = ASMRdMsr(MSR_IA32_VMX_CR0_FIXED0);
+            g_HmR0.vmx.Msrs.u64Cr0Fixed1    = ASMRdMsr(MSR_IA32_VMX_CR0_FIXED1);
+            g_HmR0.vmx.Msrs.u64Cr4Fixed0    = ASMRdMsr(MSR_IA32_VMX_CR4_FIXED0);
+            g_HmR0.vmx.Msrs.u64Cr4Fixed1    = ASMRdMsr(MSR_IA32_VMX_CR4_FIXED1);
+            g_HmR0.vmx.Msrs.u64VmcsEnum     = ASMRdMsr(MSR_IA32_VMX_VMCS_ENUM);
             /* VPID 16 bits ASID. */
-            g_HmR0.uMaxAsid                = 0x10000; /* exclusive */
+            g_HmR0.uMaxAsid                 = 0x10000; /* exclusive */
 
             if (g_HmR0.vmx.Msrs.VmxProcCtls.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC_USE_SECONDARY_EXEC_CTRL)
             {
@@ -1205,6 +1209,7 @@ VMMR0_INT_DECL(int) HMR0InitVM(PVM pVM)
     pVM->hm.s.vmx.cPreemptTimerShift    = g_HmR0.vmx.cPreemptTimerShift;
     pVM->hm.s.vmx.u64HostCr4            = g_HmR0.vmx.u64HostCr4;
     pVM->hm.s.vmx.u64HostEfer           = g_HmR0.vmx.u64HostEfer;
+    pVM->hm.s.vmx.u64HostSmmMonitorCtl  = g_HmR0.vmx.u64HostSmmMonitorCtl;
     pVM->hm.s.vmx.Msrs                  = g_HmR0.vmx.Msrs;
     pVM->hm.s.svm.u64MsrHwcr            = g_HmR0.svm.u64MsrHwcr;
     pVM->hm.s.svm.u32Rev                = g_HmR0.svm.u32Rev;
diff --git a/src/VBox/VMM/VMMR3/HM.cpp b/src/VBox/VMM/VMMR3/HM.cpp
index 56f9140..08a5d8c 100644
--- a/src/VBox/VMM/VMMR3/HM.cpp
+++ b/src/VBox/VMM/VMMR3/HM.cpp
@@ -553,7 +553,7 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM)
                     break;
 
                 case VERR_VMX_MSR_ALL_VMX_DISABLED:
-                    pszMsg = "VT-x is disabled in the BIOS for both all CPU modes";
+                    pszMsg = "VT-x is disabled in the BIOS for all CPU modes";
                     break;
 
                 case VERR_VMX_MSR_LOCKING_FAILED:
@@ -1044,6 +1044,7 @@ static int hmR3InitFinalizeR0Intel(PVM pVM)
     LogRel(("HM: Using VT-x implementation 2.0!\n"));
     LogRel(("HM: Host CR4                        = %#RX64\n", pVM->hm.s.vmx.u64HostCr4));
     LogRel(("HM: Host EFER                       = %#RX64\n", pVM->hm.s.vmx.u64HostEfer));
+    LogRel(("HM: MSR_IA32_SMM_MONITOR_CTL        = %#RX64\n", pVM->hm.s.vmx.u64HostSmmMonitorCtl));
     LogRel(("HM: MSR_IA32_FEATURE_CONTROL        = %#RX64\n", pVM->hm.s.vmx.Msrs.u64FeatureCtrl));
     if (!(pVM->hm.s.vmx.Msrs.u64FeatureCtrl & MSR_IA32_FEATURE_CONTROL_LOCK))
         LogRel(("HM:   IA32_FEATURE_CONTROL lock bit not set, possibly bad hardware!\n"));
diff --git a/src/VBox/VMM/VMMR3/VM.cpp b/src/VBox/VMM/VMMR3/VM.cpp
index 8034dc9..7c74032 100644
--- a/src/VBox/VMM/VMMR3/VM.cpp
+++ b/src/VBox/VMM/VMMR3/VM.cpp
@@ -315,7 +315,7 @@ VMMR3DECL(int)   VMR3Create(uint32_t cCpus, PCVMM2USERMETHODS pVmm2UserMethods,
                     pszError = N_("One of the kernel modules was not successfully loaded. Make sure "
                                   "that no kernel modules from an older version of VirtualBox exist. "
                                   "Then try to recompile and reload the kernel modules by executing "
-                                  "'/sbin/vboxconfig' as root");
+                                  "'/sbin/rcvboxdrv setup' as root");
                     break;
 #endif
 
@@ -381,7 +381,7 @@ VMMR3DECL(int)   VMR3Create(uint32_t cCpus, PCVMM2USERMETHODS pVmm2UserMethods,
                     pszError = N_("VirtualBox kernel driver not loaded. The vboxdrv kernel module "
                                   "was either not loaded or /dev/vboxdrv is not set up properly. "
                                   "Re-setup the kernel module by executing "
-                                  "'/sbin/vboxconfig' as root");
+                                  "'/sbin/rcvboxdrv setup' as root");
 #else
                     pszError = N_("VirtualBox kernel driver not loaded");
 #endif
@@ -423,7 +423,7 @@ VMMR3DECL(int)   VMR3Create(uint32_t cCpus, PCVMM2USERMETHODS pVmm2UserMethods,
                     pszError = N_("VirtualBox kernel driver not installed. The vboxdrv kernel module "
                                   "was either not loaded or /dev/vboxdrv was not created for some "
                                   "reason. Re-setup the kernel module by executing "
-                                  "'/sbin/vboxconfig' as root");
+                                  "'/sbin/rcvboxdrv setup' as root");
 #else
                     pszError = N_("VirtualBox kernel driver not installed");
 #endif
diff --git a/src/VBox/VMM/VMMR3/VMReq.cpp b/src/VBox/VMM/VMMR3/VMReq.cpp
index 873f2c7..9cf748f 100644
--- a/src/VBox/VMM/VMMR3/VMReq.cpp
+++ b/src/VBox/VMM/VMMR3/VMReq.cpp
@@ -1193,7 +1193,7 @@ static int  vmR3ReqProcessOneU(PUVM pUVM, PVMREQ pReq)
 {
     LogFlow(("vmR3ReqProcessOneU: pReq=%p type=%d fFlags=%#x\n", pReq, pReq->enmType, pReq->fFlags));
 
-#if 1 /*def VBOX_STRICT */
+#if 0 /* Should not be necessary, see trunk r104712. Fixes out of memory runtime error. */
     /*
      * Disable rendezvous if servicing a priority request.  Priority requests
      * can not make use of the EMT rendezvous API.
@@ -1344,7 +1344,7 @@ static int  vmR3ReqProcessOneU(PUVM pUVM, PVMREQ pReq)
         }
     }
 
-#if 1 /*def VBOX_STRICT */
+#if 0 /* Should not be necessary, see trunk r104712. Fixes out of memory runtime error. */
     /*
      * Restore the rendezvous disabled state.
      */
diff --git a/src/VBox/VMM/include/HMInternal.h b/src/VBox/VMM/include/HMInternal.h
index 374f225..12cac5c 100644
--- a/src/VBox/VMM/include/HMInternal.h
+++ b/src/VBox/VMM/include/HMInternal.h
@@ -434,7 +434,8 @@ typedef struct HM
         uint32_t                    u32Alignment0;
         /** Host CR4 value (set by ring-0 VMX init) */
         uint64_t                    u64HostCr4;
-
+        /** Host SMM monitor control (set by ring-0 VMX init) */
+        uint64_t                    u64HostSmmMonitorCtl;
         /** Host EFER value (set by ring-0 VMX init) */
         uint64_t                    u64HostEfer;
         /** Whether the CPU supports VMCS fields for swapping EFER. */
diff --git a/src/libs/Makefile.kmk b/src/libs/Makefile.kmk
index c9544cd..9d1a116 100644
--- a/src/libs/Makefile.kmk
+++ b/src/libs/Makefile.kmk
@@ -33,8 +33,8 @@ endif
 
 # PNG support (for screenshots).
 if !defined(VBOX_ONLY_DOCS) && !defined(VBOX_ONLY_SDK) && !defined(VBOX_ONLY_VALIDATIONKIT) \
- && "$(SDK_VBOX_LIBPNG_INCS)" == "$(PATH_ROOT)/src/libs/libpng-1.2.53"
- include $(PATH_SUB_CURRENT)/libpng-1.2.53/Makefile.kmk
+ && "$(SDK_VBOX_LIBPNG_INCS)" == "$(PATH_ROOT)/src/libs/libpng-1.2.54"
+ include $(PATH_SUB_CURRENT)/libpng-1.2.54/Makefile.kmk
 endif # !VBOX_ONLY_DOCS
 
 # Libcurl for inet access
@@ -52,11 +52,11 @@ endif
 if !defined(VBOX_ONLY_SDK) \
  && (   "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \
      || defined(VBOX_WITH_EXTPACK_PUEL_BUILD))
- include $(PATH_SUB_CURRENT)/openssl-1.0.1p/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/openssl-1.0.1q/Makefile.kmk
 endif
 
-# libjpeg for VRDP video redirection
-if defined(VBOX_WITH_VRDP)
+# libjpeg for VRDP video redirection and ExtPack's DrvHostWebCam
+if defined(VBOX_WITH_VRDP) || defined(VBOX_WITH_EXTPACK_PUEL)
  include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk
 endif
 
diff --git a/src/libs/xpcom18a4/Makefile.kmk b/src/libs/xpcom18a4/Makefile.kmk
index 5c4599e..8b610dc 100644
--- a/src/libs/xpcom18a4/Makefile.kmk
+++ b/src/libs/xpcom18a4/Makefile.kmk
@@ -523,6 +523,7 @@ VBox-xpcom-nspr_DEFS.linux = \
 	_POSIX_SOURCE=1 \
 	_BSD_SOURCE=1 \
 	_SVID_SOURCE=1 \
+	_DEFAULT_SOURCE \
 	_REENTRANT=1 \
 	_LARGEFILE64_SOURCE=1 \
 	HAVE_FCNTL_FILE_LOCKING=1 \
diff --git a/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp b/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp
index 9d93908..5f71263 100644
--- a/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp
+++ b/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp
@@ -62,6 +62,8 @@ PrepareAndDispatch(uint32 methodIndex, nsXPTCStubBase* self, PRUint32* args)
 
     self->GetInterfaceInfo(&iface_info);
     NS_ASSERTION(iface_info,"no interface info");
+    if (!iface_info)
+        return NS_ERROR_UNEXPECTED;
 
     iface_info->GetMethodInfo(PRUint16(methodIndex), &info);
     NS_ASSERTION(info,"no interface info");

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-virtualbox/virtualbox.git



More information about the Pkg-virtualbox-commits mailing list